python - 与 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 事件
但似乎只有一个有效
解决方案
问题在于你不能有两个同名的函数。如果你这样做,它只会调用最后一个。该文件将加载而不会出现任何错误。由于所有都是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)