discord.py机器人如何实现@特定角色及消息发送者功能
Discord机器人实现@用户、@特定角色(触发ping通知)方案
你原有代码无法正常触发提及通知的核心原因:直接拼接"@角色名"、"@{用户ID}"格式的字符串,Discord不会识别为合法提及,自然不会发送ping通知,需要用官方封装的提及属性或标准提及格式。
核心实现规则
- 提及发送指令的举报用户:直接调用用户对象的
.mention属性,即ctx.author.mention,会自动生成Discord可识别的提及格式 - 提及管理员角色:先获取到对应角色的对象,再调用角色对象的
.mention属性即可;推荐用角色ID获取角色,不会因为角色改名导致功能失效 - 所有需要@的内容可以放在同一条消息里发送,不需要拆分多条消息重复@
修正后的可运行代码
import discord from discord.ext import commands import asyncio import random import json client = commands.Bot(command_prefix="!") @client.command() async def Report(ctx, member : discord.Member,*, reason = "no reason provided"): # 替换为你的管理员专属频道ID report_channel = client.get_channel(994788167699931206) # 替换括号内的数字为你服务器管理员角色的真实ID,比按名字找角色更稳定 admin_role = ctx.guild.get_role(123456789012345678) # 单条消息完成@管理员、@举报人、说明举报内容 await report_channel.send( f"{admin_role.mention} 收到新举报:\n" f"被举报用户:{member.mention}\n" f"举报人:{ctx.author.mention}\n" f"举报理由:{reason}" ) client.run("你的机器人TOKEN")
注意事项
- 提前确认机器人在管理员专属频道拥有发送消息、提及@用户、提及@角色的权限
- 如果管理员角色设置了「不允许任何人提及」,需要单独给机器人开通提及该角色的权限,否则无法触发ping
- 不要直接发送
"@Admin"这类纯文本,Discord不会对纯文本的@内容做通知触发
内容的提问来源于stack exchange,提问作者user19507151
相关产品推荐
相关产品推荐

