Задать вопрос
@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
Как сделать так, чтобы был лишь один ответ? Либо значение из словаря, либо сообщение о том, что нет такого значения.
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    DevOps-инженер
    6 месяцев
    Далее
  • Хекслет
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 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}, Такого рецепта нет')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 75 000 до 125 000 ₽
JustBusiness Санкт-Петербург
от 130 000 до 150 000 ₽
IForce connect ltd Лондон
от 3 000 до 6 000 €