Discord API 401未经授权使用OAuth

问题描述 投票:3回答:1

快速提问:我正在尝试使用Discord API备份服务器上的所有消息(如果使用官方术语,则为公会)。

所以我实现了OAuth没有任何问题,我有我的访问令牌,我可以查询一些端点(我试过/users/@me/users/@me/guilds)。虽然,他们中的大多数都不起作用。例如,如果我查询/users/@me/channels(应该是DM),我会从API获得401 Unauthorized响应。如果我从/users/@me/guilds收集一个公会id,然后尝试用/guilds/guild.id/channels列出其中的频道,这是一样的。

真的很奇怪的是,我确实拥有所需的所有范围(我想是这样,我没有采用RPC,因为我不认为这是我想做的事情所必需的)我无法弄清楚自己...同样奇怪的是,在OAuth授权屏幕上,我有两件事:

Read all messages

This app cannot read messages

它有点自相矛盾...... :(

你有任何想分享的想法吗?

谢谢!

注意:我使用的是Python,但我不认为它与此相关,因为有些端点可以使用我拥有的标头和标记......

这是我的“身份验证码”:

baseUrl = "https://discordapp.com/api"

def authorize():
    scopes = [
        "guilds",
        "email",
        "identify",
        "messages.read",
        "guilds.join",
        "gdm.join",
        "connections"
    ]
    urlAuthorize = "{}/oauth2/authorize?client_id={}&scope={}&response_type=code".format(baseUrl, clientid, ('+'.join(scopes)))
    pyperclip.copy(urlAuthorize)

    code = input("Code: ")
    return code

def getAccessToken(code):
    url = "{}/oauth2/token".format(baseUrl)

    params = {
        "client_id" : clientid,
        "client_secret" : clientsecret,
        "redirect_uri" : "http://localhost",
        "grant_type":"authorization_code",
        "code" : code,
    }

    req = requests.post(url, params = params)
    return json.loads(req.text)

以及与API请求相关的代码:

def getHeaders():
    return {
        "Authorization" : "{} {}".format("Bearer", config["accessToken"]),
        # "user-agent" : "DiscordBackup/0.0.1"
    } 

def getRequest(endpoint, asJson = True, additional = None):
    url = "{}/{}".format(baseUrl, endpoint)
    req = requests.get(url, headers = getHeaders())
    print()
    print(getHeaders())
    print(url)
    print(req.text)
    if asJson:
        return json.loads(req.text)
    else:
        return req.text

def getMe(): # this works
    endpoint = "users/@me"
    return getRequest(endpoint)

def getMyDMs(): # this gives me a code 401 Unauthorized
    endpoint = "/users/@me/channels"
    return getRequest(endpoint)
python api oauth discord
1个回答
0
投票

遇到这个问题时我遇到了这个帖子,说白了,没办法解决它。

messages.read权限适用于本地RPC服务器; https://discordapp.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes

但是,本地RPC服务器处于私有测试阶段,您必须注册/接受使用它。

我想创建一个DM导出器,但现在看起来不太可能。

© www.soinside.com 2019 - 2024. All rights reserved.