如何使用Discord.py实现机器人响应特定用户提及并自动回复?
Discord机器人提及特定用户自动回复的实现方案
你的思路方向是对的,但直接用@user_id匹配会有小问题——Discord里提及用户的格式并不是简单的@user_id,实际消息里会转换成两种格式:<@用户ID>(普通提及)或<@!用户ID>(当用户有服务器昵称时)。所以得调整判断逻辑来覆盖这两种情况,下面是修正后的完整实现:
完整代码示例
import discord from discord.ext import commands # 开启必要的权限意图,必须开启message_content才能读取消息内容 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 # 替换成你的个人账号ID(字符串格式) TARGET_USER_ID = "123456789012345678" # 生成两种可能的提及格式 standard_mention = f"<@{TARGET_USER_ID}>" nickname_mention = f"<@!{TARGET_USER_ID}>" # 检查消息内容是否包含任一提及格式 if standard_mention in message.content or nickname_mention in message.content: await message.channel.send('我现在不在,请留言!') # 替换成你的机器人令牌 client.run("YOUR_BOT_TOKEN_HERE")
关键细节说明
- 意图权限:现在Discord要求必须开启
message_content意图才能让机器人读取消息内容,所以初始化Bot时一定要配置好这部分,否则机器人会无法检测到提及内容。 - 提及格式匹配:覆盖两种提及格式能确保不管用户有没有服务器昵称,机器人都能正确识别到对你的提及。
- 避免自触发:判断
message.author == client.user是为了防止机器人回复自己的消息,引发循环。
内容的提问来源于stack exchange,提问作者Chris Fink
相关产品推荐
相关产品推荐

