Как я могу использовать Python Discord Bot Cog, чтобы прочитать все отправленные сообщения?on_message, похоже, не работает - PullRequest
0 голосов
/ 25 апреля 2019

У меня правильно настроен cog (что я знаю, потому что у меня есть отдельный cog, который обрабатывает все команды, так что on_message не портит их), но on_message просто ничего не делает.

Я пытался включить его в другой Cog, но я все равно не получаю сообщение об ошибке, просто не работает. Я также пытался использовать различные формы @ bot.event, но все они просто вызывают ошибки. Наконец, я знаю, что Cog работает, потому что on_ready в основном .py предупреждает меня, что он успешно загрузился.

Это код в Cog, который должен читать все сообщения (минус весь материал импорта):

class autoresponse(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
    async def on_message(self, message):
        print(message.content)

def setup(bot):
    bot.add_cog(autoresponse(bot))

и это код, который загружает его


@bot.event
async def on_ready():
    print('bot is up')
    await bot.change_presence(status=discord.Status.online, activity=discord.Game("bl help"))
    for cog in [f.replace('.py', "") for f in listdir("cogs") if isfile(join("cogs", f))]:
        try:
            if not "__init__" in cog:
                bot.load_extension("cogs." + cog)
                print("Loaded cog")
        except Exception as e:
            print("Cog {} not loaded!".format(cog))
            traceback.print_exc()

Надеюсь, бот должен просто распечатать все сообщения на консоли, потому что тогда я буду знать, как он работает, и смогу двигаться дальше с другими вещами, которые я хочу, чтобы он делал.

1 Ответ

1 голос
/ 25 апреля 2019

Слушатели событий в винтике должны быть украшены commands.Cog.listener

@commands.Cog.listener()
async def on_message(self, message):
    print(message.content)

Документацию для винтиков нового стиля можно найти здесь

...