【问题标题】:Discord.js Mute command only sends embed for incorrect commandDiscord.js 静音命令仅发送不正确命令的嵌入
【发布时间】:2021-07-10 11:35:27
【问题描述】:

所以我为我的不和谐机器人创建了一个静音命令,它会查找是否存在“静音”角色,如果不存在,那么机器人会创建一个“静音”角色,然后将该角色提供给提到的成员,目前当我运行命令它只会给我它应该在命令编写不正确时发送的嵌入。

const BaseCommand = require('../../utils/structures/BaseCommand');
const Discord = require('discord.js');

module.exports = class MuteCommand extends BaseCommand {
  constructor() {
    super('mute', 'moderation', []);
  }

  async run(client, message, args) {
    if(!message.member.hasPermission("MUTE_MEMBERS")) return message.channel.send("You do not have Permission to use this command.");
    if(!message.guild.me.hasPermission("MUTE_MEMBERS")) return message.channel.send("I do not have Permissions to mute members.");
    const Embedhelp = new Discord.MessageEmbed()
    .setTitle('Mute Command')
    .setColor('#6DCE75')
    .setDescription('Use this command to Mute a member so that they cannot chat in text channels nor speak in voice channels')
    .addFields(
      { name: '**Usage:**', value: '=mute (user) (time) (reason)'},
      { name: '**Example:**', value: '=mute @Michael stfu'},
      { name: '**Info**', value: 'You cannot mute yourself.\nYou cannot mute me.\nYou cannot mute members with a role higher than yours\nYou cannot mute members that have already been muted'}
   )
    .setFooter(client.user.tag, client.user.displayAvatarURL());

    let role = 'Muted'
    let muterole = message.guild.roles.cache.find(x => x.name === role);
    if (typeof muterole === undefined) {
      message.guild.roles.create({
        data: {
          name: 'muted',
          color: '#ff0000',
          permissions: {
              SEND_MESSAGES: false,
              ADD_REACTIONS: false,
              SPEAK: false
          }
        },
        reason: 'to mute people',
      })
      .catch(err => console.log(err).then(message.channel.send('Mute Role could not be created')))
    } 

    const mentionedMember = message.mentions.members.first() || await message.guild.members.fetch(args[0]);
    let reason = args.slice(1).join(" ");
    const banEmbed = new Discord.MessageEmbed()
     .setTitle('You have been Muted in '+message.guild.name)
     .setDescription('Reason for Mute: '+reason)
     .setColor('#6DCE75')
     .setTimestamp()
     .setFooter(client.user.tag, client.user.displayAvatarURL());

   if (!reason) reason = 'No reason provided';
   if (!args[0]) return message.channel.send(Embedhelp);
   if (!mentionedMember) return message.channel.send(Embedhelp);
   if (!mentionedMember.bannable) return message.channel.send(Embedhelp);
   if (mentionedMember.user.id == message.author.id) return message.channel.send(Embedhelp);
   if (muterole = undefined) return message.channel.send(Embedhelp);
   if (mentionedMember.user.id == client.user.id) return message.channel.send(Embedhelp);
   if (mentionedMember.roles.cache.has(muterole)) return message.channel.send(Embedhelp);
   if (message.member.roles.highest.position <= mentionedMember.roles.highest.position) return message.channel.send(Embedhelp);

   await mentionedMember.send(banEmbed).catch(err => console.log(err));
   await mentionedMember.roles.add(muterole).catch(err => console.log(err).then(message.channel.send('There was an error while muting the member')))

  } 
}

我仍然无法找出问题所在以及为什么会这样,我非常想知道我的代码中的错误以及是否还有其他我不知道的错误。

【问题讨论】:

  • 您在测试命令时处于什么状态?您是在测试缺少的角色部分还是什么?
  • @Bobosky 是的,我正在测试角色不存在的部分,而不是创建角色并将其提供给用户,它只是发送帮助嵌入'
  • 移至答案部分。

标签: javascript discord discord.js bots


【解决方案1】:

我们可以看到你的代码:


    let role = 'Muted'
    let muterole = message.guild.roles.cache.find(x => x.name === role);
    if (typeof muterole === undefined) {
      message.guild.roles.create({
        data: {
          name: 'muted',
          color: '#ff0000',
          permissions: {
              SEND_MESSAGES: false,
              ADD_REACTIONS: false,
              SPEAK: false
          }
        },
        reason: 'to mute people',
      })
      .catch(err => console.log(err).then(message.channel.send('Mute Role could not be created')))
    } 

if (muterole = undefined) return message.channel.send(Embedhelp);

这将在未定义 muterole 时停止运行。 由于 muterole 无法创建,它会在运行到 if muterole 行时停止运行。 为了解决这个问题,在 discord.js 中创建角色时,仅当您要为角色添加权限时才需要权限标志。您不必将 false/deny 指定为您不想要角色中的特定权限,因为如果您不将它们标记出来,它会将所有权限标记为 false。 因此,我们可以只用括号替换权限:

if (muterole === undefined) {
    message.guild.roles.create({
        data: {
            name: 'muted',
            color: '#ff0000',
            permissions: []
        },
        reason: 'to mute people',
    })
        .catch(err => console.log(err).then(message.channel.send('Mute Role could not be created')))
}

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2021-11-07
    • 2019-07-28
    • 2021-03-02
    • 2021-04-19
    • 2019-08-21
    相关资源
    最近更新 更多