如何设置被提及才响应特定关键词的无前缀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
相关产品推荐
相关产品推荐

