From 452f986afc57b13b02eef985b275d16ce145eed1 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 10:00:22 +0100 Subject: [PATCH 1/9] Ignore CLI environment file --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0525895..ea9a990 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea -.env \ No newline at end of file +.env +WARP.md \ No newline at end of file From aad5ac4a3512229389cb5efaa322d3d1f25d1a12 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 10:00:28 +0100 Subject: [PATCH 2/9] Add example file for environment variables --- .env.example | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..588d65e --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +DISCORD_TOKEN= +GUILD_ID= +LOG_LEVEL=default +BM_TOKEN= +GITHUB_APP_KEY= +GITHUB_APP_CLIENT_ID= +BEARER= From 4f3216f10a2c893ece30e97e619a47339ed18fef Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 15:48:19 +0100 Subject: [PATCH 3/9] Register command warden --- commands/registry.go | 1 + commands/warden.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 commands/warden.go diff --git a/commands/registry.go b/commands/registry.go index 9cc3c06..310ec45 100644 --- a/commands/registry.go +++ b/commands/registry.go @@ -10,6 +10,7 @@ func NewRegistry() *Registry { r := &Registry{} r.RegisterCommands( Milpac(), + Warden(), AppsBetaDeploy(), Zulu(), S6ITCheck(), diff --git a/commands/warden.go b/commands/warden.go new file mode 100644 index 0000000..c41f9e8 --- /dev/null +++ b/commands/warden.go @@ -0,0 +1,15 @@ +package commands + +import ( + "fmt" + "strings" + "github.com/7cav/cavbot2/utils" + "github.com/bwmarrin/discordgo" +) + +const ROLE_NAME string = "Warden Verified" +const ROLE_NAME_ADMIN string = "Warden Admin" + +func Warden() Command { + +} From 8eba0bfc80a8a29b165c82c0dd74d182a7225905 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 15:49:49 +0100 Subject: [PATCH 4/9] Add command to add a single user to verified warden role --- commands/warden.go | 190 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) diff --git a/commands/warden.go b/commands/warden.go index c41f9e8..289824c 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -11,5 +11,195 @@ const ROLE_NAME string = "Warden Verified" const ROLE_NAME_ADMIN string = "Warden Admin" func Warden() Command { + var required int64 = discordgo.PermissionManageRoles + return Command{ + Definition: &discordgo.ApplicationCommand{ + Name: "warden", + Description: "Warden role management", + DefaultMemberPermissions: &required, + Options: []*discordgo.ApplicationCommandOption{ + { + Type: discordgo.ApplicationCommandOptionSubCommand, + Name: "add", + Description: "Add '" + ROLE_NAME + "' role to a user", + Options: []*discordgo.ApplicationCommandOption{ + { + Type: discordgo.ApplicationCommandOptionString, + Name: "discordname", + Description: "Discord username or nickname to match (partial allowed)", + Required: true, + }, + }, + }, + }, + }, + Handler: handleWarden, + } +} + +func handleWarden(session *discordgo.Session, interaction *discordgo.InteractionCreate) { + data := interaction.ApplicationCommandData() + if len(data.Options) == 0 { + utils.HandleError(session, interaction, "❌ Invalid warden command") + return + } + + sub := data.Options[0] + + if len(sub.Options) == 0 { + utils.HandleError(session, interaction, "❌ Missing discordname argument") + return + } + + query := sub.Options[0].StringValue() + guildID := interaction.GuildID + + if guildID == "" { + utils.HandleError(session, interaction, "❌ GUILD_ID not configured") + return + } + + if !checkIfRequestedUserHasPermission(session, interaction, guildID) { + return + } + + switch sub.Name { + case "add": + handleAddCommand(session, interaction, sub, guildID, query) + default: + utils.HandleError(session, interaction, "❌ Unknown subcommand") + } +} + +func handleAddCommand( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + sub *discordgo.ApplicationCommandInteractionDataOption, + guildID string, + query string, +) { + member := retrieveMemberByName(session, guildID, query) + if member == nil { + return + } + + roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) + if roleID == "" { + utils.HandleError(session, interaction, "❌ 'Warden Verified' role not found in guild") + return + } + + addRoleForQuery(session, interaction, guildID, query, roleID) + + err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: fmt.Sprintf("✅ Added '%s' role to %s#%s", ROLE_NAME,member.User.Username, member.User.Discriminator), + Flags: discordgo.MessageFlagsEphemeral, + }, + }) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to send confirmation: %v", err)) + return + } + utils.Info("Warden role assigned", "user", member.User.ID) +} + +func addRoleForQuery( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, + query string, + roleID string, +) string { + member := retrieveMemberByName(session, guildID, query) + if member == nil { + return fmt.Sprintf("❌ No member found matching '%s'", query) + } + + err := session.GuildMemberRoleAdd(guildID, member.User.ID, roleID) + if err != nil { + utils.Error("Failed to add role in bulk", "user", member.User.ID, "error", err) + return fmt.Sprintf("❌ Failed to add role to %s#%s: %v", member.User.Username, member.User.Discriminator, err) + } + + utils.Info("Warden role assigned (bulk)", "user", member.User.ID) + return fmt.Sprintf("✅ Added '%s' role to %s#%s", ROLE_NAME, member.User.Username, member.User.Discriminator) +} + +func retrieveMemberByName( + session *discordgo.Session, + guildID string, + query string, +) (*discordgo.Member) { + if strings.HasPrefix(query, "<@") && strings.HasSuffix(query, ">") { + userID := strings.TrimSuffix(strings.TrimPrefix(query, "<@"), ">") + member, _ := session.GuildMember(guildID, userID) + + if member != nil { + return member + } + } + + members, err := session.GuildMembersSearch(guildID, query, 10) + + if err != nil { + utils.Error("Failed to search members (silent)", "error", err) + return nil + } + + if len(members) != 1 { + return nil + } + + return members[0] +} + +func findRoleIDByName( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, + roleName string, +) (string) { + roles, err := session.GuildRoles(guildID) + + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve guild roles: %v", err)) + return "" + } + + for _, role := range roles { + if role.Name == roleName { + return role.ID + } + } + + return "" +} + +func checkIfRequestedUserHasPermission( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, +) bool { + adminRoleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME_ADMIN) + if adminRoleID == "" { + utils.HandleError(session, interaction, "❌ Admin role not found") + return false + } + + member, err := session.GuildMember(guildID, interaction.Member.User.ID) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve your member info: %v", err)) + return false + } + + for _, rid := range member.Roles { + if rid == adminRoleID { + return true + } + } + utils.HandleError(session, interaction, "❌ You do not have permission to use this command") + return false } From 6ce92d6ac0c02f2cb96759f6177862ea1a370723 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 15:52:50 +0100 Subject: [PATCH 5/9] Add command to remove a single user from verified warden role --- commands/warden.go | 145 +++++++++++++++++++++++++++++++-------------- 1 file changed, 99 insertions(+), 46 deletions(-) diff --git a/commands/warden.go b/commands/warden.go index 289824c..805fbaa 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -11,12 +11,12 @@ const ROLE_NAME string = "Warden Verified" const ROLE_NAME_ADMIN string = "Warden Admin" func Warden() Command { - var required int64 = discordgo.PermissionManageRoles + var required int64 = discordgo.PermissionManageRoles return Command{ Definition: &discordgo.ApplicationCommand{ Name: "warden", Description: "Warden role management", - DefaultMemberPermissions: &required, + DefaultMemberPermissions: &required, Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionSubCommand, @@ -31,6 +31,19 @@ func Warden() Command { }, }, }, + { + Type: discordgo.ApplicationCommandOptionSubCommand, + Name: "remove", + Description: "Remove '" + ROLE_NAME + "' role from a user", + Options: []*discordgo.ApplicationCommandOption{ + { + Type: discordgo.ApplicationCommandOptionString, + Name: "discordname", + Description: "Discord username or nickname to match (partial allowed)", + Required: true, + }, + }, + }, }, }, Handler: handleWarden, @@ -46,7 +59,7 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction sub := data.Options[0] - if len(sub.Options) == 0 { + if len(sub.Options) == 0 { utils.HandleError(session, interaction, "❌ Missing discordname argument") return } @@ -59,39 +72,41 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction return } - if !checkIfRequestedUserHasPermission(session, interaction, guildID) { - return - } + if !checkIfRequestedUserHasPermission(session, interaction, guildID) { + return + } - switch sub.Name { - case "add": - handleAddCommand(session, interaction, sub, guildID, query) - default: - utils.HandleError(session, interaction, "❌ Unknown subcommand") - } + switch sub.Name { + case "add": + handleAddCommand(session, interaction, sub, guildID, query) + case "remove": + handleRemoveCommand(session, interaction, sub, guildID, query) + default: + utils.HandleError(session, interaction, "❌ Unknown subcommand") + } } func handleAddCommand( - session *discordgo.Session, - interaction *discordgo.InteractionCreate, - sub *discordgo.ApplicationCommandInteractionDataOption, - guildID string, - query string, + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + sub *discordgo.ApplicationCommandInteractionDataOption, + guildID string, + query string, ) { - member := retrieveMemberByName(session, guildID, query) - if member == nil { - return - } + member := retrieveMemberByName(session, guildID, query) + if member == nil { + return + } - roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) - if roleID == "" { - utils.HandleError(session, interaction, "❌ 'Warden Verified' role not found in guild") - return - } + roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) + if roleID == "" { + utils.HandleError(session, interaction, "❌ 'Warden Verified' role not found in guild") + return + } addRoleForQuery(session, interaction, guildID, query, roleID) - err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Content: fmt.Sprintf("✅ Added '%s' role to %s#%s", ROLE_NAME,member.User.Username, member.User.Discriminator), @@ -105,6 +120,44 @@ func handleAddCommand( utils.Info("Warden role assigned", "user", member.User.ID) } +func handleRemoveCommand( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + sub *discordgo.ApplicationCommandInteractionDataOption, + guildID string, + query string, +) { + member := retrieveMemberByName(session, guildID, query) + if member == nil { + return + } + + roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) + if roleID == "" { + utils.HandleError(session, interaction, "❌ 'Warden Verified' role not found in guild") + return + } + + err := session.GuildMemberRoleRemove(guildID, member.User.ID, roleID) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to remove role: %v", err)) + return + } + + err = session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: fmt.Sprintf("✅ Removed '%s' role from %s#%s", ROLE_NAME, member.User.Username, member.User.Discriminator), + Flags: discordgo.MessageFlagsEphemeral, + }, + }) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to send confirmation: %v", err)) + return + } + utils.Info("Warden role removed", "user", member.User.ID) +} + func addRoleForQuery( session *discordgo.Session, interaction *discordgo.InteractionCreate, @@ -128,11 +181,11 @@ func addRoleForQuery( } func retrieveMemberByName( - session *discordgo.Session, - guildID string, - query string, + session *discordgo.Session, + guildID string, + query string, ) (*discordgo.Member) { - if strings.HasPrefix(query, "<@") && strings.HasSuffix(query, ">") { + if strings.HasPrefix(query, "<@") && strings.HasSuffix(query, ">") { userID := strings.TrimSuffix(strings.TrimPrefix(query, "<@"), ">") member, _ := session.GuildMember(guildID, userID) @@ -156,25 +209,25 @@ func retrieveMemberByName( } func findRoleIDByName( - session *discordgo.Session, - interaction *discordgo.InteractionCreate, - guildID string, - roleName string, + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, + roleName string, ) (string) { - roles, err := session.GuildRoles(guildID) + roles, err := session.GuildRoles(guildID) - if err != nil { - utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve guild roles: %v", err)) - return "" - } + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve guild roles: %v", err)) + return "" + } - for _, role := range roles { - if role.Name == roleName { - return role.ID - } - } + for _, role := range roles { + if role.Name == roleName { + return role.ID + } + } - return "" + return "" } func checkIfRequestedUserHasPermission( From a49738e4eec0e4bd0cb55daef9a7aaebb5ae1782 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 15:54:30 +0100 Subject: [PATCH 6/9] Add command to add list of users in bulk from verified warden role --- commands/warden.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/commands/warden.go b/commands/warden.go index 805fbaa..d8a0024 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -44,6 +44,19 @@ func Warden() Command { }, }, }, + { + Type: discordgo.ApplicationCommandOptionSubCommand, + Name: "bulkadd", + Description: "Add '" + ROLE_NAME + "' role to a list of users", + Options: []*discordgo.ApplicationCommandOption{ + { + Type: discordgo.ApplicationCommandOptionString, + Name: "userlist", + Description: "Comma-separated list of Discord usernames or nicknames to match (partial allowed)", + Required: true, + }, + }, + }, }, }, Handler: handleWarden, @@ -79,6 +92,8 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction switch sub.Name { case "add": handleAddCommand(session, interaction, sub, guildID, query) + case "bulkadd": + handleBulkAddCommand(session, interaction, sub, guildID, query) case "remove": handleRemoveCommand(session, interaction, sub, guildID, query) default: @@ -158,6 +173,49 @@ func handleRemoveCommand( utils.Info("Warden role removed", "user", member.User.ID) } +func handleBulkAddCommand( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + sub *discordgo.ApplicationCommandInteractionDataOption, + guildID string, + query string, +) { + queries := strings.Split(query, ",") + + roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) + if roleID == "" { + return + } + + err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, + }) + + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to acknowledge bulk add: %v", err)) + return + } + + var results []string + for _, q := range queries { + q = strings.TrimSpace(q) + utils.Info("Processing bulk add", "query", q) + if q == "" { + continue + } + results = append(results, addRoleForQuery(session, interaction, guildID, q, roleID)) + } + + content := strings.Join(results, "\n") + _, err = session.InteractionResponseEdit(interaction.Interaction, &discordgo.WebhookEdit{ + Content: &content, + }) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to send bulk add summary: %v", err)) + return + } +} + func addRoleForQuery( session *discordgo.Session, interaction *discordgo.InteractionCreate, From 83ca6b0083e31290067256a745d1dc6e28a119aa Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Sun, 11 Jan 2026 16:14:49 +0100 Subject: [PATCH 7/9] Add command to purge all existing Warden Verified roles --- commands/warden.go | 119 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/commands/warden.go b/commands/warden.go index d8a0024..8141f2b 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -57,6 +57,12 @@ func Warden() Command { }, }, }, + { + Type: discordgo.ApplicationCommandOptionSubCommand, + Name: "purge", + Description: "Remove '" + ROLE_NAME + "' role from all users", + Options: []*discordgo.ApplicationCommandOption{}, + }, }, }, Handler: handleWarden, @@ -72,12 +78,11 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction sub := data.Options[0] - if len(sub.Options) == 0 { + if len(sub.Options) == 0 && sub.Name != "purge" { utils.HandleError(session, interaction, "❌ Missing discordname argument") return } - query := sub.Options[0].StringValue() guildID := interaction.GuildID if guildID == "" { @@ -89,6 +94,10 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction return } + query := "" + if sub.Name != "purge" { + query = sub.Options[0].StringValue() + } switch sub.Name { case "add": handleAddCommand(session, interaction, sub, guildID, query) @@ -96,6 +105,8 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction handleBulkAddCommand(session, interaction, sub, guildID, query) case "remove": handleRemoveCommand(session, interaction, sub, guildID, query) + case "purge": + handlePurgeCommand(session, interaction, guildID) default: utils.HandleError(session, interaction, "❌ Unknown subcommand") } @@ -153,13 +164,9 @@ func handleRemoveCommand( return } - err := session.GuildMemberRoleRemove(guildID, member.User.ID, roleID) - if err != nil { - utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to remove role: %v", err)) - return - } + removeRoleForQuery(session, interaction, guildID, query, roleID) - err = session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Content: fmt.Sprintf("✅ Removed '%s' role from %s#%s", ROLE_NAME, member.User.Username, member.User.Discriminator), @@ -216,6 +223,80 @@ func handleBulkAddCommand( } } +func handlePurgeCommand( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, +) { + roleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME) + if roleID == "" { + return + } + + if err := session.InteractionRespond(interaction.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, + }); err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to acknowledge purge: %v", err)) + return + } + + var ( + after string + removed int + results []string + ) + + for { + members, err := session.GuildMembers(guildID, after, 1000) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve guild members: %v", err)) + return + } + if len(members) == 0 { + break + } + + for _, m := range members { + if m.User == nil { + continue + } + + if memberHasRole(m, roleID) { + results = append(results, removeRoleForQuery(session, interaction, guildID, m.User.Username, roleID)) + removed++ + } + } + + after = members[len(members)-1].User.ID + if len(members) < 1000 { + break + } + } + + content := strings.Join(results, "\n") + if content == "" { + content = "✅ Purge complete: no members had the role." + } + + _, err := session.InteractionResponseEdit(interaction.Interaction, &discordgo.WebhookEdit{ + Content: &content, + }) + if err != nil { + utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to send purge summary: %v", err)) + return + } +} + +func memberHasRole(m *discordgo.Member, roleID string) bool { + for _, rid := range m.Roles { + if rid == roleID { + return true + } + } + return false +} + + func addRoleForQuery( session *discordgo.Session, interaction *discordgo.InteractionCreate, @@ -238,6 +319,28 @@ func addRoleForQuery( return fmt.Sprintf("✅ Added '%s' role to %s#%s", ROLE_NAME, member.User.Username, member.User.Discriminator) } +func removeRoleForQuery( + session *discordgo.Session, + interaction *discordgo.InteractionCreate, + guildID string, + query string, + roleID string, +) string { + member := retrieveMemberByName(session, guildID, query) + if member == nil { + return fmt.Sprintf("❌ No member found matching '%s'", query) + } + + err := session.GuildMemberRoleRemove(guildID, member.User.ID, roleID) + if err != nil { + utils.Error("Failed to remove role in bulk", "user", member.User.ID, "error", err) + return fmt.Sprintf("❌ Failed to remove role from %s#%s: %v", member.User.Username, member.User.Discriminator, err) + } + + utils.Info("Warden role removed ", "user", member.User.ID) + return fmt.Sprintf("✅ Removed '%s' role from %s#%s", ROLE_NAME, member.User.Username, member.User.Discriminator) +} + func retrieveMemberByName( session *discordgo.Session, guildID string, From 92150647d8789537eaa0a0ace3fc389bf7a8675b Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Mon, 12 Jan 2026 00:48:14 +0100 Subject: [PATCH 8/9] Remove permission check as it can be modified by 3rd party software --- commands/warden.go | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/commands/warden.go b/commands/warden.go index 8141f2b..87ba085 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -8,15 +8,12 @@ import ( ) const ROLE_NAME string = "Warden Verified" -const ROLE_NAME_ADMIN string = "Warden Admin" func Warden() Command { - var required int64 = discordgo.PermissionManageRoles return Command{ Definition: &discordgo.ApplicationCommand{ Name: "warden", Description: "Warden role management", - DefaultMemberPermissions: &required, Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionSubCommand, @@ -390,30 +387,3 @@ func findRoleIDByName( return "" } - -func checkIfRequestedUserHasPermission( - session *discordgo.Session, - interaction *discordgo.InteractionCreate, - guildID string, -) bool { - adminRoleID := findRoleIDByName(session, interaction, guildID, ROLE_NAME_ADMIN) - if adminRoleID == "" { - utils.HandleError(session, interaction, "❌ Admin role not found") - return false - } - - member, err := session.GuildMember(guildID, interaction.Member.User.ID) - if err != nil { - utils.HandleError(session, interaction, fmt.Sprintf("❌ Failed to retrieve your member info: %v", err)) - return false - } - - for _, rid := range member.Roles { - if rid == adminRoleID { - return true - } - } - - utils.HandleError(session, interaction, "❌ You do not have permission to use this command") - return false -} From 8a52a6e4bc9989d0d0d70282ed73b1605512e623 Mon Sep 17 00:00:00 2001 From: Jens Gryspeert Date: Mon, 12 Jan 2026 09:33:35 +0100 Subject: [PATCH 9/9] Fix PR --- commands/warden.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/commands/warden.go b/commands/warden.go index 87ba085..960f876 100644 --- a/commands/warden.go +++ b/commands/warden.go @@ -87,10 +87,6 @@ func handleWarden(session *discordgo.Session, interaction *discordgo.Interaction return } - if !checkIfRequestedUserHasPermission(session, interaction, guildID) { - return - } - query := "" if sub.Name != "purge" { query = sub.Options[0].StringValue()