feat: add discord unlinking

This commit is contained in:
mrjvs
2026-08-12 15:07:48 +02:00
parent b752ba4810
commit 931ab7a9e2
4 changed files with 34 additions and 7 deletions

View File

@@ -4,13 +4,14 @@ export default defineEventHandler(async (event): Promise<GetApiAuthMe> => {
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`,

View File

@@ -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) {

View File

@@ -5,6 +5,7 @@ export type GetApiAuthMe = {
username: string;
accessLevel: number;
serverAccessLevel: 'dev' | 'test' | 'prod';
discordId: string | null;
mii: {
imageUrl: string;
name: string;

View File

@@ -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);
}
}
</script>
<template>
@@ -65,7 +77,16 @@ async function linkDiscord() {
Dev
</button>
</div>
<button @click="linkDiscord()">
<button
v-if="profile.discordId"
@click="unlinkDiscord()"
>
Unlink {{ profile.discordId }} discord
</button>
<button
v-else
@click="linkDiscord()"
>
Link discord
</button>
<button