Бот Discord отправляет бесконечное количество сообщений, когда пользователь набирает определенную фразу c - PullRequest
0 голосов
/ 01 августа 2020

Я создал бота, который, помимо прочего, отправляет цитаты из видео garfielf, когда кто-то в чате произносит определенную фразу c. Например, если бы я сказал «лазанья», я бы ответил «* лазага». Однако с одной конкретной фразой c он отправляет сообщение бесконечно, пока я не выключу его. Это происходит только тогда, когда кто-то говорит на сервере «Ненавижу». Я попытался создать переменную канала, равную возвращаемому значению client.get_channel (channel_id), и вместо этого использовать channel.send (), но это имеет ту же проблему.

@bot.event
async def on_message(message):
    await bot.wait_until_ready()
    lasaga = "lasagna"
    garfield = "garfielf"
    where_are_the = "where are the "
    wheres_the = "where\'s the "
    i_hate = "i hate "
    bad_bot = "bad bot"
    text = message.content.strip().lower()
    # sends response if keyword(s) are in message
    if lasaga in text:
        await message.channel.send('*lasaga')
    if garfield in text:
        await message.channel.send(f'I eat, {message.author.name}. It\'s what I do')
    if where_are_the in text or wheres_the in text:
        await message.channel.send('I eat those food')
    if i_hate in text:
        await message.channel.send('I hate alram clocks')
    if bad_bot in text:
        await message.channel.send('sowwy uwu')

Понятия не имею, почему это происходит только с одной фразой.

Edit: это видео: https://youtu.be/OGbhJjXl9Rk

Edit 2: оказывается, бот запускался сам. Я исправил это, установив bot_id на идентификатор бота и изменив оскорбительный оператор if на это:

if i_hate in text and message.author.id != bot_id:
        await message.channel.send('I hate alram clocks')

1 Ответ

1 голос
/ 01 августа 2020

Бот не проигнорирует собственное сообщение, поэтому, если бот напишет свою команду, он выполнит ее. Это можно исправить, игнорируя собственные сообщения, например,

async def on_message(self, message):
    if message.author == bot.user:
        return

    # the rest of your code goes here
...