我有一个 discord.js bot
,只能由具有特定角色的人使用。我有实际服务器和测试服务器,我想知道是否可以允许 两个 角色执行命令。
我目前正在代码中手动更改角色,这对用户不是特别友好。
代码如下:
const { role1, role2 } = require('./config.json');
const role = role1
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
if (message.member.roles.cache.has(role)) {
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
if (!client.commands.has(commandName)) return;
try {
client.commands.get(commandName).execute(message, args);
} catch (error) {
console.error(error);
message.reply(`There was an error`);
}
} else {
message.reply('You don't have access to this command!')
}
})
我尝试使用逻辑 OR (||
) 但似乎不起作用,因为它只允许编写的第一个角色执行命令。
答案 0 :(得分:0)
我在 message event
中是这样解决的:
// This is for demonstration because I'm defining 'requiredRoles' in every command file
let roleCount = 0;
let missingRole = '';
// Ensure the user has the required roles
for (const requiredRole of requiredRoles) {
const role = guild.roles.cache.find(
r => r.name === requiredRole,
);
if (role && member.roles.cache.has(role.id)) {
roleCount++;
}
else {
missingRole = requiredRole;
}
}
if(roleCount === 0 && requiredRoles.length > 0) {
return message.reply(
`You are missing the "${requiredRole}" role to use this command!`,
);
}
说明:
开始一个循环,它贯穿所有 roles
。如果 user
属于 role
,则 roleCount
加 1。如果它不属于当前运行的 role
,此 role
已写入 missingRole
。
当循环结束时,它会检查用户是否至少具有所需的 roles
之一。如果不是,则返回错误 message
。
答案 1 :(得分:0)
允许用户执行命令,如果他有 Role1
OR Role2
message.member.roles.cache.has(role)
可以像这样替换为 message.member.roles.cache.some(r=>[Role1, Role2].includes(r.id))
(假设 Role1
和Role2
是 ID,而不是角色的名称)。
const { role1, role2 } = require('./config.json');
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
if (message.member.roles.cache.some(r=>[role1, role2].includes(r.id))) {
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
if (!client.commands.has(commandName)) return;
try {
client.commands.get(commandName).execute(message, args);
} catch (error) {
console.error(error);
message.reply(`There was an error`);
}
} else {
message.reply('You don't have access to this command!')
}
})