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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:55:32