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

如何让Discord机器人仅在消息提及特定用户时做出响应?

修复后的Discord机器人实现方案

原代码存在的问题

  • 原有逻辑强制要求@你的内容必须出现在消息最开头才会触发,无法匹配@在消息中间、末尾的场景
  • 直接硬匹配字符串的方式容错性极低,遇到带昵称的@格式、嵌入@等场景就会失效

实现逻辑说明

discord.py的Message对象自带mentions属性,会直接返回当前消息中@的所有用户对象列表,直接判断你的用户ID是否在这个列表里即可,不需要手动解析消息内容,准确度更高。

修正后的完整代码

import discord
import os

emoji = '\N{THUMBS UP SIGN}'
# 你的Discord用户ID,可直接替换为你自己的ID
TARGET_USER_ID = 666372975062417459
# 2.0以上版本discord.py需要显式声明intents
client = discord.Client(intents=discord.Intents.default())

@client.event
async def on_ready():
    print('{0.user} is now active!'.format(client))

@client.event
async def on_message(message):  
    # 忽略机器人自己发送的消息
    if message.author == client.user:
        return
    # 遍历消息中@的所有用户,判断是否包含目标用户
    for user in message.mentions:
        if user.id == TARGET_USER_ID:
            await message.add_reaction(emoji)
            # 匹配到目标后直接跳出循环,不需要重复校验
            break

client.run(os.environ['TOKEN'])

注意事项

你需要在Discord开发者后台的机器人设置页面,开启Message Content Intent权限,否则机器人无法正常读取消息内容和@列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:15:04