Discord API 401 未经 OAuth 授权

Tho*_*ski 5 python api oauth discord

简单的问题:我正在尝试使用 Discord API 来备份服务器(或公会,如果您使用官方术语)上的所有消息。

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

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

阅读所有消息

此应用程序无法读取消息

它有点反驳自己......:(

您有什么想法想分享吗?

谢谢!

注意:我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

以及与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)
Run Code Online (Sandbox Code Playgroud)

小智 4

我是在遇到这个问题的时候看到这个帖子的,说白了就是没有办法解决。

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

但是,本地 RPC 服务器处于内测阶段,您必须注册/获得接受才能使用它。

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