You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py中on_message事件失效,无报错却无法触发,求排查

问题分析与修复方案

核心错误

你代码里的message.content.lower是直接引用了字符串的lower方法对象,而非调用该方法获取小写后的字符串。方法对象和字符串永远不会相等,导致所有条件判断都不成立,因此机器人不会发送消息,也不会触发语法报错(因为代码语法本身合法,只是逻辑错误)。

修复后的代码

将所有message.content.lower改为message.content.lower(),执行小写转换后再与目标字符串比较:

@client.listen('on_message')
async def on_message(message):
    if message.content.lower() == "good morning":
        await message.channel.send(f"Good Morning!")
    elif message.content.lower() == "goodmorning":
        await message.channel.send(f"Good Morning!")
    elif message.content.lower() == "gm":
        await message.channel.send(f"Good Morning!")
    elif message.content.lower() == "good night":
        await message.channel.send(f"Good Night!")
    elif message.content.lower() == "goodnight":
        await message.channel.send(f"Good Night!")
    elif message.content.lower() == "gn":
        await message.channel.send(f"Good Night!")

代码优化建议

可以把相同回复的关键词整合到列表中,用in判断简化代码:

@client.listen('on_message')
async def on_message(message):
    content = message.content.lower()
    morning_terms = ["good morning", "goodmorning", "gm"]
    night_terms = ["good night", "goodnight", "gn"]
    
    if content in morning_terms:
        await message.channel.send("Good Morning!")
    elif content in night_terms:
        await message.channel.send("Good Night!")

内容的提问来源于stack exchange,提问作者AngleBoost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:50:21