повторение функции on_message, перезапись Discord.py

Я делаю бота, который, когда обнаруживает, что вы используете запрещенное слово, удаляет ваше сообщение. Достаточно просто, но когда я это сделаю. Функция on_message повторяется. Я не знаю почему, но надеюсь, что вы ответите на мой вопрос

@client.event
async def on_message(msg):
    contents = msg.content.split(" ")
    for word in contents:
        if word.lower() in chat_filter: #ChatFilter is a list of words that cannot be used
            try:
                await msg.delete()
                await msg.channel.send("**YOU ARE NOT ALLOWED TO USE THIS WORD!!!**")
            except discord.errors.NotFound:
                return

person TheBigBro122    schedule 02.04.2019    source источник
comment
можешь уточнить, что это значит repeats itself?   -  person    schedule 02.04.2019
comment
@reportgunner ну, я следил за видео на YouTube. Для него, когда он написал код, он сделал это один раз за него. Я скопировал его код, и он продолжает повторяться. Думаю, разница в версиях и прочем   -  person TheBigBro122    schedule 02.04.2019
comment
Я спросил, поскольку понятия не имею, имеет ли вы в виду повторение, например, бесконечное выполнение цикла, или сообщения дублируются (т.е. на каждое сообщение есть два ответа), или сообщения умножаются экспоненциально.   -  person    schedule 02.04.2019
comment
@reportgunner да. Сообщения повторяются, хотя я не хочу, чтобы это произошло. Любое решение? Я дам вам ссылку на видео, чтобы показать, что я имею в виду youtube.com/watch ? v = -2b1JUwEF3o   -  person TheBigBro122    schedule 02.04.2019
comment
Одно из слов в chat_filter тоже есть в сообщении? Вы можете добавить проверку, чтобы игнорировать собственные сообщения: if msg.author == client.user: return   -  person Patrick Haugh    schedule 02.04.2019
comment
@Patrick Haugh Что вы имеете в виду под одним из слов в chat_filter также в сообщении. Chat_filter - это список строк, которые нельзя использовать в сообщении. Например, ругательное слово находится в chat_filter, если пользователь произносит это ругательство, бот удаляет его.   -  person TheBigBro122    schedule 02.04.2019
comment
@ TheBigBro122 Значит, если разрешено было в chat_filter, то бот всегда отвечал сам себе. Похоже, это не так. Если у вас есть бот только с этим событием и без других функций, вы по-прежнему видите поведение множественного ответа?   -  person Patrick Haugh    schedule 02.04.2019
comment
@Patrick Haugh Нет, бот не будет отвечать самому себе вечно, потому что он не скажет разрешено, если он был в chat_filter, он просто удалит сообщение и скажет другое предложение. По-настоящему изучив свою проблему, я обнаружил другую проблему, вместо того, чтобы повторять, количество сообщений в функции on_message увеличивается вдвое, знаете ли вы, что вызывает мою проблему?   -  person TheBigBro122    schedule 03.04.2019
comment
@ TheBigBro122 Какой еще у вас код, который может взаимодействовать с вашим on_message? Вы тоже используете add_listener или, может быть, у вас есть винтик с аналогичным on_message событием?   -  person Patrick Haugh    schedule 03.04.2019
comment
@ Патрик Хо Я единственный, кто взаимодействует с функцией on_message. И нет, я не использую add_listener или винтики   -  person TheBigBro122    schedule 03.04.2019


Ответы (1)


Вы перебираете каждое слово сообщения и отправляете ответ для каждого из тех слов, которые также находятся в chat_filter. Вместо этого отправьте одно сообщение, если какое-либо из слов находится в запрещенном списке:

@client.event
async def on_message(msg):
    contents = msg.content.split(" ")
    if any(word in chat_filter for word in contents):
        try:
            await msg.delete()
            await msg.channel.send("**YOU ARE NOT ALLOWED TO USE THIS WORD!!!**")
        except discord.errors.NotFound:
            return
person Patrick Haugh    schedule 03.04.2019
comment
Это тоже то же самое. Это видео, которое я пытаюсь скопировать youtube.com/watch?v=-2b1JUwEF3o - person TheBigBro122; 03.04.2019
comment
привет, это снова я. Я только что нашел решение. Я не хочу этого говорить, потому что это было глупо. Просто хочу поблагодарить вас за то, что помог мне найти решение - person TheBigBro122; 03.04.2019