То, как я делаю такие вещи в моем боте (фрагмент из команды удара моего примера бота):
// This command should be limited to staff. In this example we just hardcode the role names.
// Please read up on Array.some() to understand this bit:
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
if(!message.member.roles.some(r=>["STAFF","Helper"].includes(r.name))) {
return message.reply("Sorry, you don't have permissions to use this!");
}
Немного документации по этому вопросу:
https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=member
https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=roles
message.member.roles
содержит коллекцию ролей участников
мы можем использовать .some()
, чтобы просмотреть их и посмотреть, есть ли у пользователя роль
.some()
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
Итак, пройдитесь по всем членам гильдии, чтобы узнать, есть ли у них helper
тогда, если у них также есть on duty
:
// assuming the Message is in a variable called message
var gm=Array.from(message.guild.members);
for(var member in gm) {
if(gm[member].roles.some(r=>["Helper"].includes(r.name))) {
if(gm[member].roles.some(r=>["on duty"].includes(r.name))) {
gm[member].send(`Help command ran:\nUser: ${message.author.tag}\nContent: ${message.content.replace("+help ","")}`);
}
}
}
если пользователь запускает команду +help <what they need help with>
, он отправляет кому-то в гильдии роли с helper
и on duty
:
(используя мой тег Discord для примера)
Что было запущено: +help I need some help with something
"Команда справки выполнила:
Пользователь: Donovan_DMC # 1337
Содержание: мне нужна помощь с чем-то
(без кавычек)
что касается этого
Мне нужно выяснить, как определить роль и добавить их в набор «дежурных».
Полагаю, вы имеете в виду, что когда кто-то с ролью helper
запускает команду +onduty
, он получает роль on duty
.
var roleid=message.guild.roles.find("name","on duty").id;
if(message.member.roles.some(r=>["Helper"].includes(r.name))) {
message.member.addRole(roleid);
}
Несколько ссылок на документацию, которые, надеюсь, помогут вам понять это
message
: https://discord.js.org/#/docs/main/stable/class/Message
message.guild
: https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=guild
message.guild.roles
: https://discord.js.org/#/docs/main/stable/class/Guild?scrollTo=roles
и для удаления роли это почти точно то же самое
var roleid=message.guild.roles.find("name","on duty").id;
if(message.member.roles.some(r=>["Helper"].includes(r.name))) {
message.member.removeRole(roleid);
}
Таким образом, базовый бот для этого может иметь что-то вроде this .
^ Я добавил несколько дополнительных проверок для того, чтобы уже иметь роль, не иметь ее, и сделал ее там, где можно изменить префикс
Я проверил это, и он работал чудесно.