Improved team system

This commit is contained in:
2023-05-11 19:46:18 +02:00
parent cde8e6c827
commit 51705f8651
22 changed files with 811 additions and 32 deletions

View File

@@ -13,7 +13,7 @@ export default defineEventHandler(async (event) => {
client_secret: config.discordSecret,
code: code,
grant_type: 'authorization_code',
redirect_uri: 'http://localhost:3000/api/auth',
redirect_uri: config.redirectURI,
scope: 'identify',
}).toString(),
headers: {

View File

@@ -1,4 +1,5 @@
import { ObjectId } from "mongodb";
import { applyUsername } from "~/server/utils/auth";
export default defineEventHandler(async (event) => {
const { type } = await readBody(event)
@@ -8,7 +9,8 @@ export default defineEventHandler(async (event) => {
const username = type === 'discord' ? auth.discord.username : auth.minecraft.username
await usersColl.updateOne({ _id: new ObjectId(auth._id) }, { $set: { username: username, useMinecraftUsername: type === 'discord' ? false : true } })
const newUser = await usersColl.findOneAndUpdate({ _id: new ObjectId(auth._id) }, { $set: { username: username, useMinecraftUsername: type === 'discord' ? false : true } }, { returnDocument: 'after' })
await applyUsername(newUser.value)
return { username: username }
return newUser.value
});

View File

@@ -1,9 +1,9 @@
export default defineEventHandler(async (event) => {
const auth = await getAuth(event)
const user = await getAuth(event)
const userResult = await $fetch('https://discord.com/api/users/@me', {
headers: {
authorization: `Bearer ${auth.accessToken}`
authorization: `Bearer ${user.accessToken}`
}
})
@@ -15,9 +15,12 @@ export default defineEventHandler(async (event) => {
username: userResult.username,
avatarHash: userResult.avatar || null
},
username: user.useMinecraftUsername ? user.minecraft.username : userResult.username
}
await coll.updateOne({ 'discord.id': userResult.id }, { $set: doc })
const newUser = await coll.findOneAndUpdate({ 'discord.id': userResult.id }, { $set: doc }, { returnDocument: 'after' })
applyUsername(newUser)
return doc.discord
});

View File

@@ -1,12 +1,16 @@
import { applyUsername } from "~/server/utils/auth";
export default defineEventHandler(async (event) => {
const auth = await getAuth(event)
const user = await getAuth(event)
if (!auth.minecraft.uuid) throw createError({ errorCode: 400, statusMessage: 'Geen Minecraft account is gekoppeld' })
const minecraftProfile = await $fetch(`https://sessionserver.mojang.com/session/minecraft/profile/${auth.minecraft.uuid}`)
const minecraftProfile = await $fetch(`https://sessionserver.mojang.com/session/minecraft/profile/${user.minecraft.uuid}`)
const usersColl = db.collection('users')
await usersColl.findOneAndUpdate({ 'minecraft.uuid': auth.minecraft.uuid }, { $set: { 'minecraft.username': minecraftProfile.name } })
const newUser = await usersColl.findOneAndUpdate({ 'minecraft.uuid': auth.minecraft.uuid }, { $set: { 'minecraft.username': minecraftProfile.name, username: user.useMinecraftUsername ? minecraftProfile.name : user.discord.username } }, { returnDocument: 'after' })
applyUsername(newUser.value)
return { username: minecraftProfile.name }
return newUser.value
});

View File

@@ -4,6 +4,7 @@ export default defineEventHandler(async (event) => {
const { teamId } = await readBody(event);
const user = await getAuth(event)
const config = useRuntimeConfig()
const teamsColl = db.collection('teams')
const usersColl = db.collection('users')
@@ -12,6 +13,11 @@ export default defineEventHandler(async (event) => {
if (!team.value) return createError({ statusCode: 500, statusMessage: 'Team niet gevonden'})
await $fetch(config.discordHost + '/team/addteammember', {
method: 'POST',
body: { voiceChannelId: team.value.voiceChannelId, textChannelId: team.value.textChannelId, discordId: user.discord.id }
})
await usersColl.updateOne({ _id: new ObjectId(user._id) }, { $set: { 'team.id': teamId, 'team.admin': false }})
return team

View File

@@ -6,6 +6,7 @@ export default defineEventHandler(async (event) => {
if (!verifyUsername(teamName)) return createError({ statusCode: 400, statusMessage: 'Team naam moet alfanumeriek zijn en mag maximaal 20 tekens lang zijn' })
const user = await getAuth(event)
const config = useRuntimeConfig()
if (user.team) return createError({ statusCode: 400, statusMessage: 'Gebruiker is al in een team' })
@@ -14,7 +15,12 @@ export default defineEventHandler(async (event) => {
if (await teamsColl.findOne({ name: { $regex: new RegExp(teamName, "i") } })) return createError({ statusCode: 400, statusMessage: 'Team naam bestaat al' })
const response = await teamsColl.insertOne({ name: teamName, color: teamColor, count: 1 })
const discordResponse = await $fetch(config.discordHost + '/team/createchannels', {
method: 'POST',
body: { name: teamName, discordId: user.discord.id }
})
const response = await teamsColl.insertOne({ name: teamName, color: teamColor, count: 1, textChannelId: discordResponse.textChannel.id, voiceChannelId: discordResponse.voiceChannel.id })
await usersColl.findOneAndUpdate({ 'discord.id': user.discord.id }, { $set: { 'team.id': response.insertedId.toString(), 'team.admin': true } })

View File

@@ -8,6 +8,9 @@ export default defineEventHandler(async (event) => {
if (!verifyUsername(name)) return createError({ statusCode: 400, statusMessage: 'Team naam moet alfanumeriek zijn en mag maximaal 20 tekens lang zijn' })
const user = await getAuth(event)
const config = useRuntimeConfig()
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Admin team rol vereist' })
const teamsColl = db.collection('teams')
@@ -15,6 +18,11 @@ export default defineEventHandler(async (event) => {
if (team.name !== name && await teamsColl.findOne({ name: { $regex: new RegExp(name, "i") } })) return createError({ statusCode: 400, statusMessage: 'Team naam bestaat al' })
await $fetch(config.discordHost + '/team/edit', {
method: 'POST',
body: { voiceChannelId: team.voiceChannelId, textChannelId: team.textChannelId, name: name }
})
await teamsColl.updateOne({ _id: new ObjectId(user.team.id) }, { $set: { name: name, color: color } })
return team

View File

@@ -3,14 +3,26 @@ import { ObjectId } from 'mongodb'
export default defineEventHandler(async (event) => {
const user = await getAuth(event)
const config = useRuntimeConfig()
const teamsColl = db.collection('teams')
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(user.team.id) }, { $inc: { count: -1 }})
const usersColl = db.collection('users')
await usersColl.findOneAndUpdate({ _id: new ObjectId(user._id) }, { $unset: { team: "" } })
await $fetch(config.discordHost + '/team/removeteammember', {
method: 'POST',
body: { voiceChannelId: team.value.voiceChannelId, textChannelId: team.value.textChannelId, discordId: user.discord.id }
})
if (team.value.count <= 1) {
await teamsColl.deleteOne({ _id: new ObjectId(user.team.id )})
await $fetch(config.discordHost + '/team/deletechannels', {
method: 'POST',
body: { voiceChannelId: team.voiceChannelId, textChannelId: team.textChannelId }
})
}
return team
});