feat: Added set default functions and refresh discord data
Some checks failed
Build and Deploy / Deploy Web (push) Failing after 1s
Build and Deploy / Deploy Discord Bot (push) Failing after 0s

This commit is contained in:
Xeovalyte 2023-06-15 16:55:23 +02:00
parent c433e25fba
commit 0588dd1c45
4 changed files with 90 additions and 22 deletions

View File

@ -32,10 +32,10 @@
</div> </div>
</div> </div>
<div class="space-x-3"> <div class="space-x-3">
<UButton v-if="user.usernameType === 'minecraft'" :disabled="disableButtons"> <UButton v-if="user.usernameType === 'minecraft'" :disabled="disableButtons" @click="setDefaultUsername('discord')">
Set Default Set Default
</UButton> </UButton>
<UButton variant="soft" :disabled="disableButtons"> <UButton variant="soft" :disabled="disableButtons" @click="refreshDiscordData">
Refresh Data Refresh Data
</UButton> </UButton>
</div> </div>
@ -57,7 +57,7 @@
</div> </div>
</div> </div>
<div class="space-x-3"> <div class="space-x-3">
<UButton v-if="user.usernameType === 'discord'" :disabled="disableButtons"> <UButton v-if="user.usernameType === 'discord'" :disabled="disableButtons" @click="setDefaultUsername('minecraft')">
Set Default Set Default
</UButton> </UButton>
<UButton variant="soft" :disabled="disableButtons" @click="refreshMinecraftData"> <UButton variant="soft" :disabled="disableButtons" @click="refreshMinecraftData">
@ -129,4 +129,46 @@ const refreshMinecraftData = async () => {
disableButtons.value = false 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
}
</script> </script>

View File

@ -8,24 +8,6 @@ type AccessTokenResponse = {
scope: string 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) => { export default defineEventHandler(async (event) => {
const { code }: { code?: string } = getQuery(event) const { code }: { code?: string } = getQuery(event)
@ -67,7 +49,7 @@ export default defineEventHandler(async (event) => {
$set: { $set: {
discord: { discord: {
id: authorizationResponse.id, id: authorizationResponse.id,
username: authorizationResponse.username, username: authorizationResponse.global_name ?? authorizationResponse.username,
avatarHash: authorizationResponse.avatar avatarHash: authorizationResponse.avatar
} }
}, },

View File

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

View File

@ -40,4 +40,23 @@ declare global {
textChannelId: string, textChannelId: string,
voiceChannelId: 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
}
} }