discord.js - имеет роль дать разрешение - PullRequest
0 голосов
/ 01 мая 2018

Так что, в основном, я пытаюсь создать билет типа диска разногласия, используя discord.js.

Концепция: кто-то говорит: «Помогите, затем помогите члену DM», который сказал «дежурный» и играет роль «Помощника».

Мне нужно выяснить, как определить роль и добавить их в набор «дежурных».

Мне было интересно, может ли кто-нибудь помочь мне с этим.

Большое спасибо.

1 Ответ

0 голосов
/ 01 мая 2018

То, как я делаю такие вещи в моем боте (фрагмент из команды удара моего примера бота):

// 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 .
^ Я добавил несколько дополнительных проверок для того, чтобы уже иметь роль, не иметь ее, и сделал ее там, где можно изменить префикс

Я проверил это, и он работал чудесно.

...