実現したいこと
discord.pyでoauth2を機能させたい
前提
discord.pyでoauth2を機能させたいです
発生している問題・エラーメッセージ
"GET /oauth2_callback?error=invalid_scope&error_description=The+requested+scope+is+invalid,+unknown,+or+malformed. HTTP/1.1" 200 -
該当のソースコード
python
1from threading import Thread 2from flask import Flask, redirect, request, session, url_for 3import requests 4 5app = Flask(__name__) 6 7# Discord OAuth2設定 8client_id = 'YOUR_CLIENT_ID' 9client_secret = 'YOUR_CLIENT_SECRET' 10redirect_uri = 'https://localhost:8080/oauth2_callback' 11scope = 'identify guilds guilds.member guilds.join' 12 13# セッションシークレットキー 14app.secret_key = 'YOUR_ACTUAL_SECRET_KEY' 15 16# Discord OAuth2の認証URL 17authorize_url = f'https://discord.com/api/oauth2/authorize?client_id={client_id}&scope={"%20".join(scope)}&redirect_uri={redirect_uri}&response_type=code' 18 19@app.route('/') 20def home(): 21 return "Welcome to your Flask app!" 22 23@app.route('/oauth2_login') 24def oauth2_login(): 25 # Discord OAuth2認証の認証URLにリダイレクト 26 return redirect(authorize_url) 27 28@app.route('/oauth2_callback') 29def oauth2_callback(): 30 auth_code = request.args.get('code') 31 32 token_url = 'https://discord.com/api/oauth2/token' 33 token_data = { 34 'client_id': client_id, 35 'client_secret': client_secret, 36 'grant_type': 'authorization_code', 37 'code': auth_code, 38 'redirect_uri': redirect_uri, 39 } 40 41 response = requests.post(token_url, data=token_data) 42 if response.status_code != 200: 43 return "トークン取得に失敗しました。" 44 45 response_data = response.json() 46 access_token = response_data.get('access_token') 47 48 # Discord APIを使用してユーザー情報を取得 49 user_url = 'https://discord.com/api/v10/users/@me' 50 headers = { 51 'Authorization': f'Bearer {access_token}', 52 } 53 user_response = requests.get(user_url, headers=headers) 54 if user_response.status_code != 200: 55 return "ユーザー情報の取得に失敗しました。" 56 57 user_data = user_response.json() 58 59 # ユーザー情報をコンソールに表示 60 print(user_data) 61 62 # ユーザー情報をHTMLで表示または他の処理を行うことができます 63 return f"認証成功!ユーザー名: {user_data['username']}" 64 65def run(): 66 app.run(host='0.0.0.0', port=8080) 67 68def keep_alive(): 69 t = Thread(target=run) 70 t.start() 71 72if __name__ == "__main__": 73 keep_alive() 74
試したこと
scopeの書き方を
python
1scope = ['bot', 'identify', 'guilds', 'guilds.join']
python
1scope = ['identify', 'guilds', 'guilds.member', 'guilds.join']v
等の書き方に変えたりしました
補足情報(FW/ツールのバージョンなど)
python v3.10.11
discord.py v2.3.2
flask v2.3.3
requests v2.31.0

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/09/27 15:12 編集