mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-09-15 20:36:21 -05:00
82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { REST } from '@discordjs/rest';
|
|
import { Routes } from 'discord-api-types/v10';
|
|
import type { H3Event } from 'h3';
|
|
|
|
export type DiscordUser = {
|
|
id: string;
|
|
username: string;
|
|
discriminator: string;
|
|
avatar?: string;
|
|
};
|
|
|
|
type DiscordIds = { guildId: string; supporterRoleId: string | null; testerRoleId: string | null };
|
|
|
|
type DiscordInstance = {
|
|
rest: REST;
|
|
clientId: string;
|
|
clientSecret: string;
|
|
baseUrl: string;
|
|
ids: DiscordIds;
|
|
makeCallbackUrl: () => string;
|
|
};
|
|
|
|
let discordInstance: DiscordInstance | null = null;
|
|
|
|
export function useDiscord(event: H3Event): DiscordInstance | null {
|
|
if (!discordInstance) {
|
|
const config = useRuntimeConfig(event);
|
|
if (config.discordBotToken && config.discordGuildId && config.discordClientId && config.discordClientSecret) {
|
|
discordInstance = {
|
|
rest: new REST({ version: '10' }).setToken(config.discordBotToken),
|
|
baseUrl: 'https://discord.com/api/v10',
|
|
clientId: config.discordClientId,
|
|
clientSecret: config.discordClientSecret,
|
|
ids: {
|
|
guildId: config.discordGuildId,
|
|
testerRoleId: config.discordTesterRoleId ? config.discordTesterRoleId : null,
|
|
supporterRoleId: config.discordSupporterRoleId ? config.discordSupporterRoleId : null
|
|
},
|
|
makeCallbackUrl() {
|
|
return new URL('/account/connect/discord', config.public.baseUrl).toString();
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
return discordInstance;
|
|
}
|
|
|
|
export async function assignDiscordMemberSupporterRole(discord: DiscordInstance, memberId: string, roleId: string | null) {
|
|
if (discord.ids.supporterRoleId) {
|
|
await discord.rest.put(Routes.guildMemberRole(discord.ids.guildId, memberId, discord.ids.supporterRoleId));
|
|
}
|
|
if (roleId) {
|
|
await discord.rest.put(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId));
|
|
}
|
|
}
|
|
|
|
export async function assignDiscordMemberTesterRole(discord: DiscordInstance, memberId: string) {
|
|
if (discord.ids.testerRoleId) {
|
|
await discord.rest.put(Routes.guildMemberRole(discord.ids.guildId, memberId, discord.ids.testerRoleId));
|
|
}
|
|
}
|
|
|
|
export async function removeDiscordMemberSupporterRole(discord: DiscordInstance, memberId: string, roleId: string | null) {
|
|
if (discord.ids.supporterRoleId) {
|
|
await discord.rest.delete(Routes.guildMemberRole(discord.ids.guildId, memberId, discord.ids.supporterRoleId));
|
|
}
|
|
if (roleId) {
|
|
await discord.rest.delete(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId));
|
|
}
|
|
}
|
|
|
|
export async function removeDiscordMemberTesterRole(discord: DiscordInstance, memberId: string) {
|
|
if (discord.ids.testerRoleId) {
|
|
await discord.rest.delete(Routes.guildMemberRole(discord.ids.guildId, memberId, discord.ids.testerRoleId));
|
|
}
|
|
}
|
|
|
|
export async function getDiscordUser(discord: DiscordInstance, userId: string) {
|
|
return await discord.rest.get(Routes.user(userId)) as DiscordUser;
|
|
}
|