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
相关产品推荐
相关产品推荐

