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

Discord.py检测消息中@提及指定角色的实现方案咨询

Discord.py 检测消息@指定角色实现方案

前置配置

  • 先到Discord开发者后台的Bot设置页,开启Privileged Gateway Intents下的Message Content Intent和Server Members Intent,否则机器人无法正常读取消息内容和获取角色信息
  • 初始化客户端时必须传入对应的权限配置

完整实现代码

import discord

# 配置权限
intents = discord.Intents.default()
intents.message_content = True
intents.members = True

client = discord.Client(intents=intents)

# 替换为你要检测的目标角色ID(推荐用ID,不会随角色名修改失效)
TARGET_ROLE_ID = 123456789012345678
# 也可以用角色名匹配,优先级低于ID匹配
TARGET_ROLE_NAME = "Admin"

@client.event
async def on_ready():
    print(f"已登录为 {client.user}")

@client.event
async def on_message(message):
    # 忽略机器人自己发的消息
    if message.author == client.user:
        return
    
    # 遍历消息中所有被@的角色
    for role in message.role_mentions:
        # 优先按ID匹配
        if role.id == TARGET_ROLE_ID:
            print(f"目标角色 {role.name} 被提及")
            # 这里写你要触发的指令逻辑
            await message.channel.send("收到,管理员已收到通知!")
            # 匹配到就退出循环,避免重复触发
            break
        
        # 如果不需要按名称匹配可以删掉这部分
        elif role.name == TARGET_ROLE_NAME:
            print(f"目标角色 {role.name} 被提及")
            await message.channel.send("收到,管理员已收到通知!")
            break

注意事项

  • 角色ID获取方式:Discord开启开发者模式后,右键角色即可复制ID
  • 机器人需要在对应频道拥有「查看频道」「发送消息」的基础权限,否则无法正常接收消息和回复
  • 不推荐直接解析message.content做匹配,@角色的原生格式为<@&角色ID>,直接用框架内置的role_mentions属性更稳定,不会因为消息格式变化失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:51:01