From 3ab10bf7a0a71210072695fc10e45cc846e02df3 Mon Sep 17 00:00:00 2001 From: Lars Haukland Date: Sat, 10 Jan 2026 00:52:45 +0100 Subject: [PATCH 1/2] Added uib command to end TA role --- src/commands/uib/endta.ts | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/commands/uib/endta.ts diff --git a/src/commands/uib/endta.ts b/src/commands/uib/endta.ts new file mode 100644 index 0000000..757e09a --- /dev/null +++ b/src/commands/uib/endta.ts @@ -0,0 +1,60 @@ +import { SlashCommandBuilder } from "@discordjs/builders"; +import { CommandInteraction } from "discord.js"; + +import { DiscordClient, SlashCommandHandler } from "../../client"; +import { getCourse } from "../../utils/courses"; +import logger from "../../utils/logger"; + +export default class EndTaCommand extends SlashCommandHandler { + builder = new SlashCommandBuilder() + .setName("sluttGruppeleder") + .setDescription("Remove me as a group leader for a course") + .addStringOption((option) => option.setName("subject").setDescription("Subject to end TA status in").setRequired(true)); + + async handle(interaction: CommandInteraction, _client: DiscordClient): Promise { + const inputSubject = interaction.options.getString("subject", true).toUpperCase().trim(); + const courseId = inputSubject.toLowerCase(); + + const course = await getCourse(inputSubject); + if (!course) { + return interaction.reply({ + content: `Sorry, no course with the code ${inputSubject} found... try again`, + ephemeral: true, + }); + } + + const guild = interaction.guild; + if (!guild) { + logger.error("Command was somehow performed outside of guild"); + return; + } + const user = interaction.member; + if (!(user instanceof GuildMember)) { + logger.error("User is somehow not a guild member"); + return; + } + + let role: Role; + if (!guild.roles.cache.some((role) => role.name === `gruppeleder-${courseId}`)) { + logger.error({ + message: `Could not get role for ${courseId}`, + }); + return interaction.reply({ + content: `It seems no one is a TA in this course, please make sure you wrote it correctly or tell an admin`, + ephemeral: true, + }); + } else { + role = guild.roles.cache.find((role) => role.name === `gruppeleder-${courseId}`); + } + + if (!user.roles.cache.has(role.id)) { + return interaction.reply(`You're not a TA in ${courseId}`); + } else { + await user.roles.remove(role); + + logger.info(`Removed ${user.displayName} as a TA from ${courseId}`); + + return interaction.reply(`You are now no longer a TA in ${courseId}: ${course.name_en}`); + } + } +} From 8f7e763cc85695facf529ee856acc2a626decc98 Mon Sep 17 00:00:00 2001 From: Lars Haukland Date: Sat, 10 Jan 2026 02:10:19 +0100 Subject: [PATCH 2/2] Fixed command lowercase plus import --- src/commands/uib/endta.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/commands/uib/endta.ts b/src/commands/uib/endta.ts index 757e09a..c81e507 100644 --- a/src/commands/uib/endta.ts +++ b/src/commands/uib/endta.ts @@ -1,5 +1,5 @@ import { SlashCommandBuilder } from "@discordjs/builders"; -import { CommandInteraction } from "discord.js"; +import { CommandInteraction, GuildMember} from "discord.js"; import { DiscordClient, SlashCommandHandler } from "../../client"; import { getCourse } from "../../utils/courses"; @@ -7,7 +7,7 @@ import logger from "../../utils/logger"; export default class EndTaCommand extends SlashCommandHandler { builder = new SlashCommandBuilder() - .setName("sluttGruppeleder") + .setName("sluttgruppeleder") .setDescription("Remove me as a group leader for a course") .addStringOption((option) => option.setName("subject").setDescription("Subject to end TA status in").setRequired(true)); @@ -34,8 +34,8 @@ export default class EndTaCommand extends SlashCommandHandler { return; } - let role: Role; - if (!guild.roles.cache.some((role) => role.name === `gruppeleder-${courseId}`)) { + const role = guild.roles.cache.find((role) => role.name === `gruppeleder-${courseId}`); + if (!role) { logger.error({ message: `Could not get role for ${courseId}`, }); @@ -43,8 +43,6 @@ export default class EndTaCommand extends SlashCommandHandler { content: `It seems no one is a TA in this course, please make sure you wrote it correctly or tell an admin`, ephemeral: true, }); - } else { - role = guild.roles.cache.find((role) => role.name === `gruppeleder-${courseId}`); } if (!user.roles.cache.has(role.id)) {