From 0588dd1c45299ae610cae57b351c2ce0e8688e8e Mon Sep 17 00:00:00 2001 From: Xeovalyte Date: Thu, 15 Jun 2023 16:55:23 +0200 Subject: [PATCH] feat: Added set default functions and refresh discord data --- webv2/pages/index.vue | 48 ++++++++++++++++++++-- webv2/server/api/auth.ts | 20 +-------- webv2/server/api/users/[id]/discord.get.ts | 25 +++++++++++ webv2/types/global.d.ts | 19 +++++++++ 4 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 webv2/server/api/users/[id]/discord.get.ts diff --git a/webv2/pages/index.vue b/webv2/pages/index.vue index 4dd5827..358a12d 100644 --- a/webv2/pages/index.vue +++ b/webv2/pages/index.vue @@ -32,10 +32,10 @@
- + Set Default - + Refresh Data
@@ -57,7 +57,7 @@
- + Set Default @@ -129,4 +129,46 @@ const refreshMinecraftData = async () => { disableButtons.value = false } + +const refreshDiscordData = async () => { + disableButtons.value = true + + try { + const response: any = await $fetch('/api/users/@me/discord') + + user.value.discord = response + + useToast().add({ title: 'Successfully refreshed Discord data', color: 'green' }) + } catch (e: any) { + console.error(e) + + useToast().add({ title: e.statusMessage, color: 'red' }) + } + + disableButtons.value = false +} + +const setDefaultUsername = async (usernameType: string) => { + disableButtons.value = true + + try { + const response = await $fetch('/api/users/@me/username', { + method: 'PUT', + body: { + usernameType + } + }) + + user.value.usernameType = usernameType + user.value.username = response + + useToast().add({ title: 'Successfully updated username', color: 'green' }) + } catch (e: any) { + console.error(e) + + useToast().add({ title: e.statusMessage, color: 'red' }) + } + + disableButtons.value = false +} diff --git a/webv2/server/api/auth.ts b/webv2/server/api/auth.ts index bad4e7b..25c0328 100644 --- a/webv2/server/api/auth.ts +++ b/webv2/server/api/auth.ts @@ -8,24 +8,6 @@ type AccessTokenResponse = { scope: string } -type DiscordUser = { - id: string, - username: string, - discriminator: string, - avatar: string, - bot?: boolean, - system?: boolean, - mfa_enabled?: boolean, - banner?: string, - accent_color?: number, - locale?: string, - verified?: boolean, - email?: string, - flags?: number, - premium_type?: number, - public_flags?: number -} - export default defineEventHandler(async (event) => { const { code }: { code?: string } = getQuery(event) @@ -67,7 +49,7 @@ export default defineEventHandler(async (event) => { $set: { discord: { id: authorizationResponse.id, - username: authorizationResponse.username, + username: authorizationResponse.global_name ?? authorizationResponse.username, avatarHash: authorizationResponse.avatar } }, diff --git a/webv2/server/api/users/[id]/discord.get.ts b/webv2/server/api/users/[id]/discord.get.ts new file mode 100644 index 0000000..f431acf --- /dev/null +++ b/webv2/server/api/users/[id]/discord.get.ts @@ -0,0 +1,25 @@ +export default defineEventHandler(async (event) => { + const userId: string = event.context.params ? event.context.params.id : '@me' + + const user = await getUser(userId, event) + const auth = getAuth(event) + + try { + const authorizationResponse: DiscordUser = await $fetch('https://discord.com/api/users/@me', { + headers: { + authorization: `Bearer ${auth.accessToken}` + } + }) + + user.discord.username = authorizationResponse.global_name ?? authorizationResponse.username + user.discord.avatarHash = authorizationResponse.avatar + + await applyUsername(user) + } catch (e) { + console.error('Failed to update document', e) + + throw createError('Failed to update document') + } + + return user.discord +}) diff --git a/webv2/types/global.d.ts b/webv2/types/global.d.ts index 047ef14..8fae7bb 100644 --- a/webv2/types/global.d.ts +++ b/webv2/types/global.d.ts @@ -40,4 +40,23 @@ declare global { textChannelId: string, voiceChannelId: string } + + type DiscordUser = { + id: string, + username: string, + discriminator: string, + global_name: string, + avatar: string, + bot?: boolean, + system?: boolean, + mfa_enabled?: boolean, + banner?: string, + accent_color?: number, + locale?: string, + verified?: boolean, + email?: string, + flags?: number, + premium_type?: number, + public_flags?: number + } }