@FooXeeD

Как отфильтровать сообщения в Discord и выдать ответ ответ бота DISNAKE?

Хочу реализовать на Phyton для бота в Discord некое подобие "Вопрос-ответ".
Замысел такой. Пользователь пишет в чат сообщение, бот его прогоняет через словарь, и если сообщение (ключ) совпадает, то выдает значение (value) в чат.
Написал такой код:

@bot.event
async def on_message(message):
    data = CFG.get('Recipes')
    text = message.content.lower()
    for key, value in data.items():
        if text == key.lower():
            print(value)
            await message.channel.send(f'{message.author.mention}, {value}')
            break
        else:
            print('ОШИБКА')
            await message.channel.send(f'{message.author.mention}, Такого рецепта нет')
            break

Самое интересное, что print выводит запись один раз, а в самом Discord, начинается бесконечный дубляж сообщений.
665a31ffbf288511664459.png
Как сделать так, чтобы был лишь один ответ? Либо значение из словаря, либо сообщение о том, что нет такого значения.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Alexandre888
@Alexandre888
Javascript-разработчик
поскольку ваш бот реагирует на все сообщения, которые видит в текстовых каналах, он реагирует также и на свои собственные: сначала на «@GHOST, значение по ключу тест», потом на «@test_bot, Такого ключа нет», и так до бесконечности.

достаточно будет добавить проверку на бота в начале:
@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    
    data = CFG.get('Recipes')
    text = message.content.lower()
    for key, value in data.items():
        if text == key.lower():
            print(value)
            await message.channel.send(f'{message.author.mention}, {value}')
            break
    else:
        print('ОШИБКА')
        await message.channel.send(f'{message.author.mention}, Такого рецепта нет')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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