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

如何设置被提及才响应特定关键词的无前缀Discord Bot

问题分析与修复方案

你的代码有几个关键问题导致机器人不响应,下面逐一说明并给出修正后的代码:

1. 语法错误(核心问题)

Python的条件判断语句必须使用圆括号()和冒号:,而不是大括号{}。你代码里所有if语句的大括号都是错误写法,直接导致代码无法正常运行。

2. 消息匹配逻辑错误

你用message.content == "Hi"判断,但用户消息里会包含机器人的提及(比如<@123456789>),所以消息内容不会是纯"Hi",应该改成检查关键词是否存在于消息内容中。

3. 缺少消息内容权限意图

Discord机器人需要明确启用message_content意图才能读取消息内容,否则无法获取到消息文本。

4. 未处理命令流程(可选但规范)

使用commands.Bot时,在on_message事件末尾需要调用await client.process_commands(message),避免阻塞其他命令的处理逻辑。


修正后的完整代码

import discord
from discord.ext import commands

# 启用必要的意图
intents = discord.Intents.default()
intents.message_content = True

# 初始化机器人,空前缀(这里因为用事件处理,前缀不影响,但必须设置)
client = commands.Bot(command_prefix='', intents=intents)

@client.event
async def on_message(message):
    # 忽略机器人自己的消息,避免循环回复
    if message.author == client.user:
        return
    
    # 检查机器人是否被提及
    if client.user.mentioned_in(message):
        # 检查消息中是否包含关键词
        if "Hi" in message.content:
            await message.channel.send(f"Hello {message.author.mention}")
        if "How are you?" in message.content:
            await message.channel.send(f"I'm good {message.author.mention}")
    
    # 处理其他命令(如果有的话)
    await client.process_commands(message)

# 替换成你的机器人令牌
client.run("YOUR_BOT_TOKEN")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:04