【问题标题】:Python Discord OAuth2 - Guild.Join (Joining a Guild)Python Discord OAuth2 - Guild.Join(加入公会)
【发布时间】: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)

【问题讨论】:

    标签: python discord


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2019-05-26
      • 2020-12-02
      • 2021-11-29
      • 2018-05-11
      • 2021-06-03
      • 2022-08-09
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多