Два @bot.event не работают одновременно.Хотя по отдельности всё работает
Я практикуюсь в программировании на python.Пытаясь создать фильтр для "плохих слов" я столкнулся с проблемой.У меня в коде есть @bot.event,который копирует все сообщения с сервера в другой канал.Так вот,он не работает.Хотя когда я запускаю эти два @bot.event отдельно,они работают отлично.Но вместе они конфликтуют. С чем это может быть связано?
import discord
from discord.ext import commands
TOKEN = 'censored'
badWord = ['bad1', 'bad2','Bad1','Bad2']
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
print(f"Bot App1 is ready") #a message about the bot's readiness, output to the console
@bot.event
async def on_message(message):
if message.content in badWord:
pass
print(f"{message.author}: Bad word is detected")
else:
if message.author == bot.user:
return
print(message.author,message.content)
channel = bot. get_channel(861546679676567594)
await channel.send('{}: {}'.format(message.author, message.content)) #the bot reads all messages written on the server and copies them to a special chat
@bot.event
async def on_message(message):
msg_content = message.content.lower()
if any(word in msg_content for word in badWord):
await message.delete()
await message.channel.send(f"{message.author.mention} Bad word is deleted.")
print('Bad word is deleted',message.author)
bot.run(TOKEN)
Ответы (2 шт):
Возможно проблема в том, что @bot.event является декоратором и оба ваших декоратора нацелены на один и тот же объект. Работать будет первое вхождение, по типу if elif конструкции. Ещё и функции называются одинаково, что не очень хорошо. Советую их объединить или создать отсылку в конце первой функции ко второй
Когда ты второй раз объявляешь функцию on_message, первая "пропадает", она заменяется новой. Также, существует внутреннее ограничение discord.py, которое не позволяет создавать два ивент листенера. Используйте @bot.listen() вместо @bot.event:
@bot.listen('on_message')
async def on_message_one(message):
...
@bot.listen('on_message')
async def on_message_two(message):
...