@akquenti

Как сделать бан по ID в декораторе @bot.event?

Хочу сделать бан после получения 5 реакции, сделал сообщения, бот добавляет реакции, когда набирает кол-во реакции должен банить пользователя который был указан в команде. Для счёта я использовал @bot.event и теперь надо как-то забанить его, но я не знаю как. Вот код:
@bot.event
async def on_raw_reaction_add(payload):
    if payload.channel_id == 977614786311372830:
        if payload.emoji.name == "✅":
            channel = bot.get_channel(payload.channel_id)
            message = await channel.fetch_message(payload.message_id)
            reaction = get(message.reactions, emoji=payload.emoji.name)
            if reaction and reaction.count > 4:
            	await bot.get_channel( 977614786311372830).send(f"User <@{BanMember}> was banned.\nReason : {BanReason}")
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Тебе нужно хранить соответствие между id сообщения и объектом Member пользователя, которого нужно забанить.
Например, в словаре.
Тогда команда !ban будет помещать эти сведения в словарь (так как у неё есть доступ к ним), а on_raw_reaction_add() будет проверять наличие id сообщения в словаре.
Если такой id есть, и реакций достаточно, то принимаем решение о бане, и извлекаем объект Member по этому ключу.
Если такого id нет, то реакция была поставлена под каким-то другим сообщением, и мы его игнорируем.
Удалять id сообщения из словаря можно по таймауту - это можно реализовать прямо в обработчике команды. Запостили сообщение, добавили его id в словарь, уснули на пару минут через asyncio.sleep(), проверили наличие id в словаре. Если он там - удалили.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы