如何让我的bot检测用户发送embed行为,实现selfbot检测踢人功能
Discord自机器人检测功能补充逻辑
实现该功能需要补充的核心判断逻辑如下:
- 排除机器人自身发送的消息,避免误触发规则
- 排除具备管理员权限的用户、官方服务机器人、webhook发送的消息,避免误踢正常账号
- 判断消息是否携带嵌入内容(embed)
- 执行踢人操作前添加异常捕获,避免bot权限不足导致程序崩溃
- 增加命令处理回调,避免该事件覆盖后续添加的其他命令功能
完整可运行代码如下:
@client.event async def on_message(message): # 跳过机器人自身发送的消息 if message.author == client.user: return # 跳过管理员、其他服务机器人、webhook消息,若需要检测webhook可删除message.webhook_id相关判断 if message.author.guild_permissions.administrator or message.author.bot or message.webhook_id: return # 判断消息是否包含embed if len(message.embeds) > 0: try: # 执行踢人操作,可自定义踢人原因 await message.author.kick(reason="检测到使用自机器人发送嵌入消息") # 可选:在当前频道发送踢出提示 await message.channel.send(f"已踢出用户 {message.author.mention},原因:普通用户禁止发送嵌入消息") except Exception as e: # 捕获权限不足等异常,可按需添加日志记录逻辑 print(f"踢出操作失败:{str(e)}") # 必须保留该行,否则后续编写的其他前缀/斜杠命令会失效 await client.process_commands(message)
注意:使用前请确认你的bot已经被服务器授予「踢成员」权限,该逻辑默认普通用户无权限发送嵌入消息,仅能检测到通过自机器人/违规接口发送嵌入的普通账号。
内容的提问来源于stack exchange,提问作者jack12
相关产品推荐
相关产品推荐

