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
+ }
}