【问题标题】:discord.js v12 Mute commanddiscord.js v12 静音命令
【发布时间】:2021-04-19 19:48:44
【问题描述】:

我在 discord.js v12 中做了一个静音命令。每当我运行命令时,我都会收到错误消息。我对编码有点陌生,所以我无法理解运行命令时出现错误的原因。这是我的代码:

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'
}

我无法解决错误。你能帮我解决这个错误吗?提前致谢。

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    这是一个非常简单的错误并修复。该错误表明提供的角色对于方法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);,它应该会按预期工作。

    【讨论】:

      【解决方案2】:

      TypeError [INVALID_TYPE]:提供的角色不是角色、雪花或数组或角色或雪花的集合。把它改成这个 let MutedRole = message.guild.roles.cache.find(role => role.name === 'Muted');

      【讨论】:

        猜你喜欢
        • 2021-01-01
        • 2021-02-18
        • 1970-01-01
        • 2021-01-18
        • 2021-04-14
        • 2021-04-19
        • 2021-04-18
        • 2021-04-23
        • 2021-01-30
        相关资源
        最近更新 更多