Как выдать роль по id discord py

Discord – это одна из самых популярных платформ для общения и создания сообществ онлайн. Для того чтобы ваш сервер был более удобным в использовании и имел больше возможностей для пользователей, приложение telegram bot вам нужно самостоятельно написать какую-то функциональность. В сегодняшней статье мы рассмотрим настроенную выдачу ролей за реакции при помощи discord.py.

Что такое Discord.py

Discord.py является библиотекой для Python, которая позволяет создавать ботов для Discord. Она предоставляет удобный и простой в использовании интерфейс, который позволяет разрабатывать ботов для ваших серверов. Discord.py является мощным инструментом для создания ботов со множеством функций, включая настраиваемую выдачу ролей за реакции.

Что такое реакции в Discord?

Как работает настраиваемая выдача ролей за реакции

Как и было сказано ранее, настраиваемая выдача ролей за реакции позволяет вашим пользователям получать роли на сервере в зависимости от того, какую реакцию они отправляют на сообщение. Это очень удобно для организации конкурсов, розыгрышей или просто для того, чтобы сделать ваш сервер более интересным и удобным для пользователей.

ДИСКОРД БОТ #11 | КНОПКИ / РОЛИ ПО КНОПКЕ / BUTTONS | DISNAKE/DISCORDPY | DISCORD BOT PYTHON

Для настройки выдачи ролей за реакции мы будем использовать следующие шаги:

1. Создание ролей
2. Создание сообщения
3. Привязка реакций к ролям
4. Создание кода для бота

Шаг 1: Создание ролей

Первым шагом для настройки выдачи ролей за реакции является создание ролей, которые вы собираетесь выдавать вашим пользователям в зависимости от реакции. Для создания роли пройдите по пути: «Server settings» -> «Roles» -> «Create Role».

Выберите имя роли и установите необходимые права на эту роль. После создания роли необходимо скопировать ее ID для использования его в последующих шагах.

Шаг 2: Создание сообщения

Создайте сообщение со всеми деталями для вашего конкурса, розыгрыша или мероприятия, которое вы хотите провести на своем сервере. В этом сообщении вы можете включить текст, изображения или любые другие элементы.

После создания сообщения скопируйте его ID.

Шаг 3: Привязка реакций к ролям

Теперь необходимо привязать реакции к ролям. Для настройки выдачи ролей за реакции нам необходимо использовать метод add_reaction().

if payload.emoji.name == »:
role = guild.get_role(ROLE_ID)
await member.add_roles(role)

elif payload.emoji.name == »:
role = guild.get_role(ANOTHER_ROLE_ID)
await member.add_roles(role)

Здесь мы используем событие on_raw_reaction_add(), чтобы отслеживать, когда пользователь добавляет реакцию на сообщение. Если сообщение содержит корректный ID (MESSAGE_ID), то мы получаем объект гильдии (guild), а затем объект участника (member). Мы получаем объект гильдии и участника, чтобы убедиться в том, что наш бот может добавлять роли там, где ему нужно.

Еще по теме:  Id дискорд сервера как узнать

Затем мы проверяем, какую реакцию пользователь добавил к сообщению. Если реакция является «», мы добавляем роль c ID ROLE_ID, если реакция является «», мы добавляем другую роль c ID ANOTHER_ROLE_ID.

How to write a Discord Role Reaction Bot in Python w/ Discord.py

Шаг 4: Создание кода для бота

Последним шагом является написание кода, который позволит вашему боту работать с вашим сервером Discord. Настройте соединение с вашим сервером Discord:

from discord.ext import commands

Здесь мы использовали библиотеку discord.py, чтобы создать клиента бота по имени client. После того, как мы настроили соединение с нашим сервером, мы передаем ему токен, чтобы бот мог авторизоваться на сервере.

В итоге, мы можем получить полностью настроенную выдачу ролей за реакции. Как только это сделано, вы можете использовать это в своих серверах discord для облегчения управления ролями и для организации различных мероприятий, розыгрышей и конкурсов.

Настраиваемая выдача ролей за реакции является полезной функциональностью в Discord, которая позволяет пользователям получать доступ к уже настроенным или новым ролям, используя реакции на сообщениях. В этой статье мы прошли четыре шага, которые помогут вам настроить выдачу ролей за реакции при помощи discord.py.Такой бот, подключенный к серверу, сможет сделать ваш сервер более интересным и разнообразным для пространства, а так же украсит конкурсы или розыгрыши на вашем сервере Discord.

