如何让Bot响应特定消息?求助关键词响应异常及报错问题
解决Discord Bot关键词响应无反应/报错的问题
我看你这情况主要是几个细节没处理好,帮你逐一排查修正:
1. 精确匹配太苛刻,导致Bot没触发
你用message.content == "keyword"是完全精确匹配,用户输入多打个空格、大小写不一样,Bot都不会响应。建议改成更灵活的匹配方式:
- 只要包含关键词就触发(忽略大小写):
if "keyword" in message.content.lower() - 要精确匹配但忽略大小写:
if message.content.strip().lower() == "keyword"
2. 回复消息的格式化写错了
你的回复字符串"Response {0.author.mention}"语法不对,没法正确解析用户的@信息。得用正确的字符串格式化方式:
- 推荐用f-string(Python 3.6+支持):
f"Response {message.author.mention}" - 或者用
.format():"Response {0}".format(message.author.mention)
3. 用了废弃的API方法会报错
如果你的discord.py是v1.0及以上版本,client.send_message已经被官方弃用了,换成message.channel.send()才是正确的发送消息方式,旧方法会直接报错。
4. 别忘了检查基础配置
最后还要确认两个点:
- Bot在目标频道有发送消息的权限,不然就算触发了也发不出内容
- 你的
on_message事件里有没有忽略Bot自己的消息?比如加上if message.author == client.user: return,避免Bot自己触发自己的消息导致循环
修正后的完整可运行代码
@client.event async def on_message(message): # 先忽略Bot自己的消息,防止循环触发 if message.author == client.user: return # 不区分大小写检测关键词 if "keyword" in message.content.lower(): # 用正确的方式发送带@的回复 await message.channel.send(f"嘿 {message.author.mention},你触发了关键词!") # 如果你的Bot还有其他命令,一定要加这句让命令系统正常工作 await client.process_commands(message)
这样改完应该就能正常响应了,要是还有问题,可以先看看pip show discord.py的版本,确保用的是稳定版(比如v2.x系列)。
内容的提问来源于stack exchange,提问作者Cupcake
相关产品推荐
相关产品推荐

