使用 OAuth redirect uri 找出谁邀请了我的机器人服务器
Find out who invited my bot the server using OAuth redirect uri
在有人将此问题标记为重复之前,
- 是的,我知道审计日志是一回事。
- 不,我不会使用它,因为它需要许可。
- 是的,更容易找到服务器所有者
- 不,我需要确切地知道是谁邀请了我的机器人
我想:
使用邀请 link 重定向找出谁邀请了我的机器人服务器(用户公会 ID 对)。
我阅读了 OAuth2 API,但由于缺乏背景知识,我不太理解它。
我所了解的是 bot invite links 可以有重定向 uri,
并且一些信息在认证后传输给它。
是否可以从中获取 user/guild id?
我试过了:
使用 python -m http.server
、
设置 http 服务器
将我的 IP 添加到开发页面中的重定向 uri 列表并生成包含重定向到我的 IP 的邀请 link。
但是在使用 link,
邀请我的机器人后,我没有被重定向到我的 http 服务器
也没有在 http 服务器控制台上打印任何内容。
注意事项:
A. 不要出于任何目的泄露您的客户端密码或您的机器人令牌。如果这样做,请立即从开发人员门户重新生成它们。
B、code和token在下面的答案中有不同的含义。
C. 这不适合绝对的初学者,您应该对 Web 请求(特别是 GET 和 POST 请求)有一个大致的了解。您可能还需要托管站点处理重定向 URL.
D. 这不包括任何形式、方式或形式的安全问题。
- 在开发人员门户的机器人选项卡中,启用
REQUIRES OAUTH2 CODE GRANT
选项。这会阻止机器人加入服务器,除非第 4 步完成。
- 然后使用 OAuth 选项卡生成具有身份和机器人范围的 OAuth URL。这对于在第 5 步中获取用户信息很重要。
- 当有人访问 URL、登录并选择服务器时,他们将被重定向到您的重定向 URL。此 URL 接收一个 single-use 代码作为 URL 参数,即 URL 将是
<base_url>&code={code}<other stuff>
。设置 Web 服务器和处理请求取决于您(并且可能超出任何 SO 答案的范围;google 是您的朋友)。
- 此代码可用于获取令牌。 This link 解释了如何用代码交换令牌。它涉及发送一个 post 请求,其中包含您应用程序的客户端 ID 和密码。两者都可以从 discord 的开发者门户网站获得。响应还将包含有关公会的信息以及分别在“公会”和“access_token”字段中的令牌。
- 向
https://discord.com/api/v9/users/@me
发送一个包含 Authorization: Bearer ${token}
的 header 的获取请求,其中令牌是在步骤 4 中获得的。响应采用 JSON 格式并包含用户指定的数据 here。注意:上面的link是最新的API版本v9,以后的版本可能会有变化。
编辑:
可以手动修改 URL 以从 URL 中删除身份范围。只要您请求交换令牌代码,机器人仍会加入服务器。在这种情况下,对 /users/@me
的请求将失败,您将无法访问用户 object。如果请求失败,状态码对应未授权,应该很容易让bot离开服务器。
在有人将此问题标记为重复之前,
- 是的,我知道审计日志是一回事。
- 不,我不会使用它,因为它需要许可。
- 是的,更容易找到服务器所有者
- 不,我需要确切地知道是谁邀请了我的机器人
我想:
使用邀请 link 重定向找出谁邀请了我的机器人服务器(用户公会 ID 对)。
我阅读了 OAuth2 API,但由于缺乏背景知识,我不太理解它。
我所了解的是 bot invite links 可以有重定向 uri,
并且一些信息在认证后传输给它。
是否可以从中获取 user/guild id?
我试过了:
使用 python -m http.server
、
设置 http 服务器
将我的 IP 添加到开发页面中的重定向 uri 列表并生成包含重定向到我的 IP 的邀请 link。
但是在使用 link,
邀请我的机器人后,我没有被重定向到我的 http 服务器
也没有在 http 服务器控制台上打印任何内容。
注意事项:
A. 不要出于任何目的泄露您的客户端密码或您的机器人令牌。如果这样做,请立即从开发人员门户重新生成它们。
B、code和token在下面的答案中有不同的含义。
C. 这不适合绝对的初学者,您应该对 Web 请求(特别是 GET 和 POST 请求)有一个大致的了解。您可能还需要托管站点处理重定向 URL.
D. 这不包括任何形式、方式或形式的安全问题。
- 在开发人员门户的机器人选项卡中,启用
REQUIRES OAUTH2 CODE GRANT
选项。这会阻止机器人加入服务器,除非第 4 步完成。 - 然后使用 OAuth 选项卡生成具有身份和机器人范围的 OAuth URL。这对于在第 5 步中获取用户信息很重要。
- 当有人访问 URL、登录并选择服务器时,他们将被重定向到您的重定向 URL。此 URL 接收一个 single-use 代码作为 URL 参数,即 URL 将是
<base_url>&code={code}<other stuff>
。设置 Web 服务器和处理请求取决于您(并且可能超出任何 SO 答案的范围;google 是您的朋友)。 - 此代码可用于获取令牌。 This link 解释了如何用代码交换令牌。它涉及发送一个 post 请求,其中包含您应用程序的客户端 ID 和密码。两者都可以从 discord 的开发者门户网站获得。响应还将包含有关公会的信息以及分别在“公会”和“access_token”字段中的令牌。
- 向
https://discord.com/api/v9/users/@me
发送一个包含Authorization: Bearer ${token}
的 header 的获取请求,其中令牌是在步骤 4 中获得的。响应采用 JSON 格式并包含用户指定的数据 here。注意:上面的link是最新的API版本v9,以后的版本可能会有变化。
编辑:
可以手动修改 URL 以从 URL 中删除身份范围。只要您请求交换令牌代码,机器人仍会加入服务器。在这种情况下,对 /users/@me
的请求将失败,您将无法访问用户 object。如果请求失败,状态码对应未授权,应该很容易让bot离开服务器。