83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
// Discord OAuth2 Service
|
|
const DISCORD_API = 'https://discord.com/api/v10';
|
|
|
|
export function getDiscordAuthUrl() {
|
|
const params = new URLSearchParams({
|
|
client_id: process.env.DISCORD_CLIENT_ID,
|
|
redirect_uri: process.env.DISCORD_REDIRECT_URI,
|
|
response_type: 'code',
|
|
scope: 'identify guilds.members.read'
|
|
});
|
|
return `https://discord.com/oauth2/authorize?${params}`;
|
|
}
|
|
|
|
export async function exchangeCode(code) {
|
|
const response = await fetch(`${DISCORD_API}/oauth2/token`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/x-www-form-urlencoded'
|
|
},
|
|
body: new URLSearchParams({
|
|
client_id: process.env.DISCORD_CLIENT_ID,
|
|
client_secret: process.env.DISCORD_CLIENT_SECRET,
|
|
grant_type: 'authorization_code',
|
|
code,
|
|
redirect_uri: process.env.DISCORD_REDIRECT_URI
|
|
})
|
|
});
|
|
|
|
if (!response.ok) {
|
|
const error = await response.text();
|
|
throw new Error(`Failed to exchange code: ${error}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
export async function getDiscordUser(accessToken) {
|
|
const response = await fetch(`${DISCORD_API}/users/@me`, {
|
|
headers: {
|
|
Authorization: `Bearer ${accessToken}`
|
|
}
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error('Failed to get Discord user');
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
export async function getGuildMember(userId) {
|
|
const response = await fetch(
|
|
`${DISCORD_API}/guilds/${process.env.DISCORD_GUILD_ID}/members/${userId}`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN}`
|
|
}
|
|
}
|
|
);
|
|
|
|
if (!response.ok) {
|
|
if (response.status === 404) {
|
|
return null; // User not in guild
|
|
}
|
|
throw new Error('Failed to get guild member');
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
export function getUserRole(memberRoles) {
|
|
const adminRoleId = process.env.DISCORD_ADMIN_ROLE_ID;
|
|
const modRoleId = process.env.DISCORD_MOD_ROLE_ID;
|
|
|
|
if (memberRoles.includes(adminRoleId)) {
|
|
return 'superadmin';
|
|
}
|
|
if (memberRoles.includes(modRoleId)) {
|
|
return 'moderator';
|
|
}
|
|
return 'user';
|
|
}
|