| 8 | }; |
| 9 | |
| 10 | export const giveAccess = async ( |
| 11 | code: string, |
| 12 | roles: string[], |
| 13 | GUILD_ID: string, |
| 14 | BOT_TOKEN: string, |
| 15 | DISCORD_ACCESS_KEY: string, |
| 16 | DISCORD_ACCESS_SECRET: string, |
| 17 | DISCORD_REDIRECT_URI: string, |
| 18 | ) => { |
| 19 | const oauth = new DiscordOauth2({ |
| 20 | clientId: DISCORD_ACCESS_KEY, |
| 21 | clientSecret: DISCORD_ACCESS_SECRET, |
| 22 | redirectUri: DISCORD_REDIRECT_URI, |
| 23 | }); |
| 24 | |
| 25 | console.log(DISCORD_ACCESS_KEY, DISCORD_ACCESS_SECRET, DISCORD_REDIRECT_URI); |
| 26 | const data = { |
| 27 | client_id: DISCORD_ACCESS_KEY, |
| 28 | client_secret: DISCORD_ACCESS_SECRET, |
| 29 | code, |
| 30 | grant_type: 'authorization_code', |
| 31 | redirect_uri: DISCORD_REDIRECT_URI, |
| 32 | scope: 'identify', |
| 33 | }; |
| 34 | const options = { |
| 35 | method: 'POST', |
| 36 | headers: { 'content-type': 'application/x-www-form-urlencoded' }, |
| 37 | data: qs.stringify(data), |
| 38 | url: 'https://discord.com/api/oauth2/token', |
| 39 | }; |
| 40 | const response = await axios(options); |
| 41 | |
| 42 | const user = await oauth.getUser(response.data.access_token); |
| 43 | |
| 44 | await oauth.addMember({ |
| 45 | accessToken: response.data.access_token, |
| 46 | botToken: BOT_TOKEN, |
| 47 | guildId: GUILD_ID, |
| 48 | userId: user.id, |
| 49 | roles: [...roles.filter((x) => x !== '0')], |
| 50 | }); |
| 51 | |
| 52 | const DISCORD_CREDENTIALS = Buffer.from( |
| 53 | `${DISCORD_ACCESS_KEY}:${DISCORD_ACCESS_SECRET}`, |
| 54 | ).toString('base64'); |
| 55 | |
| 56 | // revole accessToken |
| 57 | await fetch( |
| 58 | `https://discord.com/api/v8/oauth2/token/revoke?token=${response.data.access_token}`, |
| 59 | { |
| 60 | method: 'POST', |
| 61 | headers: { |
| 62 | Authorization: `Basic ${DISCORD_CREDENTIALS}`, |
| 63 | }, |
| 64 | }, |
| 65 | ); |
| 66 | return { discordId: user.id, discordUsername: user.username }; |
| 67 | }; |