如何使用discord.py获取添加Discord机器人的用户?
获取添加Discord机器人的用户(discord.py实现)
Discord没有原生提供“谁添加了机器人”的直接事件,但可以通过两种方式实现需求:
方法一:通过审计日志查询(最常用)
当机器人被加入服务器时,会触发on_guild_join事件,我们可以在这个事件里查询服务器的审计日志,找到“添加机器人”的操作记录,从而获取操作的用户。
代码实现
import discord from discord.ext import commands # 启用必要的意图 intents = discord.Intents.default() intents.guilds = True intents.members = True # 必须开启,否则无法获取用户信息 bot = commands.Bot(command_prefix='!', intents=intents) @bot.event async def on_guild_join(guild): # 查询最近1条添加机器人的审计日志 async for entry in guild.audit_logs(action=discord.AuditLogAction.bot_add, limit=1): # 输出结果,也可以写入数据库或做其他处理 print(f"机器人被用户 {entry.user.name}(ID: {entry.user.id})添加到服务器 {guild.name}") # 替换成你的机器人令牌 bot.run('YOUR_BOT_TOKEN')
注意事项
- 必须在Discord开发者后台的机器人设置里开启「服务器成员意图」(Privileged Gateway Intents下的Server Members Intent)
- 机器人需要被授予查看审计日志(View Audit Log)的权限,否则无法查询审计日志内容
方法二:自定义邀请链接追踪(适合精准场景)
如果需要追踪每个邀请的来源,可以在生成机器人邀请链接时添加state参数传递自定义标识,再通过OAuth2回调获取用户信息。这种方式需要搭建web服务,步骤相对复杂:
- 生成带
state的邀请链接:https://discord.com/oauth2/authorize?client_id=你的机器人ID&permissions=所需权限码&scope=bot&state=自定义追踪标识 - 搭建web服务接收Discord的OAuth2回调,在回调中提取用户信息和
state参数,以此记录添加机器人的用户
这种方式适合有特定追踪需求的场景,一般情况下方法一足够满足需求。
内容的提问来源于stack exchange,提问作者root_of_the_live
相关产品推荐
相关产品推荐

