From 637f0826dbb9e5b15cf8c5421093097727efe9ec Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Sat, 20 Dec 2025 20:12:27 +0100 Subject: [PATCH] feat: conditionally assign student and class roles to new members if returning, otherwise assign visitor role. --- src/events/guildMemberAdd.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/events/guildMemberAdd.ts b/src/events/guildMemberAdd.ts index f34a5f4..27241f1 100644 --- a/src/events/guildMemberAdd.ts +++ b/src/events/guildMemberAdd.ts @@ -1,6 +1,7 @@ import { Events } from "discord.js"; import type { Event } from "@lib/types"; import { config } from "@lib/config"; +import { userService } from "@modules/user/user.service"; // Visitor role const event: Event = { @@ -8,11 +9,25 @@ const event: Event = { execute: async (member) => { console.log(`👤 New member joined: ${member.user.tag} (${member.id})`); try { - await member.roles.add(config.visitorRole); - console.log(`Assigned visitor role to ${member.user.tag}`); + const user = await userService.getUserById(member.id); + + if (user && user.class) { + console.log(`🔄 Returning student detected: ${member.user.tag}`); + await member.roles.remove(config.visitorRole); + await member.roles.add(config.studentRole); + + if (user.class.roleId) { + await member.roles.add(user.class.roleId); + console.log(`Restored class role ${user.class.name} to ${member.user.tag}`); + } + console.log(`Restored student role to ${member.user.tag}`); + } else { + await member.roles.add(config.visitorRole); + console.log(`Assigned visitor role to ${member.user.tag}`); + } console.log(`User Roles: ${member.roles.cache.map(role => role.name).join(", ")}`); } catch (error) { - console.error(`Failed to assign visitor role to ${member.user.tag}:`, error); + console.error(`Failed to handle role assignment for ${member.user.tag}:`, error); } }, };