首页 > 解决方案 > 与 on_message 事件有关的 Discord py Cog 问题,不起作用

问题描述

最近我的机器人正在成长,我花时间重写代码以使其与 Discord Py 的 cogs 系统一起工作

我已经正确调整了所有代码,但是on_message我停止工作的所有事件都没有抛出任何类型的错误消息。

该模块已正确加载并且没有语法错误,所以我无法理解会发生什么。

我的一些代码:

import discord
import random
import datetime
from discord.ext import commands

class eastereggs(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self._last_member = None

    @commands.Cog.listener()
    async def on_message(self,message):
        Cheers= ["Hi", "hi", "Hello", "hello"]
        if message.content in Cheers:
            await message.channel.send('Hello again')
            await self.bot.process_commands(message)

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

但是,它不会对数组中的任何问候做出反应

我编辑:我有多个带有数组的 on_message 事件

但似乎只有一个有效

标签: pythondiscorddiscord.py

解决方案


问题在于你不能有两个同名的函数。如果你这样做,它只会调用最后一个。该文件将加载而不会出现任何错误。由于所有都是on_message事件,因此只有最后一个会起作用。但是,您可以告诉听众“听”什么。

您可以使用@Cog.listener("on_message")(或以相同方式的其他事件),然后调用您的函数不同的名称。

    @Cog.listener("on_message")
    async def greet(self,message):
        Cheers= ["Hi", "hi", "Hello", "hello"]
        if message.content in Cheers:
            await message.channel.send('Hello again')
            await self.client.process_commands(message)

    @Cog.listener("on_message")
    async def agree(self,message):
        Agree = ["yes", "yep", "ok"]
        if message.content in Agree:
            await message.channel.send('good')
            await self.client.process_commands(message)


    @Cog.listener("on_message")
    async def dAgree(self,message):
        dAgree= ["no", "nope"]
        if message.content in dAgree:
            await message.channel.send('why')
            await self.client.process_commands(message)


推荐阅读