@BuBux

DISCORD.BOT: Циклится async def on_message. Как решить?

@Bot.event
async def on_message(message):
    if message.author.id in white_list:
        await message.channel.send('+')
    if message.author.id not in white_list:
        await message.channel.send('-')

В данном скрипте я проверяю на вхождение пользователя в "белый" список. Если я пишу с пользователя, который входит в "белый" список, мне бот выводит "+", а затем четыре минуса и спустя секунды 3 выводит 5 минусов подряд. И так продолжается пока я не остановлю скрипт. В чём может быть проблема?
  • Вопрос задан
  • 1436 просмотров
Решения вопроса 1
darkvessel
@darkvessel
Недопрограммист самоучка на Node.js, изучаю HTML5.
Я не силён на данный момент в Python и discord.py, но могу сказать:
У вас произошла "рекурсия", когда функция сама себя вызывает.
Связано это с тем что ваш код также реагирует на сообщения бота и выдаёт ответ.
Вот фикс:
@Bot.event
async def on_message(message):
    if message.author.bot and message.author.id in white_list:
        await message.channel.send('+')
    else: await message.channel.send('-')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
1keda
@1keda
Знаю, что вопросу много-много времени. Отвечу, может кто-то другой нуждается в этом.
В начале функции нужно поставить такое условие:
if message.author.bot: return
Оно игнорирует ботов и функция не будет рекурсивно выполняться.
Ведь on_message вызывается и когда Вы от лица своего бота посылаете сообщения.
А также, если требуется можно докрутить белый список для ботов:
if message.author.bot:
    if not message.author.in in BOT_WHITE_LIST:
        return
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы