Найти в Дзене
Не ITшники DJS

Создание и выдача кастомных ролей на Дискорд сервере

Внимание: Чтобы весь код публикаций умещался в рамках одного файла на одну публикацию используется хандлер из видео: YouTube
Yo, на Не ITшниках я недавно обновил код механизма создания Кастомных ролей для подписчиков Boosty и бустеров сервера. Как в моем понимании функция должна выглядеть: Конечно всё это пишем на базе бота Ида с его хендлингом. На актуальной Discord.js@13.8.0 с кнопками и модальными окнами. Для отслеживания выхода пользователей из гильдий, а также снятия ими бустов - нам понадобится подключить интент GUILD_MEMBERS. Задаем описание Slash-команды как обычно: название, описание, категория - Fun, бот должен уметь создавать роли в гильдии и отсылать сообщения. В слушателе Slash-команды получаем кол-во бустов сервера и имеет ли пользователь роль премиум подписчика (premiumSubscriberRole). Если нет - выдаем ошибку. Иначе - печатаем Embed с кнопками. Получение кода Embed`a из метода, а также запись идентификатора отосланного сообщения в базу данных - добавляем для того, что

Внимание: Чтобы весь код публикаций умещался в рамках одного файла на одну публикацию используется хандлер из видео: YouTube

Yo, на Не ITшниках я недавно обновил код механизма создания Кастомных ролей для подписчиков Boosty и бустеров сервера.

Как в моем понимании функция должна выглядеть:

  • В одной гильдии может быть до 250 ролей, а это значит функция не должна быть доступна всем пользователям. Так что включим отсев по Nitro Booster'ам.
  • По команде человек должен получать доступ к меню, откуда тот сможет создать/снять свою роль. А также сможет видоизменять её: установить цвет, иконку (если позволяет кол-во бустов), название и выделение в списке.
  • Кастомная роль удаляется после снятия буста пользователем. А также после его выхода с сервера.

Конечно всё это пишем на базе бота Ида с его хендлингом. На актуальной Discord.js@13.8.0 с кнопками и модальными окнами.

Для отслеживания выхода пользователей из гильдий, а также снятия ими бустов - нам понадобится подключить интент GUILD_MEMBERS.

Задаем описание Slash-команды как обычно: название, описание, категория - Fun, бот должен уметь создавать роли в гильдии и отсылать сообщения.

Класс Slash-команды используемой в хандлере
Класс Slash-команды используемой в хандлере

В слушателе Slash-команды получаем кол-во бустов сервера и имеет ли пользователь роль премиум подписчика (premiumSubscriberRole). Если нет - выдаем ошибку. Иначе - печатаем Embed с кнопками. Получение кода Embed`a из метода, а также запись идентификатора отосланного сообщения в базу данных - добавляем для того, чтобы мы могли обновлять Embed’ы по нажатию кнопок.

-2

В getMenu ничего необычного. Подымаем данные из БД и заполняем меню данными и кнопками.

-3

Начать стоит с отлавливания нажатий по кнопкам. Если ты не знаешь или забыл я напомню, чтобы на код каждой команды достаточно было использовать 1 файл - хендлинг был написан так, что для отлавливания кнопок, селект-менюшек и модалок в методе componentsListener() необходимо в массиве componentsNames указать customId всех относящихся к команде взаимодействий. А также отсылать False, если ни под одно из заявленных условий кнопка не попадает.

-4

Итак в слушателе кнопок: проверяем наличие роли бустера у пользователя. Если их нет - оповещаем об ошибке мол: забусти сервер и получишь доступ.

-5

В коде кнопки для создания Роли мы должны проверить существует ли она уже на сервере и если надо удалить уже созданную. После чего вызываем метод создания. Обновляем меню.

-6

По кнопке удаления - вызываем метод удаления Роли. Да, на сами все эти методы глянем чуть позже сейчас нам главное уловить логику:
Метод создания Роли нам может не понадобится, а вот функцию удаления мы сможем вызывать извне, даже из слушателей событий.

На кнопку “названия” создаем модальное окно с текстовым полем от 2х до 20 символов. Для установки иконки готовим Текстовое поля для вставки ссылки. Для установки цвета поле для HEX значения. В hoist ожидаем ответ “да” или “нет”. Также можно объединить все эти поля вместе для установки общих опций.

-7

В слушателе каждой из этих модалок обновляем данные БД и вызываем отдельный метод на обновление каждой из опций роли.

В них проверяем наличие нужной роли на сервере. Если не найдено удаляем из БД идентификатор, иначе обновляем данные методами setName, setHoist, setColor. Единственное, я бы остановился на setIcon так как он несколько отличается от остальных ибо в метод необходимо поместить либо эмодзи с данной гильдии, либо буффер. А мы получили здесь от пользователя ссылку.

-8

Для начала чекаем кол-во бустов на сервере и указана ли ссылка на изображение, является ли она валидной, оканчивается ли она на .jpg|.gif|.png? И если да, создаем канвас-полотно, выводим иконку, canvas.toBuffer - и уже его помещаем в метод setIcon.

-9

В методе удаления Роли - пытаемся найти её на сервере. Удаляем, очищаем БД.

В методе создания - имя, цвет и hoist можно задать с помощью параметров, но иконку нужно будет установить отдельно - потому вызываем соответствующий метод.

Осталось только удалить их с сервера в ивентах выхода пользователя из гильдии или при потери роли premiumSubscriberRole. В обоих слушателях имея id пользователя и сервера проверяем БД. Если существует запись с идентификатором - удаляем.

-10

Чтож, а на этом на сегодня всё. Исходники как обычно неделю полежат на Boosty. До 29.06. Спасибо за внимание, удачи и пока!

-11

❤️ Поддержка канала: https://boosty.to/iamnotacoder
Наш Discord сервер:
https://discord.gg/YeqrTtpmaH
Телеграм:
https://t.me/iamnotacoderdjs
Вконтакте:
https://vk.com/iamnotacoderdjs