From 2c84e6b79cf43b498bb94460c38848e29ce83472 Mon Sep 17 00:00:00 2001 From: Elara6331 Date: Fri, 8 Dec 2023 08:11:17 -0800 Subject: [PATCH] Make sure open vetting requests get removed if a user leaves --- internal/systems/vetting/handlers.go | 28 ++++++++++++++++++++++++++++ internal/systems/vetting/vetting.go | 1 + 2 files changed, 29 insertions(+) diff --git a/internal/systems/vetting/handlers.go b/internal/systems/vetting/handlers.go index 89b2dd5..d14d99a 100644 --- a/internal/systems/vetting/handlers.go +++ b/internal/systems/vetting/handlers.go @@ -397,3 +397,31 @@ func onVettingResponse(s *discordgo.Session, i *discordgo.InteractionCreate) err return db.RemoveVettingReq(i.GuildID, i.Message.ID) } + +func onMemberLeave(s *discordgo.Session, gmr *discordgo.GuildMemberRemove) { + msgID, err := db.VettingReqMsgID(gmr.GuildID, gmr.Member.User.ID) + if errors.Is(err, sql.ErrNoRows) { + return + } else if err != nil { + log.Error("Error getting vetting request ID after member leave").Str("user-id", gmr.Member.User.ID).Err(err).Send() + return + } + + guild, err := db.GuildByID(gmr.GuildID) + if err != nil { + log.Error("Error getting guild").Str("guild-id", gmr.GuildID).Err(err).Send() + return + } + + if guild.VettingReqChanID != "" { + err = s.ChannelMessageDelete(guild.VettingReqChanID, msgID) + if err != nil { + log.Error("Error deleting vetting request message after member leave").Str("msg-id", msgID).Err(err).Send() + } + } + + err = db.RemoveVettingReq(gmr.GuildID, msgID) + if err != nil { + log.Error("Error removing vetting request after member leave").Str("user-id", gmr.Member.User.ID).Err(err).Send() + } +} diff --git a/internal/systems/vetting/vetting.go b/internal/systems/vetting/vetting.go index 1f8b278..b9fac07 100644 --- a/internal/systems/vetting/vetting.go +++ b/internal/systems/vetting/vetting.go @@ -34,6 +34,7 @@ func Init(s *discordgo.Session) error { s.AddHandler(onMemberJoin) s.AddHandler(util.InteractionErrorHandler("on-vetting-req", onVettingRequest)) s.AddHandler(util.InteractionErrorHandler("on-vetting-resp", onVettingResponse)) + s.AddHandler(onMemberLeave) commands.Register(s, onMakeVettingMsg, &discordgo.ApplicationCommand{ Name: "Make Vetting Message",