javascript - 添加角色命令不起作用(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)
我犯了什么错误?谢谢。
解决方案
首先确保您使用的是 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();
这也将允许用户提及角色。
推荐阅读
- vue.js - Vue 的 $emit 是异步操作吗?
- php - 如何在不使其 2 页的情况下向此脚本添加加载 gif
- python - 如何在运行 TensorFlow 时读取此 GPU 使用情况?
- excel - Excel VBA TextToColumns向上推送文本并覆盖标题
- assembly - JIT反汇编中的冗余存储
- c# - 有没有办法从 api 响应中获取第一个和第二个对象并在 ASP.Net 核心 MVC 中比较它们?
- ibm-cloud - Watson IoT Platform 卡在连接到 Cloudant 的“绑定”状态
- machine-learning - 使用 Flux.jl 更新函数的参数
- node.js - 为什么我的模型上的猫鼬验证方法不能与 Joi 一起使用?
- ansible - 为什么即使条件正确,Ansible 也会跳过任务?