如何在Python中检测Discord消息中触发机器人Ping的提及?
检测Discord消息中所有触发机器人Ping的提及
核心逻辑
要覆盖所有能触发机器人Ping的场景,得检查三类情况:
- 消息直接@机器人账号(比如
@机器人昵称) - 消息@了机器人所在的可提及角色(比如
@管理员,且机器人属于该角色) - 消息用了
@everyone或@here(前提是机器人在当前频道没屏蔽这类通知权限)
具体实现(以Discord.py为例)
1. 自定义检测函数
把所有检测逻辑整合到一个函数里,方便调用:
def is_bot_pinged(bot, message): # 检测直接@机器人 if bot.user.mentioned_in(message): return True # 检测@机器人所属的角色 for role in bot.user.roles: # 可跳过服务器默认的@everyone角色(如果不需要检测这类) if role.is_default(): continue if role.mentioned_in(message): return True # 检测@everyone/@here,同时验证机器人是否能接收这类通知 if message.mention_everyone: channel_perms = message.channel.permissions_for(bot.user) # 只要机器人能读消息+发消息,就会收到@everyone的Ping if channel_perms.read_messages and channel_perms.send_messages: return True return False
2. 实际调用示例
在消息事件里用这个函数判断即可:
@bot.event async def on_message(message): if is_bot_pinged(bot, message): await message.channel.send("收到!我被Ping到啦~") await bot.process_commands(message)
补充说明
- 如果不需要检测
@everyone/@here,直接删掉对应代码块就行 - 不同Discord开发库的API细节可能有差异,但核心思路都是检查「直接提及、所属角色提及、全局提及」这三类场景
内容的提问来源于stack exchange,提问作者BigEmster
相关产品推荐
相关产品推荐

