Итак, я внедрил OAuth без каких-либо проблем, у меня есть токен доступа, и я могу запрашивать некоторые конечные точки (я пробовал /users/@me, /users/@me/guilds). Хотя большинство из них не работают. Например, если я запрашиваю /users/@me/channels (который должен быть DM), я получаю ответ 401 Unauthorized от API. То же самое, если я получу идентификатор гильдии из /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)
И код, связанный с запросом 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)
Подробнее здесь: https://stackoverflow.com/questions/436 ... with-oauth
Мобильная версия