Похожие записи:

  1. discord.py выдача ролей по реакции
  2. Как работает настраиваемая среда Horizon?
  3. Discord API – Событие нажатия на кнопку реакции
  4. Как использовать Passport-Discord для аутентификации через Discord в Node.js?
  5. Использование Discord API для создания приложений на C#, работающих с мессенджером Discord

Источник: qaa-engineer.ru

Блог

Главная — Вопросы по программированию — Discord.py — Проверьте, есть ли у пользователя определенные роли?

Discord.py — Проверьте, есть ли у пользователя определенные роли?

  • Post author: admin
  • Запись опубликована: 13 января, 2022
  • Post category: Вопросы по программированию

#python #discord #discord.py

Вопрос:

Я пытаюсь создать команду, которая может запрещать людей на Сервере и тех, кто не находится на сервере. Но есть проблема: если я использую async def ban(ctx, member: discord.Member, *, reason): для использования атрибут «роли», то он не сможет запретить тех, кого нет на сервере. Если я использую async def ban(ctx, member: discord.User, *, reason): , я не смогу использовать атрибут «роли», потому что это не атрибут.

Зачем я это делаю? Я пытаюсь сделать так, чтобы модераторы сервера не могли запретить тем, у кого есть роли модераторов

async def ban(ctx, member: discord.User = None, *, reason=None): if get(ctx.author.roles, or get(ctx.author.roles, or get( ctx.author.roles, or ctx.author.guild_permissions.administrator: # Check if the author has the Role «Moderator», «Admin», etc. if get(member.roles, or get(member.roles, and not ctx.author.guild_permissions.administrator: # Check if the member has the Role «Moderator», «Admin», etc. await ctx.send(«You cannot ban this user.»)

Еще по теме:  Как настроить автовыдачу ролей на дискорд сервере

Ответ №1:

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

import typing [. ] async def ban(ctx, user: typing.Union[discord.Member, discord.User]):

Обратите внимание, что порядок имеет значение: discord.Member сначала он пытается применить этот конвертер , прежде чем пытаться discord.User , таким образом, отдавая приоритет преобразованию в участника, а не преобразованию в пользователя (что должно быть тем, что вы хотите).

Чтобы различить эти два случая, теперь вы можете проверить, соответствует ли user тип discord.Member , и выполнить проверку.

if type(user) is discord.Member: if YOUR_CHECKS: await ctx.send(‘You cannot ban this user’) return # Perform ban await ctx.send(‘Ban successful’)

При тестировании я обнаружил, что библиотека команд выдаст вам числовой идентификатор пользователя вместо реального пользователя и покажет
Failed fetching discord object! Passing ID instead. в качестве предупреждения. Если вам нужно больше, чем просто идентификатор пользователя, вы можете преобразовать его в пользовательский объект с помощью

if type(user) is int: user = await bot.fetch_user(user) if user is None: await ctx.send(‘User not found’) return

Обратите внимание, что fetch_user это вызов API, и вы, возможно, захотите избежать его. Смотрите документы для получения дополнительной информации.

Ответ №2:

Одним из способов сделать это было бы проверить, входит ли данный member игрок в текущую гильдию. Если это так True , вы можете создать новый member object с их идентификатором или другим предпочтительным методом, в противном случае вы можете предположить, что у них нет роли модератора. Для простоты я включил проверку только для одной роли, но вы можете настроить ее так, как хотите. Кроме этого, все остальное более подробно объясняется в приведенном ниже коде.

if member in ctx.guild.members: # checks if the provided member is in the current server member = ctx.guild.get_member(member.id) # Get the member object of the user if get(member.roles, # Check if this role is in the member’s roles await ctx.send(«This member has «) else: await ctx.send(«This member does not have «) return # returns, since member was in the server # This happens if the provided member is not in the current server await ctx.send(«This member, who is not in this server, does not have «)

Код выше работает так, как написано

Ответ №3:

Вы должны использовать это

Источник: programbox.ru

Добавить роль по ID discord.py

В течение 1-2 часов я упорно пытался заставить этот фрагмент кода работать. Мне нужно добавить роль пользователю, достаточно просто, не так ли?

Еще по теме:  Как сделать другого человека админом в дискорде

Этот код ищет роль, но не может ее найти, потому что я отправляю ее из канала, к которому эта роль не имеет доступа? Мне нужна помощь, пожалуйста.

Изменить 1: удалены цитаты вокруг идентификатора

2021-03-06T21:12:51.811235+00:00 app[worker.1]: Your bot is ready. 2021-03-06T21:14:09.010057+00:00 app[worker.1]: Ignoring exception in command addrole: 2021-03-06T21:14:09.012477+00:00 app[worker.1]: Traceback (most recent call last): 2021-03-06T21:14:09.012553+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 85, in wrapped 2021-03-06T21:14:09.012554+00:00 app[worker.1]: ret = await coro(*args, **kwargs) 2021-03-06T21:14:09.012592+00:00 app[worker.1]: File «bot.py», line 92, in addrole 2021-03-06T21:14:09.012593+00:00 app[worker.1]: await user.add_roles(user, role) 2021-03-06T21:14:09.012621+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/member.py», line 673, in add_roles 2021-03-06T21:14:09.012621+00:00 app[worker.1]: await req(guild_id, user_id, role.id, reason=reason) 2021-03-06T21:14:09.012651+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/http.py», line 243, in request 2021-03-06T21:14:09.012652+00:00 app[worker.1]: raise NotFound(r, data) 2021-03-06T21:14:09.012699+00:00 app[worker.1]: discord.errors.NotFound: 404 Not Found (error code: 10011): Unknown Role 2021-03-06T21:14:09.012735+00:00 app[worker.1]: 2021-03-06T21:14:09.012735+00:00 app[worker.1]: The above exception was the direct cause of the following exception: 2021-03-06T21:14:09.012736+00:00 app[worker.1]: 2021-03-06T21:14:09.012772+00:00 app[worker.1]: Traceback (most recent call last): 2021-03-06T21:14:09.012832+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/bot.py», line 935, in invoke 2021-03-06T21:14:09.012833+00:00 app[worker.1]: await ctx.command.invoke(ctx) 2021-03-06T21:14:09.012863+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 863, in invoke 2021-03-06T21:14:09.012863+00:00 app[worker.1]: await injected(*ctx.args, **ctx.kwargs) 2021-03-06T21:14:09.012890+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 94, in wrapped 2021-03-06T21:14:09.012891+00:00 app[worker.1]: raise CommandInvokeError(exc) from exc 2021-03-06T21:14:09.012932+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10011): Unknown Role

Изменить 2: удален пользователь из add_role

2021-03-06T22:22:45.062172+00:00 app[worker.1]: Your bot is ready. 2021-03-06T22:22:52.026199+00:00 app[worker.1]: Ignoring exception in command addrole: 2021-03-06T22:22:52.028082+00:00 app[worker.1]: Traceback (most recent call last): 2021-03-06T22:22:52.028089+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 85, in wrapped 2021-03-06T22:22:52.028089+00:00 app[worker.1]: ret = await coro(*args, **kwargs) 2021-03-06T22:22:52.028092+00:00 app[worker.1]: File «bot.py», line 94, in addrole 2021-03-06T22:22:52.028100+00:00 app[worker.1]: await user.add_roles(role) 2021-03-06T22:22:52.028104+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/member.py», line 673, in add_roles 2021-03-06T22:22:52.028108+00:00 app[worker.1]: await req(guild_id, user_id, role.id, reason=reason) 2021-03-06T22:22:52.028111+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/http.py», line 241, in request 2021-03-06T22:22:52.028111+00:00 app[worker.1]: raise Forbidden(r, data) 2021-03-06T22:22:52.028152+00:00 app[worker.1]: discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions 2021-03-06T22:22:52.028160+00:00 app[worker.1]: 2021-03-06T22:22:52.028161+00:00 app[worker.1]: The above exception was the direct cause of the following exception: 2021-03-06T22:22:52.028161+00:00 app[worker.1]: 2021-03-06T22:22:52.028164+00:00 app[worker.1]: Traceback (most recent call last): 2021-03-06T22:22:52.028223+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/bot.py», line 935, in invoke 2021-03-06T22:22:52.028224+00:00 app[worker.1]: await ctx.command.invoke(ctx) 2021-03-06T22:22:52.028225+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 863, in invoke 2021-03-06T22:22:52.028225+00:00 app[worker.1]: await injected(*ctx.args, **ctx.kwargs) 2021-03-06T22:22:52.028225+00:00 app[worker.1]: File «/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py», line 94, in wrapped 2021-03-06T22:22:52.028226+00:00 app[worker.1]: raise CommandInvokeError(exc) from exc 2021-03-06T22:22:52.028228+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

Надеюсь, теперь это сработает 🙂

Источник: www.javaer101.com

Рейтинг
( Пока оценок нет )
Загрузка ...