快速提问:我尝试使用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授权屏幕上,我有两件事情,这也很奇怪:
它有点反对...... :(
您有任何想要分享的想法吗?
谢谢!
注意:我使用的是Python,但我不认为它与此相关,因为有些端点可以使用我拥有的标题和标记...
这是我的#34;身份验证码":
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)
答案 0 :(得分:0)
遇到此问题时,我碰到了这篇文章,说白了,没有办法解决。
messages.read
权限用于本地RPC服务器; https://discordapp.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes
但是,本地RPC服务器处于私有Beta中,您必须先注册/接受才能使用。
我想创建一个DM导出器,但是现在看来不太可能。