From 63166b602a097e72a72686445c2f4d4e2864c255 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Thu, 5 Jun 2025 10:18:52 -0700 Subject: [PATCH] added chrom --- apps/discord-server/modules/discord.ts | 2 +- apps/discord-server/routes/member.ts | 9 +++-- apps/hub-server/modules/chron.ts | 21 +++++++++-- .../mail-templates/CourseCompleted.tsx | 2 +- .../event/_components/ParticipantModal.tsx | 36 ++++++------------- .../admin/user/[id]/_components/forms.tsx | 7 ---- apps/hub/app/_components/Table.tsx | 7 ++++ apps/hub/app/api/discord-redirect/route.ts | 22 ++++++++++-- apps/hub/helper/discord.ts | 2 +- 9 files changed, 65 insertions(+), 43 deletions(-) diff --git a/apps/discord-server/modules/discord.ts b/apps/discord-server/modules/discord.ts index 2445a20f..95bc7052 100644 --- a/apps/discord-server/modules/discord.ts +++ b/apps/discord-server/modules/discord.ts @@ -1,7 +1,7 @@ import { Client, GatewayIntentBits } from "discord.js"; const client = new Client({ - intents: [GatewayIntentBits.Guilds], + intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers], }); const token = process.env.DISCORD_BOT_TOKEN; diff --git a/apps/discord-server/routes/member.ts b/apps/discord-server/routes/member.ts index 4a2ddc99..f6278887 100644 --- a/apps/discord-server/routes/member.ts +++ b/apps/discord-server/routes/member.ts @@ -51,12 +51,15 @@ const handleRoleChange = (action: "add" | "remove") => async (req: Request, res: ? roleIds.filter((id: string) => !currentRoleIds.includes(id)) : roleIds.filter((id: string) => currentRoleIds.includes(id)); - console.log(`Attempting to ${action} roles:`, filteredRoleIds, roleIds); + console.log( + `Attempting to ${action} roles: ${filteredRoleIds.join(", ")} to member ${member.nickname || member.user.username}`, + ); // Option to skip if no roles to add/remove - /* if (filteredRoleIds.length === 0) { + if (filteredRoleIds.length === 0) { + console.log(`No roles to ${action}`); res.status(200).json({ message: `No roles to ${action}` }); return; - } */ + } await member.roles[action](roleIds); res.status(200).json({ message: `Roles ${action}ed successfully` }); diff --git a/apps/hub-server/modules/chron.ts b/apps/hub-server/modules/chron.ts index da56e3e8..2caf14df 100644 --- a/apps/hub-server/modules/chron.ts +++ b/apps/hub-server/modules/chron.ts @@ -1,10 +1,11 @@ import { getMoodleCourseCompletionStatus, getMoodleUserById } from "./moodle"; import { CronJob } from "cron"; -import { DISCORD_ROLES, prisma } from "@repo/db"; +import { DISCORD_ROLES, ParticipantLog, prisma } from "@repo/db"; import { sendCourseCompletedEmail } from "modules/mail"; import { handleParticipantFinished } from "modules/event"; import { eventCompleted } from "helper/events"; import { addRolesToMember, removeRolesFromMember } from "modules/discord"; +import { JsonValueType } from "@repo/db/zod"; const syncMoodleIds = async () => { try { @@ -122,9 +123,23 @@ const checkUnfinishedParticipants = async () => { if (completed) return; + if (!p.Event.discordRoleId) { + await prisma.participant.update({ + where: { + id: p.id, + }, + data: { + inscriptionWorkflowCompleted: true, + }, + }); + return; + } + console.log( + `User ${p.User.firstname} ${p.User.lastname} - ${p.User.publicId} did not finish event ${p.Event.name}`, + ); if (p.User.discordAccounts[0] && p.Event.discordRoleId) { await addRolesToMember(p.User.discordAccounts[0].discordId, [p.Event.discordRoleId]); - prisma.participant.update({ + await prisma.participant.update({ where: { id: p.id, }, @@ -135,7 +150,7 @@ const checkUnfinishedParticipants = async () => { event: "Discord-Rolle hinzugefügt", timestamp: new Date(), user: "system", - }, + } as ParticipantLog as any, }, }, }); diff --git a/apps/hub-server/modules/mail-templates/CourseCompleted.tsx b/apps/hub-server/modules/mail-templates/CourseCompleted.tsx index e09953da..fe8e8c25 100644 --- a/apps/hub-server/modules/mail-templates/CourseCompleted.tsx +++ b/apps/hub-server/modules/mail-templates/CourseCompleted.tsx @@ -117,7 +117,7 @@ const Template = ({ event, user }: { user: User; event: Event }) => (