← Все вопросы

Как сделать реакц-роли в Discord — роль по нажатию на реакцию?

Задан 12 месяцев назад1.5к просмотров1 ответ
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) — надёжнее и красивее.

Ваш ответ

, чтобы ответить на вопрос.