Discord.js mod bot ban 命令不起作用

Posted

技术标签:

【中文标题】Discord.js mod bot ban 命令不起作用【英文标题】:Discord.js mod bot ban command not working 【发布时间】:2021-11-19 01:24:31 【问题描述】:

我的不和谐机器人的禁令命令不起作用,目前给我这个错误。我的角色 ID 是 853527575317708820 我不知道我做错了什么,所以请帮助我

命令如下:

Server is ready.
TigerShark Community#3557 Has logged in
(node:204) UnhandledPromiseRejectiontarning: DiscordAPTError: T
AEE RS
user_id: Value "<@!856413967595012127>" is not snowflake.
at RequestHandler.execute (/home/Tunner/TSC/node_modules/di
scoxd. js/src/rest/RequestHandler. js:154:13)
at processTicksAndRejections (internal/process/task
§5:97:5) :!
at async RequestHandler.push (/home/zunner/TSC/node
/discord. js/s1c/rest/RequestHandler. js:39:14)

这是我的代码:


module.exports = 
  name: 'ban',
  description: "Used to ban members from a server",
  async execute(client, message, args, Discord) 

    if (!(message.member.roles.cache.some(r => r.id === "853527575317708820"))) return

      let reason;
      const user = await client.users.fetch(args[0])
      if (!args[1])
      
        reason = "Not specified"
       else 
        reason = args[1]
      

      const embed = new Discord.MessageEmbed()
      .setTitle(`$user.username was banned!`)
      .setDescription(`$user.username was banned by $message.author.username for: $reason`)
      .setColor("#f0db4f")
      .setFooter("Ban Command")
      .setTimestamp()

      message.channel.send(embed)
      message.guild.members.ban(user)
  

【问题讨论】:

【参考方案1】:

您的命令几乎没有问题。

第一个是如果提到用户,它不允许使用命令禁止用户,它只允许通过用户 ID 禁止。要解决这个问题,只需:

const user = message.mentions.members.first() || await client.users.fetch(args[0])

您还应该添加检查是否找到用户,因此在您声明 user 的值之后

const user = message.mentions.members.first() || await client.users.fetch(args[0])
if(!user) return message.reply(`No user found`);

现在,如果您允许同时禁止提及和用户 ID,则可能会有不同的 user 值。因此,我建议您也将嵌入内容编辑为:

const embed = new Discord.MessageEmbed()
      .setTitle(`$user.user.username was banned!`)
      .setDescription(`$user.user.username was banned by $message.author.username for: $reason`)
      .setColor("#f0db4f")
      .setFooter("Ban Command")
      .setTimestamp()

这应该可以解决您的大部分问题,我建议如果将来出现 undefined 或者您在代码中遇到任何错误。通过向控制台console.log(variable)console.log("This works?") 发送消息来进行一些调试

【讨论】:

谢谢,兄弟@NotTrixxie 但是id有问题,不能用用户id禁止它的作品只提到【参考方案2】:

如果您使用的是 discord.js v12,您可以按照其他答案所说的去做,并通过提及 message.mentions.members.first() 来获取用户,但如果您使用的是 v13,那将不再有效

它给出该错误的原因是因为您需要仅通过他们的 id 获取用户,因此您可以执行此操作 client.users.fetch(args[0].replace('&lt;@!', '').replace('&gt;', '')) 以从中删除 &lt;@!&gt;(提及前缀)。

【讨论】:

您仍然可以在 v13 上使用message.mentions.members.first() @NotTrixxie 啊,是的,你的权利还是从 args 获取 id 更好

以上是关于Discord.js mod bot ban 命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 更改前缀命令出错 (discord.js)

Discord.js Bot 赠品命令:.array() 不是函数

Discord Bot 关于命令

Discord.js 从带有前缀的句子中过滤命令(比如 Hey Bot 给我一块蛋糕)

Discord.JS V12 BOT垃圾邮件文本[关闭]

在 Discord.js 和 MySQL 中注册命令