From 2dcb6c47ce54a25af5d7a9365d10abb1bf489afa Mon Sep 17 00:00:00 2001 From: Bharat Kathi Date: Sat, 30 May 2026 15:56:49 -0700 Subject: [PATCH 1/2] feat: freeze v4 role syncing; v5 takes over Remove all role-sync entry points and stub role-mutation primitives to no-ops. v4 is now read-only + OAuth; Sentinel v5 owns Discord role sync going forward. - Unregister OnGuildMemberUpdate handler - Drop SyncRolesForAllUsers startup goroutine and RegisterDiscordCronJob - Remove role-mutating slash commands: verify, subteam, rs, alumni - Remove POST /users/:userID/roles route - Stub SetDiscordRolesForUser, SyncRolesForAllUsers, CleanDiscordMembers, PopulateDiscordMembers, SetRolesForUser, SyncDiscordRolesForUser, RemoveAllSubteamDiscordRolesForUser Bump version to 4.7.0 to mark the freeze release. --- commands/handler.go | 9 -- config/config.go | 2 +- controller/route_controller.go | 1 - main.go | 2 - service/discord_service.go | 200 ++------------------------------- service/role_service.go | 77 ++----------- 6 files changed, 17 insertions(+), 274 deletions(-) diff --git a/commands/handler.go b/commands/handler.go index 46ca0cb..3f3f9b0 100644 --- a/commands/handler.go +++ b/commands/handler.go @@ -76,7 +76,6 @@ func isRangeInCode(spoilerRange []int, codeRanges [][]int) bool { func InitializeDiscordBot() { service.Discord.AddHandler(OnDiscordMessage) - service.Discord.AddHandler(OnGuildMemberUpdate) service.Discord.AddHandler(LogUserMessage) service.Discord.AddHandler(LogUserReaction) service.Discord.AddHandler(OnMessageUpdate) @@ -103,12 +102,6 @@ func OnDiscordMessage(s *discordgo.Session, m *discordgo.MessageCreate) { Ping(args, s, m) case "say": Say(args, s, m) - case "verify": - Verify(args, s, m) - case "subteam": - Subteam(args, s, m) - case "rs": - RemoveSubteam(args, s, m) case "github": Github(args, s, m) case "drive": @@ -117,8 +110,6 @@ func OnDiscordMessage(s *discordgo.Session, m *discordgo.MessageCreate) { Whois(args, s, m) case "users": Users(args, s, m) - case "alumni": - Alumni(args, s, m) default: utils.SugarLogger.Infof("Command not found: %s", command) } diff --git a/config/config.go b/config/config.go index 6436ca2..5e6bd2c 100644 --- a/config/config.go +++ b/config/config.go @@ -5,7 +5,7 @@ import ( "os" ) -var Version = "4.6.2" +var Version = "4.7.0" var Env = os.Getenv("ENV") var Port = os.Getenv("PORT") var Prefix = os.Getenv("PREFIX") diff --git a/controller/route_controller.go b/controller/route_controller.go index ca74fba..b6d3281 100644 --- a/controller/route_controller.go +++ b/controller/route_controller.go @@ -57,7 +57,6 @@ func InitializeRoutes(router *gin.Engine) { router.GET("/users/:userID", GetUserByID) router.POST("/users/:userID", CreateUser) router.GET("/users/:userID/roles", GetAllRolesForUser) - router.POST("/users/:userID/roles", SetRolesForUser) router.GET("/users/:userID/auth", GetAuthForUser) router.DELETE("/users/:userID/auth", ResetAccountPassword) router.GET("/users/:userID/drive", GetDriveStatusForUser) diff --git a/main.go b/main.go index 45271b0..79d3fc0 100644 --- a/main.go +++ b/main.go @@ -22,12 +22,10 @@ func main() { service.ConnectDiscord() service.InitializeRoles() service.InitializeSubteams() - go service.SyncRolesForAllUsers() commands.InitializeDiscordBot() jobs.RegisterDriveCronJob() jobs.RegisterGithubCronJob() - jobs.RegisterDiscordCronJob() router := controller.SetupRouter() controller.InitializeRoutes(router) diff --git a/service/discord_service.go b/service/discord_service.go index cc6cd3b..ba0314c 100644 --- a/service/discord_service.go +++ b/service/discord_service.go @@ -9,7 +9,6 @@ import ( "sentinel/config" "sentinel/model" "sentinel/utils" - "slices" "strings" "time" @@ -68,54 +67,14 @@ func InitializeRoles() { } } +// SyncRolesForAllUsers is a no-op. Role syncing is now owned by Sentinel v5. func SyncRolesForAllUsers() { - members, err := Discord.GuildMembers(config.DiscordGuild, "", 1000) - if err != nil { - utils.SugarLogger.Errorln(err.Error()) - } - count := 0 - for _, member := range members { - user := GetUserByID(member.User.ID) - if user.ID != "" { - SyncDiscordRolesForUser(user.ID, member.Roles) - count++ - } - } - utils.SugarLogger.Infof("Synced roles for %d users", count) + utils.SugarLogger.Infoln("SyncRolesForAllUsers called but role syncing is disabled in v4 (owned by v5)") } +// SetDiscordRolesForUser is a no-op. Role syncing is now owned by Sentinel v5. func SetDiscordRolesForUser(userID string, roleIds []string) { - guildMember, err := Discord.GuildMember(config.DiscordGuild, userID) - if err != nil { - utils.SugarLogger.Errorln("Error getting guild member, ", err) - return - } - existingRoles := guildMember.Roles - rolesToAdd := []string{} - rolesToRemove := []string{} - for _, id := range roleIds { - if !contains(existingRoles, id) { - rolesToAdd = append(rolesToAdd, id) - } - } - for _, id := range existingRoles { - if !contains(roleIds, id) { - rolesToRemove = append(rolesToRemove, id) - } - } - utils.SugarLogger.Infof("Adding roles %v, removing roles %v to user %s", rolesToAdd, rolesToRemove, userID) - for _, id := range rolesToAdd { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, userID, id) - if err != nil { - utils.SugarLogger.Errorln("Error adding role, ", err) - } - } - for _, id := range rolesToRemove { - err := Discord.GuildMemberRoleRemove(config.DiscordGuild, userID, id) - if err != nil { - utils.SugarLogger.Errorln("Error removing role, ", err) - } - } + utils.SugarLogger.Infof("SetDiscordRolesForUser(%s) called but role syncing is disabled in v4 (owned by v5)", userID) } func SetDiscordNicknameForAllUsers() { @@ -390,154 +349,13 @@ func FindAllNonVerifiedUsers() { utils.SugarLogger.Infof("Verified Members: %d", verifiedMembers) } -// PopulateDiscordMembers populates the discord roles for all users in the sentinel database -// Can be used for disaster recovery if all user roles are removed from the discord server +// PopulateDiscordMembers is a no-op. Role syncing is now owned by Sentinel v5. func PopulateDiscordMembers() { - users := GetAllUsers() - for _, user := range users { - utils.SugarLogger.Infof("Populating discord member for user %s %s (%s)", user.FirstName, user.LastName, user.Email) - member, err := Discord.GuildMember(config.DiscordGuild, user.ID) - if err != nil { - utils.SugarLogger.Errorf("Error getting discord member for user %s: %s", user.ID, err.Error()) - } - if member != nil { - utils.SugarLogger.Infof("Found user in discord") - utils.SugarLogger.Infof("User has roles: %s", user.Roles) - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.MemberRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - if user.HasRole("d_alumni") { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.AlumniRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } else if user.HasRole("d_team_member") { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.TeamMemberRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } else if user.HasRole("d_officer") { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.OfficerRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } else if user.HasRole("d_lead") { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.LeadRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } else if user.HasRole("d_admin") { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.AdminRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } - utils.SugarLogger.Infof("Added main roles to user %s", user.Email) - for _, subteam := range user.Subteams { - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, subteam.ID) - if err != nil { - utils.SugarLogger.Errorf("Error adding role to user %s: %s", user.Email, err.Error()) - } - } - utils.SugarLogger.Infof("Added subteam roles to user %s", user.Email) - } else { - utils.SugarLogger.Infof("User not found in discord: %s", user.ID) - } - } + utils.SugarLogger.Infoln("PopulateDiscordMembers called but role syncing is disabled in v4 (owned by v5)") } -// CleanDiscordMembers does the following: -// 1. Remove all roles from users who are in the discord server but not in the sentinel database -// 2. Remove all roles from users who no longer have the member or alumni role in the sentinel database -// 3. Remove all sentinel roles from users who are no longer a member of the discord server -// -// NOTE: This will NOT kick anyone from the discord server nor DELETE any users from the sentinel database +// CleanDiscordMembers is a no-op. Role syncing is now owned by Sentinel v5. func CleanDiscordMembers() { - members, err := Discord.GuildMembers(config.DiscordGuild, "", 1000) - if err != nil { - utils.SugarLogger.Errorln(err.Error()) - } - for _, member := range members { - // Check if member is a bot - if member.User.Bot { - utils.SugarLogger.Infof("Discord user %s (%s) is a bot, skipping", member.User.ID, member.Nick) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Discord user %s (%s) is a bot, skipping", member.User.ID, member.Nick)) - // make sure they have the bot role - err := Discord.GuildMemberRoleAdd(config.DiscordGuild, member.User.ID, config.BotRoleID) - if err != nil { - utils.SugarLogger.Errorf("Error adding bot role to user %s: %s", member.User.ID, err.Error()) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Error adding bot role to user %s: %s", member.User.ID, err.Error())) - } - continue - } - user := GetUserByID(member.User.ID) - if user.ID == "" { - // User is in the discord server but not in the sentinel database - // Remove all roles from user - if len(member.Roles) > 0 { - utils.SugarLogger.Infof("Discord user not found in Sentinel: %s (%s)", member.User.ID, member.Nick) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Discord user not found in Sentinel: %s (%s)", member.User.ID, member.Nick)) - for _, role := range member.Roles { - err := Discord.GuildMemberRoleRemove(config.DiscordGuild, member.User.ID, role) - if err != nil { - utils.SugarLogger.Errorf("Error removing role %s from user %s (%s): %s", role, member.User.ID, member.Nick, err.Error()) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Error removing role %s from user %s (%s): %s", role, member.User.ID, member.Nick, err.Error())) - } - } - utils.SugarLogger.Infof("Removed all roles from user %s (%s) as they are not in the sentinel database", member.User.ID, member.Nick) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Removed all roles from user %s (%s) as they are not in the sentinel database", member.User.ID, member.Nick)) - } - } else if !(user.IsMember() || user.IsAlumni()) { - // User is in the sentinel database but not a member or alumni - // Remove all roles from user - if len(member.Roles) > 0 { - if slices.Contains(member.Roles, config.MemberRoleID) || slices.Contains(member.Roles, config.AdminRoleID) { - // User is actually a member or alumni, looks like we hit an inconsistency between discord and sentinel roles (bruh edge case) - utils.SugarLogger.Infof("Discord user has roles that are not in Sentinel: %s (%s), Discord roles: %v, Sentinel roles: %v", member.User.ID, member.Nick, member.Roles, user.Roles) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Discord user has roles that are not in Sentinel: %s (%s), Discord roles: %v, Sentinel roles: %v", member.User.ID, member.Nick, member.Roles, user.Roles)) - // trigger a sync of roles for this user - SyncDiscordRolesForUser(user.ID, member.Roles) - continue - } - utils.SugarLogger.Infof("Discord user not a member or alumni: %s (%s)", member.User.ID, member.Nick) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Discord user not a member or alumni: %s (%s)", member.User.ID, member.Nick)) - for _, role := range member.Roles { - err := Discord.GuildMemberRoleRemove(config.DiscordGuild, member.User.ID, role) - if err != nil { - utils.SugarLogger.Errorf("Error removing role %s from user %s (%s): %s", role, member.User.ID, member.Nick, err.Error()) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Error removing role %s from user %s (%s): %s", role, member.User.ID, member.Nick, err.Error())) - } - } - utils.SugarLogger.Infof("Removed all roles from user %s (%s) as they are not a member or alumni", member.User.ID, member.Nick) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Removed all roles from user %s (%s) as they are not a member or alumni", member.User.ID, member.Nick)) - } - } - } - for _, user := range GetAllUsers() { - member, err := Discord.GuildMember(config.DiscordGuild, user.ID) - if err != nil { - utils.SugarLogger.Errorf("Error getting discord member for user %s: %s", user.ID, err.Error()) - continue - } - if member == nil { - // User is in the sentinel database but no longer in the discord server - // Delete user roles from sentinel (except if alumni), other jobs will take care of the rest - if len(user.Roles) == 1 && user.IsAlumni() { - utils.SugarLogger.Infof("User %s is an alumni and has only the alumni role in Sentinel, skipping", user.ID) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("User %s is an alumni and has only the alumni role in Sentinel, skipping", user.ID)) - continue - } - if len(user.Roles) > 0 { - utils.SugarLogger.Infof("Removing sentinel roles from user %s as they are no longer in the discord server", user.ID) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Removing sentinel roles from user %s as they are no longer in the discord server", user.ID)) - roles := []string{} - if user.IsAlumni() { - roles = append(roles, "d_alumni") - } - SetRolesForUser(user.ID, roles) - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Updated sentinel roles for user %s (%s) as they are no longer in the discord server: %v", user.ID, fmt.Sprintf("%s %s", user.FirstName, user.LastName), roles)) - } - } - } + utils.SugarLogger.Infoln("CleanDiscordMembers called but role syncing is disabled in v4 (owned by v5)") } + diff --git a/service/role_service.go b/service/role_service.go index 38a597e..7ae2e87 100644 --- a/service/role_service.go +++ b/service/role_service.go @@ -1,13 +1,9 @@ package service import ( - "fmt" - "sentinel/config" "sentinel/database" "sentinel/model" "sentinel/utils" - "strings" - "time" ) func GetRolesForUser(userID string) []string { @@ -36,80 +32,21 @@ func GetDiscordRolesForUser(userID string) []string { return roleNames } +// SetRolesForUser is a no-op. Role syncing is now owned by Sentinel v5. +// Returns the current roles unchanged. func SetRolesForUser(userID string, roles []string) []string { - existingRoles := GetRolesForUser(userID) - for _, nr := range roles { - if !contains(existingRoles, nr) { - result := database.DB.Create(&model.UserRole{ - UserID: userID, - Role: nr, - CreatedAt: time.Time{}, - }) - if result.Error != nil { - utils.SugarLogger.Errorln(result.Error.Error()) - } - } - } - for _, er := range existingRoles { - if !contains(roles, er) { - database.DB.Where("user_id = ? AND role = ?", userID, er).Delete(&model.UserRole{}) - } - } + utils.SugarLogger.Infof("SetRolesForUser(%s) called but role syncing is disabled in v4 (owned by v5)", userID) return GetRolesForUser(userID) } -// SyncDiscordRolesForUser syncs user's roles from Discord with Sentinel -// This should NOT modify the user's Discord roles -// Any role conflicts should be resolved by the OnGuildMemberUpdate callback +// SyncDiscordRolesForUser is a no-op. Role syncing is now owned by Sentinel v5. func SyncDiscordRolesForUser(userID string, roleIds []string) { - subteamRoles := make([]model.UserSubteam, 0) - roles := GetRolesForUser(userID) - for _, role := range roles { - if strings.HasPrefix(role, "d_") { - roles = removeValue(roles, role) - } - } - for _, id := range roleIds { - subteam := GetSubteamByID(id) - if subteam.ID != "" { - subteamRoles = append(subteamRoles, model.UserSubteam{ - UserID: userID, - RoleID: subteam.ID, - }) - } else if id == config.AdminRoleID { - roles = append(roles, "d_admin") - } else if id == config.OfficerRoleID { - roles = append(roles, "d_officer") - } else if id == config.LeadRoleID { - roles = append(roles, "d_lead") - } else if id == config.SpecialAdvisorRoleID { - roles = append(roles, "d_special_advisor") - } else if id == config.TeamMemberRoleID { - roles = append(roles, "d_team_member") - } else if id == config.MemberRoleID { - roles = append(roles, "d_member") - } else if id == config.AlumniRoleID { - roles = append(roles, "d_alumni") - } - } - SetSubteamsForUser(userID, subteamRoles) - SetRolesForUser(userID, roles) - - user := GetUserByID(userID) - finalRoles := GetRolesForUser(userID) - finalSubteams := GetSubteamsForUser(userID) - subteamNames := make([]string, 0) - for _, s := range finalSubteams { - subteamNames = append(subteamNames, s.Name) - } - SendMessage(config.DiscordLogChannel, fmt.Sprintf("Synced roles for %s (%s),\nroles: %v, \nsubteams: %v", userID, fmt.Sprintf("%s %s", user.FirstName, user.LastName), finalRoles, subteamNames)) + utils.SugarLogger.Infof("SyncDiscordRolesForUser(%s) called but role syncing is disabled in v4 (owned by v5)", userID) } +// RemoveAllSubteamDiscordRolesForUser is a no-op. Role syncing is now owned by Sentinel v5. func RemoveAllSubteamDiscordRolesForUser(userID string) { - subteams := GetSubteamsForUser(userID) - for _, subteam := range subteams { - Discord.GuildMemberRoleRemove(config.DiscordGuild, userID, subteam.ID) - } + utils.SugarLogger.Infof("RemoveAllSubteamDiscordRolesForUser(%s) called but role syncing is disabled in v4 (owned by v5)", userID) } func contains(s []string, e string) bool { From 71474945b7dbe1442f6f31ed284257a350749f1d Mon Sep 17 00:00:00 2001 From: Bharat Kathi Date: Sat, 30 May 2026 17:51:27 -0700 Subject: [PATCH 2/2] chore: remove all v4 cron jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the entire jobs/ package. v4 is now strictly read + OAuth with no background workers — zero chance of stale writes during the v5 cutover. Bump to 4.7.1. --- config/config.go | 2 +- go.mod | 1 - go.sum | 2 -- jobs/discord.go | 52 -------------------------------------- jobs/drive.go | 66 ------------------------------------------------ jobs/github.go | 31 ----------------------- main.go | 4 --- 7 files changed, 1 insertion(+), 157 deletions(-) delete mode 100644 jobs/discord.go delete mode 100644 jobs/drive.go delete mode 100644 jobs/github.go diff --git a/config/config.go b/config/config.go index 5e6bd2c..e5352f6 100644 --- a/config/config.go +++ b/config/config.go @@ -5,7 +5,7 @@ import ( "os" ) -var Version = "4.7.0" +var Version = "4.7.1" var Env = os.Getenv("ENV") var Port = os.Getenv("PORT") var Prefix = os.Getenv("PREFIX") diff --git a/go.mod b/go.mod index 9be4f8c..bf84147 100644 --- a/go.mod +++ b/go.mod @@ -63,7 +63,6 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.2.1 // indirect - github.com/robfig/cron/v3 v3.0.1 github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect diff --git a/go.sum b/go.sum index 7676f68..93d1404 100644 --- a/go.sum +++ b/go.sum @@ -129,8 +129,6 @@ github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= -github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/singlestore-labs/gorm-singlestore v1.2.0 h1:mccrEa5tyZDvq7LdEl7oIVfizVC0gxkcf2MHoZG1TWQ= diff --git a/jobs/discord.go b/jobs/discord.go deleted file mode 100644 index ae47bbe..0000000 --- a/jobs/discord.go +++ /dev/null @@ -1,52 +0,0 @@ -package jobs - -import ( - "sentinel/config" - "sentinel/service" - "sentinel/utils" - "strconv" - - cron "github.com/robfig/cron/v3" -) - -func RegisterDiscordCronJob() { - if config.Env != "PROD" { - utils.SugarLogger.Infoln("Discord CRON Job not registered because environment is not PROD") - return - } - c := cron.New() - CleanDiscordJob(c) - IncompleteProfileJob(c) -} - -func CleanDiscordJob(c *cron.Cron) { - entryID, err := c.AddFunc(config.DiscordCron, func() { - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":alarm_clock: Starting discord member cleanup CRON Job") - utils.SugarLogger.Infoln("Starting discord member cleanup CRON Job...") - service.CleanDiscordMembers() - utils.SugarLogger.Infoln("Finished discord member cleanup CRON Job!") - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":white_check_mark: Finished discord member cleanup CRON Job!") - }) - if err != nil { - utils.SugarLogger.Errorln("Error registering CRON Job: " + err.Error()) - return - } - c.Start() - utils.SugarLogger.Infoln("Registered CRON Job: " + strconv.Itoa(int(entryID)) + " scheduled with cron expression: " + config.DiscordCron) -} - -func IncompleteProfileJob(c *cron.Cron) { - entryID, err := c.AddFunc("0 10 */7 * *", func() { - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":alarm_clock: Starting incomplete profile reminder CRON Job") - utils.SugarLogger.Infoln("Starting incomplete profile reminder CRON Job...") - service.IncompleteProfileReminder() - utils.SugarLogger.Infoln("Finished incomplete profile reminder CRON Job!") - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":white_check_mark: Finished incomplete profile reminder CRON Job!") - }) - if err != nil { - utils.SugarLogger.Errorln("Error registering CRON Job: " + err.Error()) - return - } - c.Start() - utils.SugarLogger.Infoln("Registered CRON Job: " + strconv.Itoa(int(entryID)) + " scheduled with cron expression: " + config.DiscordCron) -} diff --git a/jobs/drive.go b/jobs/drive.go deleted file mode 100644 index a8f8412..0000000 --- a/jobs/drive.go +++ /dev/null @@ -1,66 +0,0 @@ -package jobs - -import ( - "sentinel/config" - "sentinel/service" - "sentinel/utils" - "strconv" - "sync" - - cron "github.com/robfig/cron/v3" -) - -func RegisterDriveCronJob() { - if config.Env != "PROD" { - utils.SugarLogger.Infoln("Drive CRON Job not registered because environment is not PROD") - return - } - c := cron.New() - entryID, err := c.AddFunc(config.DriveCron, func() { - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":alarm_clock: Starting google drive CRON Job") - utils.SugarLogger.Infoln("Starting google drive CRON Job...") - var wg sync.WaitGroup - wg.Add(6) - go func() { - defer wg.Done() - service.PopulateMemberDirectorySheet() - }() - go func() { - defer wg.Done() - service.PopulateMailingListSheet() - }() - go func() { - defer wg.Done() - service.RemoveInactiveMembersFromDrive() - }() - go func() { - defer wg.Done() - service.CleanDriveMembers() - }() - go func() { - defer wg.Done() - service.CleanLeadsDriveMembers() - }() - go func() { - defer wg.Done() - service.UpdateTeamMembers() - }() - wg.Wait() - // utils.SugarLogger.Infoln("Finished google drive cleanup, running PopulateDriveMembers...") - // _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, "Finished google drive cleanup, running PopulateDriveMembers...") - // wg.Add(1) - // go func() { - // defer wg.Done() - // service.PopulateDriveMembers() - // }() - // wg.Wait() - utils.SugarLogger.Infoln("Finished google drive CRON Job!") - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":white_check_mark: Finished google drive job!") - }) - if err != nil { - utils.SugarLogger.Errorln("Error registering CRON Job: " + err.Error()) - return - } - c.Start() - utils.SugarLogger.Infoln("Registered CRON Job: " + strconv.Itoa(int(entryID)) + " scheduled with cron expression: " + config.DriveCron) -} diff --git a/jobs/github.go b/jobs/github.go deleted file mode 100644 index 6af8aaa..0000000 --- a/jobs/github.go +++ /dev/null @@ -1,31 +0,0 @@ -package jobs - -import ( - "sentinel/config" - "sentinel/service" - "sentinel/utils" - "strconv" - - cron "github.com/robfig/cron/v3" -) - -func RegisterGithubCronJob() { - if config.Env != "PROD" { - utils.SugarLogger.Infoln("Github CRON Job not registered because environment is not PROD") - return - } - c := cron.New() - entryID, err := c.AddFunc(config.GithubCron, func() { - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":alarm_clock: Starting github CRON Job") - utils.SugarLogger.Infoln("Starting github CRON Job...") - service.CleanGithubMembers() - utils.SugarLogger.Infoln("Finished github CRON Job!") - _, _ = service.Discord.ChannelMessageSend(config.DiscordLogChannel, ":white_check_mark: Finished github job!") - }) - if err != nil { - utils.SugarLogger.Errorln("Error registering CRON Job: " + err.Error()) - return - } - c.Start() - utils.SugarLogger.Infoln("Registered CRON Job: " + strconv.Itoa(int(entryID)) + " scheduled with cron expression: " + config.GithubCron) -} diff --git a/main.go b/main.go index 79d3fc0..0edbb52 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,6 @@ import ( "sentinel/config" "sentinel/controller" "sentinel/database" - "sentinel/jobs" "sentinel/service" "sentinel/utils" ) @@ -24,9 +23,6 @@ func main() { service.InitializeSubteams() commands.InitializeDiscordBot() - jobs.RegisterDriveCronJob() - jobs.RegisterGithubCronJob() - router := controller.SetupRouter() controller.InitializeRoutes(router) err := router.Run(":" + config.Port)