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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:39:52