Python Discord OAuth2 - Guild.Join(加入公会)

Posted

技术标签:

【中文标题】Python Discord OAuth2 - Guild.Join(加入公会)【英文标题】:Python Discord OAuth2 - Guild.Join (Joining a Guild) 【发布时间】:2020-12-04 22:15:37 【问题描述】:

您好,我正在尝试“使用 Discord 进行授权”,自动将用户加入我的公会。

我正在运行一个处理所有这些的Flask 应用程序。

到目前为止,这是我的代码:

def add_to_guild(access_token, userID, guildID):
        url = f"Oauth.discord_api_url/guilds/guildID/members/userID"

        headers = 
            "Authorization" : f"Bearer access_token"
        

        response = requests.post(url=url, headers=headers)
        print(response.text)

但是这不起作用。我收到一条错误消息:

"message": "405: Method Not Allowed", "code": 0

在 OAuth2 文档中,它说如果用户成功加入,我会收到 201 的响应,如果用户已经在公会中,我会收到 204 的响应。

更新 1: 我将方法更改为requests.get,现在收到此错误:

"message": "401: Unauthorized", "code": 0

更新 2: 我创建了一个 Bot,邀请它加入我的不和谐公会,并成功地获得了有关我在公会中的用户的一些信息。但是一旦我离开并尝试再次运行链接,我得到了这个错误

"message": "Unknown Member", "code": 10007

更新 3: 我将方法更改为 PUT,现在收到错误请求

def add_to_guild(access_token, userID):
        url = f"Oauth.discord_api_url/guilds/guildid i cant show/members/userID"

        botToken = "cant show also"

        headers = 
            "Authorization" : f"Bot botToken",
            'Content-Type': 'application/json'
        


        response = requests.put(url=url, headers=headers)
        print(response.text)

【问题讨论】:

【参考方案1】:

要添加成员,您应该使用requests.put(),并且Guilds Auth标头需要是Bot令牌,因此更改为:

headers = 
        "Authorization" : f"Bot access_token"
    

并确保您传递的是 Bot 令牌。更多信息:https://discord.com/developers/docs/reference

Authorization 标头必须是 Bot 令牌(属于同一 用于授权的应用程序),并且机器人必须是 拥有 CREATE_INSTANT_INVITE 权限的公会。

要获取成员,您可以使用不带 bot 标头的 requests.get()

【讨论】:

所以你是说我必须制作一个 Bot 并且它必须是我要添加成员的公会的成员? 你能看看我帖子的更新 2。我刚刚更新了它 你点击链接阅读了吗:Using a bot token gained by registering a bot, for more information on bots see bots vs user accounts. 相信我。我到处都看过。它不起作用。我正在尝试将用户添加到公会,但无法获取有关该公会中用户的详细信息:/ 要添加成员,请使用 requests.put()bot header。见编辑。链接中的文档非常清楚。【参考方案2】:

更新 3 put() 是要走的路 但是,您仍然缺少 JSON 有效负载,该负载必须包含从代码授权的令牌交换收到的用户访问令牌。

data = 
        "access_token" : access_token
    

然后通过将数据传递给 json 来触发您的请求,所以

response = requests.put(url=url, json=data, headers=headers)
print(response.json)

【讨论】:

以上是关于Python Discord OAuth2 - Guild.Join(加入公会)的主要内容,如果未能解决你的问题,请参考以下文章

Discord API - 传回生成的 OAuth2 代码的随机“无效代码”错误

使用 oauth2 从 Discord API 获取信息

如何安全地存储 Discord(OAuth2) 用户的访问令牌?

Discord Oauth2 收到“无效客户端”错误

Discord Oauth2 PHP 中的 JPEG 头像

Discord OAuth2 冻结