首页 > 解决方案 > 添加角色命令不起作用(discord.js)

问题描述

我正在为我的服务器编写我自己的不和谐机器人,我有一个问题,即机器人说没有角色不会退出,即使我提到了这个角色。这是代码:

const Discord = require('discord.js')
const client = new Discord.Client()

client.on("message", message => {
    const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase()

if (command === "add") {
        if (!message.member.hasPermission("MANAGE_ROLES"))
            return message.channel.send("Insufficient permissions")
        const member = message.mentions.members.first()
        if (!member)
            return message.channel.send("No user mentioned")
        const add = args.slice(1).join(" ")
        if (!add)
            return message.channel.send("No role said")
        const roleAdd = message.guild.roles.find(role => role.name === add);
        if (!roleAdd)
            return message.channel.send("Role does not exist")
            if (member.roles.has(roleAdd.id)){
            return message.channel.send("User already has role")
            }
        if (member) {
            member.addRole(roleAdd).catch((error) =>{
                message.channel.send("I cant add...")
            }).then((member) => {
                message.channel.send(`:thumbsup: ${roleAdd} added to ${member.displayName}`)
            })

        }
    }

})

client.login(config.token)

我犯了什么错误?谢谢。

标签: javascriptdiscord.jsbots

解决方案


首先确保您使用的是 discord.js v12。输入npm i discord.js@latest您的终端。在这里你可以看到 discord.js v12 的所有变化。

如果您现在使用 discord.js v12,则此代码应该适合您:

if (!message.member.hasPermission("MANAGE_ROLES"))
   return message.channel.send("Insufficient permissions")
const member = message.mentions.members.first()
if (!member)
   return message.channel.send("No user mentioned")
const add = args.slice(1).join(" ");
if (!add)
   return message.channel.send("No role said")
const roleAdd = message.guild.roles.cache.find(role => role.name === add);
if (!roleAdd)
   return message.channel.send("Role does not exist")
if (member.roles.cache.has(roleAdd.id)) {
   return message.channel.send("User already has role")
}
if (member) {
  member.roles.add(roleAdd).catch((error) => {
     message.channel.send("I cant add...")
   }).then((member) => {
       message.channel.send(`:thumbsup: ${roleAdd} added to ${member.displayName}`)
   })
}

提及您要添加的角色不起作用,因为这里

const roleAdd = message.guild.roles.cache.find(role => role.name === add);

您只需通过角色名称即可找到该角色。要解决此问题,您可以将该行更改为:

const roleAdd = message.guild.roles.cache.find(role => role.name === add) || message.mentions.roles.first();

这也将允许用户提及角色。


推荐阅读