我在discord.jsv12中执行了一个静音命令。每当我运行该命令时,我都会收到一个错误。我对编码有点陌生,所以我无法理解当我运行命令时出现错误的原因。下面是我的代码:
module.exports = {
name: "mute",
description: "Mutesd a member for a given time",
async run (client, message, args) {
const muteRoleId = message.guild.roles.cache.get('762199219074367508')
let muteRole;
const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if (!member)
return message.channel.send('Please mention a user or provide a valid user ID');
if (member === message.member)
return message.channel.send('You cannot mute yourself');
if (member === message.guild.me) return message.channel.send(message, 0, 'You cannot mute me');
if (member.roles.highest.position >= message.member.roles.highest.position)
return message.channel.send('You cannot mute someone with an equal or higher role');
if (!args[1])
return message.channel.send('Please enter a length of time of 14 days or less (1s/m/h/d)');
let time = ms(args[1]);
if (!time || time > 1209600000) // Cap at 14 days, larger than 24.8 days causes integer overflow
return message.channel.send('Please enter a length of time of 14 days or less (1s/m/h/d)');
let reason = args.slice(2).join(' ');
if (!reason) reason = '`None Provided`';
if (reason.length > 1024) reason = reason.slice(0, 1021) + '...';
if (member.roles.cache.has(muteRoleId))
return message.channel.send('Provided member is already muted');
// Mute member
try {
await member.roles.add(muteRole);
} catch (err) {
console.log(err)
return message.channel.send('Please check the role hierarchy', err.message);
}
const muteEmbed = new MessageEmbed()
.setTitle('Mute Member')
.setDescription(`${member} has now been muted for **${ms(time, { long: true })}**.`)
.addField('Moderator', message.member, true)
.addField('Member', member, true)
.addField('Time', `\`${ms(time)}\``, true)
.addField('Reason', reason)
.setFooter(message.member.displayName, message.author.displayAvatarURL({ dynamic: true }))
.setTimestamp()
.setColor(message.guild.me.displayHexColor);
message.channel.send(muteEmbed);
// Unmute member
member.timeout = message.client.setTimeout(async () => {
try {
await member.roles.remove(muteRole);
const unmuteEmbed = new MessageEmbed()
.setTitle('Unmute Member')
.setDescription(`${member} has been unmuted.`)
.setTimestamp()
.setColor(message.guild.me.displayHexColor);
message.channel.send(unmuteEmbed);
} catch (err) {
console.log(err)
return message.channel.send('Please check the role hierarchy', err.message);
}
}, time);
}
};
正如我前面提到的,每当我运行这个命令时,都会出现以下错误:
TypeError [INVALID_TYPE]: Supplied roles is not a Role, Snowflake or Array or Collection of Roles or Snowflakes.
at GuildMemberRoleManager.add (/home/runner/Utki-the-bot/node_modules/discord.js/src/managers/GuildMemberRoleManager.js:93:15)
at Object.run (/home/runner/Utki-the-bot/commands/mute.js:37:26)
at Client.<anonymous> (/home/runner/Utki-the-bot/index.js:71:42)
at Client.emit (events.js:315:20)
at Client.EventEmitter.emit (domain.js:483:12)
at MessageCreateAction.handle (/home/runner/Utki-the-bot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/runner/Utki-the-bot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/runner/Utki-the-bot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
at WebSocketShard.onPacket (/home/runner/Utki-the-bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
at WebSocketShard.onMessage (/home/runner/Utki-the-bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10) {
[Symbol(code)]: 'INVALID_TYPE'
}
我无法解决这个错误。你能帮我解决这个错误吗?提前谢谢你。
这是一个非常简单的错误和修复。错误声明提供的角色对方法Member.Roles.Add(muteRole);
无效。因此,这告诉我们muterole
不是一个有效的角色对象,当查看您的代码时,我们发现这是真的。
在代码的开头,您有以下内容:
const muteRoleId = message.guild.roles.cache.get('762199219074367508')
let muteRole;
定义两个变量,设置muteroleid
的值,但不设置muterole
的值。则在不更改这些值的情况下,您拥有member.roles.add(muteRole);
,但muteRole
将解析为undefined
,因为它从未设置过。
要解决这个问题,只需将member.roles.add(muteRole);
更改为member.roles.add(muteRoleId);
,所有这些都将按预期工作。