踢和禁止命令不再适用于我,即使我没有改变它

Posted

技术标签:

【中文标题】踢和禁止命令不再适用于我,即使我没有改变它【英文标题】:Kick and ban command isnt working for me anymore, even though I havent changed it 【发布时间】:2019-10-22 14:37:03 【问题描述】:

我在一两天前成功地进行了踢球和禁令,今天我再次对其进行测试,但它突然无法正常工作,我不知道为什么。除了设置的颜色,我不相信我在命令中更改了任何内容。

现在kick @user 在发送后也不会删除。但是,嵌入发送告诉我该人已被踢。我正在使用 discord.js 和 Visual Studio 代码。我也是编码和制作机器人的新手。

我尝试更改 message.guild.member(kUser).kick(kReason) 并更改事情的顺序。

// A command to ban certain people aand will then send me a dm
    case 'ban':
            if(message.member.roles.find("name", "Owner"))

                let bUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
                if (!bUser) return message.channel.send("Who is being banned?");
                let bReason = args.join("Banned  ").slice(3);
              message.delete();
                let banEmbed = new Discord.RichEmbed()
                  .setDescription("Ban Management")
                  .setColor(0xf44242)
                  .addField("Banned User", `$bUser.user.tag with ID $bUser.id`)
                  .addField("Banned By", `<@$message.author.id> with ID $message.author.id`)
                  .addField("Banned In", message.channel.name)
                  .addField("Time", message.createdAt)
                  .addField("Reason", bReason);


                // sends me a dm
                  bot.users.get("485655477812723712").send(banEmbed);  // 485655477812723712 is second sofiras id
                  message.guild.member(bUser).ban(bReason)           

                else
                    message.channel.sendMessage('You have not been granted this ability');
                


              break;

    // command to kick certain people and then send me a dm 
    case 'kick':
            if(message.member.roles.find("name", "Owner"))
                let kUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
                if (!kUser) return message.channel.send("Who is being kicked?");
                let kReason = args.join("Kicked ").slice(4);

                let kickEmbed = new Discord.RichEmbed()
                  .setDescription("Ban Management")
                  .setColor(0xf44242)
                  .addField("Kicked User", `$kUser.user.tag with ID $kUser.id`)
                  .addField("kicked By", `<@$message.author.id> with ID $message.author.id`)
                  .addField("Kicked In", message.channel.name)
                  .addField("Time", message.createdAt)
                  .addField("Reason", kReason);

                  // sends me a dm
                  bot.users.get("485655477812723712").send(kickEmbed); // 485655477812723712 is second sofiras id
                  message.guild.member(kUser).kick(kReason)

                else
                    message.channel.sendMessage('You have not been granted this ability')

            

              break;

我希望当我发送该人将被踢或禁止的命令时,删除该命令/消息,然后将我发送到嵌入,然而,它只是发送嵌入。不会删除命令/消息,也不会踢或禁止该成员。

【问题讨论】:

是否抛出任何错误? 【参考方案1】:

我没有看到您在代码中的任何位置删除命令消息。message.delete()

当您禁止或踢出成员时,您没有正确使用options 参数。bUser.ban( reason: bReason ) / kUser.kick( reason: kReason )

我在下面的代码中进行了一些其他改进,例如捕获被拒绝的承诺、删除冗余代码、在禁止之前执行更多检查、将函数传递给 Collection.find(),以及删除已弃用的 Channel.sendMessage()称呼。我只对其中一个命令执行了此操作,因为您可以在这两个命令中实现这些改进。

// Async context needed in order to use the keyword 'await'

case 'ban':
  try 
    if (!message.member.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');

    const banning = message.mentions.members.first() || message.guild.members.get(args[0]);

    if (!banning) return await message.channel.send(':x: No user provided.');
    if (banning.id === bot.user.id) return await message.channel.send(':x: Think you\'re smart?');
    if (!banning.bannable || banning.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');

    const reason = args.slice(1).join(' ') || '*None*'; // Assuming args[1] is the reason

    await message.delete();

    var embed = new Discord.RichEmbed()
      .setColor(0xf44242)
      .setTitle('**Ban Management**')
      .setDescription('A user has been banned.')
      .addField('User', `$banning.user ($banning.user.tag)`)
      .addField('Moderator', `$message.author ($message.author.tag)`)
      .addField('Location', `$message.channel ($message.channel.name)`)
      .addField('Reason', `$reason`)
      .setTimestamp();

    const me = bot.users.get('485655477812723712');
    await me.send(embed);

    await banning.ban( reason: reason );
   catch(err) 
    console.error(err);
  

【讨论】:

无论我做什么,我都无法让它工作,尽管我确实知道发生了什么变化。不是为什么代码不起作用。我忘记了我已经更换了我所在的服务器,所以当我回到旧的服务器时,它运行良好,尽管发生的问题很少。所以我现在真的很困惑。但是哦,好吧。我不知道为什么只有 kick and ban 命令在新服务器中不起作用,或者为什么我“如果(msg.author.bot)返回;”开始显示“TypeError:无法读取未定义的 discord.js 的属性 'bot'”。 听起来msg 不是消息。检查您的消息事件参数。 这是代码,它没有给我带来问题。 bot.on("guildMemberAdd", member => let msg = "message" if (msg.author.bot) return; bot.users.get("485655477812723712").send(member + "已加入你的服务器!" ) .catch(console.error); ) guildMemberAdd 事件中没有 message。由于您将变量 msg 声明为字符串,因此没有 author 属性。您可以使用member.user.bot 而不是msg.author.bot 哦,对了。错误的一个:p 我只是不想在有人离开时被发送 2 dms。就好像有人被踢或禁止我收到一个 dm,然后当有人离开时我收到一个 dm。所以我会得到两个。我只是想避免这一切,我猜。 // sends me a dm that someone left bot.on("guildMemberRemove", member =&gt; if (member.user.bot) return; bot.users.get("485655477812723712").send(member + 'has left the server') )

以上是关于踢和禁止命令不再适用于我,即使我没有改变它的主要内容,如果未能解决你的问题,请参考以下文章

如何添加“原因”来禁止命令

Discord Oauth 获取权限

世界首创,使用一条命令行禁止macOS系统的root帐户,适用于多用户远程和自己学习

如何禁止临时工

禁止从/ dev / tty读取

关于ping网络:即使服务器禁止了响应ping,至少会有域名所绑定的IP返回的