Estoy desarrollando un bot de moderación para discord, estoy tratando de crear un plan pago y, por lo tanto, necesito que los usuarios inicien sesión con su cuenta discord con oauth2 para poder obtener los datos del usuario y saber qué servidor tiene el plan pago, chin. Entonces, por ahora, acabo de crear una URL oauth2 y configuré una redirección para https://bouncerbot.goatcode.it/index.html
luego, después de que el usuario haya iniciado sesión, tengo esta URL: https://bouncerbot.goatcode.it/index.html?code=nZauBH6wT0hxn8g8SsS1OwiDvN35nn&guild_id=872213710150713384&permissions=0 así que ahora quiero datos de usuario (foto de perfil, nombre de usuario, etc.) ¿cómo puedo ¿lo entiendo?
Esta es definitivamente más una pregunta de Oauth2 que una pregunta de Discord. Esta respuesta usará ejemplos de JS usando la biblioteca node-fetch para realizar solicitudes web y asume que está usando un backend express .
Primero, desea que el usuario autorice su cuenta con su ID de cliente y el alcance de identify . Cuando hagan clic en autorizar, se enviarán a su URI de redireccionamiento especificado ( https://example.com/redirect para este ejemplo).
Cuando sean redirigidos, habrá un parámetro GET de code en la URL en la que aterrizan, que debe tomar y enviar a la URL del token de Discord para obtener un token de acceso:
app.get('/redirect', async function (req, res) { // Check their GET params to get the code var code = req.query.code; // Make our POST body var body = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'grant_type': 'authorization_code', 'code': code, 'redirect_uri': 'https://example.com/redirect', }; // POST that to Discord var site = await fetch("https://discord.com/api/v9/oauth2/token", { method: 'POST', body: JSON.stringify(body), headers: {'Content-Type': 'application/x-www-form-urlencoded'}, }); // And parse the response var response = await site.json(); var accessToken = response['access_token']; res.send(`Access token: ${accessToken}`); }) Usando el token de acceso proporcionado en la respuesta de Discord, puede realizar una solicitud GET para obtener el usuario actual , usando un encabezado de Authorization de Bearer XXXXX (donde XXXXX es su token de acceso):
var site = await fetch("https://discord.com/api/v9/users/@me", { method: 'GET', headers: {'Authorization': `Bearer ${accessToken}`} }); var response = await site.json(); var username = response.username;Sin saber más sobre qué bibliotecas está utilizando, no puedo proporcionarle específicamente lo que necesitará para estas cosas, pero esa es una lista decente de ejemplos y los procesos que deberá seguir para obtener la información que desea.
Tengo un archivo similar que puede seguir.
import { CLIENT_ID, CLINET_SECRET, AUTHORIZATION_URL, REDIRECT_URL } from '../config/keys'; import React, { useEffect } from 'react'; import axios from 'axios'; const Auth = (props) => { const getUserGuilds = async (accessToken) => { // console.log(`Guild ${accessToken.data.token_type} ${accessToken.data.access_token}`); try { const response = await axios.get('https://discord.com/api/users/@me/guilds', { headers: { authorization: `${accessToken.data.token_type} ${accessToken.data.access_token}` } }); // console.log(response.data); return response.data; } catch (error) { console.log(error); } } const getUserInfo = async (accessToken) => { // console.log(accessToken); // console.log(`User ${accessToken.data.token_type} ${accessToken.data.access_token}`); try { const response = await axios.get('https://discord.com/api/users/@me', { headers: { authorization: `${accessToken.data.token_type} ${accessToken.data.access_token}` } }); // console.log(response.data); return response.data; } catch (error) { console.log(error); } } const getToken = async (code) => { try { const options = new URLSearchParams({ client_id: CLIENT_ID, client_secret: CLINET_SECRET, code, grant_type: 'authorization_code', redirect_uri: REDIRECT_URL, scope: 'identify guilds', }); const result = await axios.post('https://discord.com/api/oauth2/token', options); return result; } catch (error) { console.log(error); } } const getInfo = async (code) => { const accessToken = await getToken(code); const userInfo = await getUserInfo(accessToken); const guildInfo = await getUserGuilds(accessToken); console.log({ userInfo, guildInfo }); } useEffect(() => { const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); // console.log(params); if (!params.code) return; getInfo(params.code); }); return ( <div className="Auth"> <br /> <a className="btn" href={AUTHORIZATION_URL} >Login with discord</a> </div> ) } export default Auth;Según tengo entendido, lo más probable es que quiera hacer un sistema de inicio de sesión y quieras hacerlo con discord, puedes consultar este recurso. https://www.youtube.com/watch?v=tSS8VKwwjp0