← Все вопросы
Как сделать реакц-роли в Discord — роль по нажатию на реакцию?
7
Хочу как у многих серверов: бот пишет сообщение, ты жмёшь эмодзи под ним и получаешь роль. Слышал это называется реакц-роли. Через какое событие это ловить в discord.py?
1 ответ
11
✓ Принятый ответ — помог автору
Ловишь событие on_raw_reaction_add (raw — потому что работает даже для старых сообщений, не загруженных в кэш). По ID сообщения и эмодзи выдаёшь роль:
ROLE_MESSAGE_ID = 123456789012345678 # ID сообщения с реакциями
@bot.event
async def on_raw_reaction_add(payload):
if payload.message_id != ROLE_MESSAGE_ID:
return
guild = bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)
if member.bot:
return
if str(payload.emoji) == '✅':
role = discord.utils.get(guild.roles, name='Участник')
await member.add_roles(role)
Нужны интенты members и reactions (последний входит в default). На снятие роли по убранной реакции есть зеркальное on_raw_reaction_remove. Сейчас, кстати, многие делают то же самое через кнопки (discord.ui) — надёжнее и красивее.
Ваш ответ
, чтобы ответить на вопрос.