如何获取Discord中其他机器人斜杠命令的调用者ID?(Discord.py)
如何用Discord.py获取调用第三方机器人斜杠命令的用户ID
问题原因
你用on_message监听第三方机器人的消息时,只能拿到机器人自身的ID——因为这类消息的author字段就是发送回复的机器人。实际调用命令的用户信息不会直接出现在普通消息的author属性里,而是关联在交互事件数据中。
解决方案
有两种可靠的方式获取调用者ID:
方式1:监听交互事件(推荐)
直接监听Discord的交互事件,能捕获所有用户触发的斜杠命令请求,包括调用第三方机器人的命令:
@client.event async def on_interaction(interaction): # 过滤出斜杠命令类型,且排除自己机器人的命令 if interaction.type == discord.InteractionType.application_command and interaction.application_id != client.user.id: # 检查是否在目标频道 if interaction.channel.id == 926874863099084830: print(f"调用者ID: {interaction.user.id}")
方式2:在消息事件中检查交互关联
部分第三方机器人的回复消息会关联触发它的交互数据,可通过消息对象的interaction属性获取调用者信息:
@client.event async def on_message(message): if message.channel.id == 926874863099084830: # 检查消息是否关联了交互事件 if message.interaction: caller_id = message.interaction.user.id print(f"调用者ID: {caller_id}") # 保留原有的消息打印(可选) print(message)
注意事项
- 确保你的机器人拥有
applications.commands权限,否则可能无法捕获交互事件。 - 部分老旧或自定义机器人的回复可能不会关联交互数据,这种情况下只能通过消息内容中的@提及提取用户ID,但这种方法可靠性较低。
内容的提问来源于stack exchange,提问作者Mirrovex
相关产品推荐
相关产品推荐

