diff --git a/server/api/auth/me.get.ts b/server/api/auth/me.get.ts index a96e36d..ee779ef 100644 --- a/server/api/auth/me.get.ts +++ b/server/api/auth/me.get.ts @@ -4,13 +4,14 @@ export default defineEventHandler(async (event): Promise => { const config = useRuntimeConfig(event); const auth = enforceLoggedIn(event); - const grpc = useAccountGrpc(event); - const data = await grpc.getUserData({ pid: auth.pid }); + const apiGrpc = useApiGrpcWithToken(event, auth.token); + const data = await apiGrpc.getUserData({ }); return { pid: data.pid, username: data.username, accessLevel: data.accessLevel, serverAccessLevel: data.serverAccessLevel as any, + discordId: data.connections?.discord?.id ?? null, mii: data.mii ? { imageUrl: `${config.public.cdnBaseUrl}/mii/${data.pid}/normal_face.png`, diff --git a/server/utils/discord.ts b/server/utils/discord.ts index 061adad..0e36fe0 100644 --- a/server/utils/discord.ts +++ b/server/utils/discord.ts @@ -39,11 +39,13 @@ export function useDiscord(event: H3Event): DiscordInstance | null { return discordInstance; } -export async function assignDiscordMemberSupporterRole(discord: DiscordInstance, memberId: string, roleId: string) { +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)); } - await discord.rest.put(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId)); + if (roleId) { + await discord.rest.put(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId)); + } } export async function assignDiscordMemberTesterRole(discord: DiscordInstance, memberId: string) { @@ -52,11 +54,13 @@ export async function assignDiscordMemberTesterRole(discord: DiscordInstance, me } } -export async function removeDiscordMemberSupporterRole(discord: DiscordInstance, memberId: string, roleId: string) { +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)); } - await discord.rest.delete(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId)); + if (roleId) { + await discord.rest.delete(Routes.guildMemberRole(discord.ids.guildId, memberId, roleId)); + } } export async function removeDiscordMemberTesterRole(discord: DiscordInstance, memberId: string) { diff --git a/shared/api-types.ts b/shared/api-types.ts index 739f163..6c9d6d3 100644 --- a/shared/api-types.ts +++ b/shared/api-types.ts @@ -5,6 +5,7 @@ export type GetApiAuthMe = { username: string; accessLevel: number; serverAccessLevel: 'dev' | 'test' | 'prod'; + discordId: string | null; mii: { imageUrl: string; name: string; diff --git a/src/pages/account/index.vue b/src/pages/account/index.vue index bfdcd1f..32ac6d7 100644 --- a/src/pages/account/index.vue +++ b/src/pages/account/index.vue @@ -47,6 +47,18 @@ async function linkDiscord() { alert(err.code); } } + +async function unlinkDiscord() { + try { + await apiFetch('/api/account/discord-unlink', { + method: 'POST' + }); + await refresh(); + } catch (error: unknown) { + const err = getApiError(error); + alert(err.code); + } +}