discord.py机器人message事件与ping命令无法同时运行问题排查
问题根源
discord.py 中如果你手动重写了on_message事件,会覆盖框架默认的消息处理逻辑,原生的命令处理器不会自动接收消息进行命令匹配,因此你定义的!ping命令不会被触发。注释掉on_message时框架走默认逻辑,所以命令可以正常运行。
解决方法
只需要在on_message事件的末尾添加一行await client.process_commands(message),这行代码会将当前收到的消息传递给命令处理器,匹配对应的注册命令即可。
另外补充两个优化点:
- 你当前的逻辑是匹配以kiddo开头的消息,如果需求是匹配所有包含kiddo关键词的消息,需要将判断条件改成
"kiddo" in message.content - 增加机器人自身消息过滤,避免机器人自己触发自己的逻辑导致无限循环回复
修正后完整代码
@client.command() async def ping(ctx): message = await ctx.send("Pong!") await message.edit(content = f"Pong! {round(client.latency*1000,2)} ms") @client.event async def on_message(message): # 过滤机器人自身发送的消息 if message.author == client.user: return # 匹配所有包含kiddo关键词的消息 if "kiddo" in message.content: await message.channel.send("hello?") # 触发命令处理器处理消息中的命令 await client.process_commands(message)
内容的提问来源于stack exchange,提问作者kiddo42069
相关产品推荐
相关产品推荐

