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
相关产品推荐
相关产品推荐

