如何在on_message事件中检测发送消息的用户是否为机器人
消息发送方机器人身份判断方案
首先明确你当前遇到的问题核心:message.user.bot 仅能识别通过平台官方机器人接口接入的合规机器人,大量非合规的爬虫类机器人、模拟普通用户注册的机器人账号不会被平台标记该字段,因此会出现判断漏判/误判。
以下是分层的完整判断逻辑:
1. 基础层:官方字段过滤
优先匹配对应平台的官方机器人标记字段,过滤合规接入的机器人:
- Discord:取
message.author.bot字段,值为true即为官方机器人 - Slack:取
message.bot_id字段,非空值即为官方机器人 - Telegram:取
message.from.is_bot字段,值为true即为官方机器人 - 国内企业协作平台:取发送方ID专属前缀,如企业微信
@app前缀、飞书ou_以外的应用ID前缀,匹配即为官方机器人
本层可覆盖60%以上的常规机器人识别场景,无额外开发成本。
2. 进阶层:异常特征校验
针对未被官方标记的非合规机器人,补充以下特征规则判断:
账号特征
- 注册时间小于7天、无自定义头像、无公开动态/好友关系的账号,判定为高风险机器人
- 用户名为随机无意义字符串、使用平台默认初始用户名的账号,判定为高风险机器人
消息特征
- 10分钟内连续发送3条及以上相同/高度相似内容的账号,判定为机器人
- 消息内容包含大量外部引流链接、黑产类敏感关键词的账号,判定为高风险机器人
- 多次消息发送时间间隔误差小于1秒、完全固定频率发送的账号,判定为机器人
交互特征
- 收到验证码类校验问题(如图形验证码、语义校验问题)无符合人类逻辑回复的账号,判定为机器人
- 单次发送的内容同时触发多个无关指令的账号,判定为机器人
3. 持久层:自定义黑名单库
在你的服务端维护机器人标记库,提升识别准确率:
- 累计触发2次及以上异常规则的账号,永久标记为机器人,后续消息直接拦截
- 同IP/C段下批量发送相似内容的账号,批量标记为机器人
内容的提问来源于stack exchange,提问作者Hetrogon
相关产品推荐
相关产品推荐

