В общем мне нужен следующий функционал, при переходе по ссылке, пользователь нажимает кнопку авторизоваться и попадает сразу на мои сервера их 3 шт , но тест провожу пока на 1, но в коде ловлю ошибки по запросу 401 и уже который день не могу понять в чем дело
import httpx
from quart import Quart, redirect, request
app = Quart(__name__)
CLIENT_ID = "тут мой клиент ид"
CLIENT_SECRET = "тут мой клиентский секрет"
SERVER_ID = "тут мой ид сервера на который над вступить"
async def request_access_token(code):
async with httpx.AsyncClient() as client:
response = await client.post(
"https://discord.com/api/oauth2/token",
data={
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"code": code,
"grant_type": "authorization_code",
"redirect_uri": "http://localhost:5000/redirect",
"scope": "identify+guilds.join",
}
)
return response.json()
async def join_server(access_token):
headers = {"Authorization": f"Bearer {access_token}"}
# Выведем токен доступа в консоль
print("Access Token:", access_token)
# Получаем информацию о текущем пользователе
async with httpx.AsyncClient() as client:
user_info_response = await client.get("https://discord.com/api/users/@me", headers=headers)
if user_info_response.status_code != 200:
print("Код состояния ответа при получении информации о пользователе:", user_info_response.status_code)
return False
user_info = user_info_response.json()
user_id = user_info.get("id")
# Присоединение пользователя к серверу
async with httpx.AsyncClient() as client:
response = await client.put(f"https://discord.com/api/v10/guilds/{SERVER_ID}/members/{user_id}",
headers=headers)
if response.status_code != 201:
print("Код состояния ответа при добавлении пользователя на сервер:", response.status_code)
return False
return True
@app.route("/")
async def home():
return "Привет, это домашняя страница!"
@app.route("/login")
async def login():
auth_url = (
"https://discord.com/api/oauth2/authorize"
f"?client_id={CLIENT_ID}"
"&redirect_uri=http://localhost:5000/redirect"
"&response_type=code"
"&scope=identify+guilds.join"
f"&guild_id={SERVER_ID}"
)
return redirect(auth_url)
@app.route("/redirect")
async def redirect_handler():
code = request.args.get("code")
# Обмен кода на токен
token_response = await request_access_token(code)
access_token = token_response.get("access_token")
if access_token:
# Присоединение пользователя к серверу
join_response = await join_server(access_token)
if join_response:
return "Пользователь успешно добавлен на сервер!"
else:
print("Не удалось добавить пользователя на сервер")
return "Не удалось добавить пользователя на сервер", 500
else:
return "Не удалось получить токен доступа", 500
if __name__ == "__main__":
app.run(debug=True)