我在向用户添加自定义角色时遇到问题。该命令应如下所示:${prefix}addrole @user <role name>
。用户应收到一个自定义角色,而漫游器应发送一条确认消息。这是我的代码:
client.on('message', (message) => {
if (message.content.startsWith(`${prefix}addrole`)) {
module.exports.run = async (bot, message, args) => {
if (!message.member.hasPermissions('MANAGE_MEMBERS'))
return message.reply("You don't have acces!");
const rMember =
message.guild.member(message.mentions.user.first()) ||
message.guild.members.get(args[0]);
if (!rMember) return message.reply("I couldn't find that user!");
const role = args.join(' ').slice(22);
if (!role) return message.reply('Please type a role!');
const gRole = message.guild.roles.find(`name`, role);
if (!gRole) return message.reply("I couldn't find that role!");
if (nMember.roles.has(gRole.id));
await nMember.addRole(gRole.id);
try {
nMember.send(`You received ${gRole.name}`);
} catch (e) {
message.channel.send(
`The user <@${rMember.id}>, received the role ${gRole.name}. We tried to dm him but he disabled them.`
);
}
};
module.exports.help = {
name: 'addrole',
};
}
});
答案 0 :(得分:1)
我发现的第一个问题来自以下两行:
if(nMember.roles.has(gRole.id));
await(nMember.addRole(gRole.id));
await
不是函数,因此不需要括号。如果确实加上括号,则会出现错误。相反,只需使用:
await nMember.addRole(gRole.id)
GuildMember.roles.has
已过时。 discord.js
v12 +使用Managers
,因此您必须添加cache属性。写:
if (nMember.roles.cache.has(gRole.id))
这也适用于代码中的上一行:
let gRole=message.guild.roles.find(`name`, role);
替换为
let gRole = message.guild.roles.cache.find(r => r.name = role)
在我引用的第二行代码中,也出现了这个问题:
await nMember.addRole(gRole.id)
addRole()
也已弃用,请使用:
await nMember.roles.cache.add(gRole.id)
MANAGE_MEMBERS
不再是权限标志。而是使用MANAGE_ROLES
。
总的来说,代码可能会被清除,但是我认为那是我发现的所有错误。