Skip to content
4 changes: 2 additions & 2 deletions commands/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ func OnGuildMemberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) {
utils.SugarLogger.Infof("Removed all subteam roles from user %s (%s) as they are alumni", m.User.ID, m.Nick)
service.SendMessage(config.DiscordLogChannel, fmt.Sprintf("Removed all subteam roles from user %s (%s) as they are alumni", m.User.ID, m.Nick))

// User cannot have member, lead, or officer roles if they are alumni (admin and special advisor ok)
removeRoles := []string{config.MemberRoleID, config.LeadRoleID, config.OfficerRoleID}
// User cannot have member, team member, lead, or officer roles if they are alumni (admin and special advisor ok)
removeRoles := []string{config.MemberRoleID, config.TeamMemberRoleID, config.LeadRoleID, config.OfficerRoleID}
for _, role := range removeRoles {
err := service.Discord.GuildMemberRoleRemove(config.DiscordGuild, m.User.ID, role)
if err != nil {
Expand Down
7 changes: 6 additions & 1 deletion commands/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ func Users(args []string, s *discordgo.Session, m *discordgo.MessageCreate) {
officerMembers := 0
specialAdvisorMembers := 0
alumniMembers := 0
teamMembers := 0

subteamMap := make(map[string]int)
subteams := service.GetAllSubteams()
Expand All @@ -63,6 +64,9 @@ func Users(args []string, s *discordgo.Session, m *discordgo.MessageCreate) {
if role == config.AlumniRoleID {
alumniMembers++
}
if role == config.TeamMemberRoleID {
teamMembers++
}
for _, subteam := range subteams {
if role == subteam.ID {
subteamMap[subteam.Name]++
Expand All @@ -71,10 +75,11 @@ func Users(args []string, s *discordgo.Session, m *discordgo.MessageCreate) {
}
guildMembers++
}
messageText := fmt.Sprintf("Discord Members: %d\nMembers Role: %d\nAlumni Members: %d\n", guildMembers, memberMembers, alumniMembers)
messageText := fmt.Sprintf("Discord Members: %d\nMembers Role: %d\nAlumni Members: %d\nTeam Members: %d\n\n", guildMembers, memberMembers, alumniMembers, teamMembers)
utils.SugarLogger.Infof("Discord Members: %d", guildMembers)
utils.SugarLogger.Infof("Members Role: %d", memberMembers)
utils.SugarLogger.Infof("Alumni Members: %d", alumniMembers)
utils.SugarLogger.Infof("Team Members: %d", teamMembers)
for subteam, count := range subteamMap {
utils.SugarLogger.Infof("%s: %d", subteam, count)
messageText += fmt.Sprintf("%s: %d\n", subteam, count)
Expand Down
6 changes: 4 additions & 2 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"os"
)

var Version = "4.5.8"
var Version = "4.5.9"
var Env = os.Getenv("ENV")
var Port = os.Getenv("PORT")
var Prefix = os.Getenv("PREFIX")
Expand Down Expand Up @@ -35,7 +35,8 @@ var AdminRoleID = "1030681203864522823"
var OfficerRoleID = "812948550819905546"
var LeadRoleID = "970423652791246888"
var SpecialAdvisorRoleID = "1386909324596609034"
var MemberRoleID = "1334383074410237984"
var TeamMemberRoleID = "1456575818460430522"
var MemberRoleID = "1334383074410237984" // this is actually the Discord Role ID for "verified" role
var AlumniRoleID = "817577502968512552"
var BotRoleID = "1229611357259694132"

Expand All @@ -49,6 +50,7 @@ var RsaPrivateKeyString = os.Getenv("RSA_PRIVATE_KEY")

var MemberDirectorySheetID = "1reuLZox2daj8r2H-lZrwB4oFPYlJ6oC7983UUaZd6AY"
var MailingListSheetID = "1O5KQzpOo9Ja4Vg55TGCyc3uUDZFvHjyhZqw4Eh1SKVY"
var TeamMemberMasterListSheetID = "1tKawKKq1jk-WN8WM8gGkwOeEc0IA6-pkKxHL1DcWzd0"

var DriveCron = os.Getenv("DRIVE_CRON")
var GithubCron = os.Getenv("GITHUB_CRON")
Expand Down
6 changes: 5 additions & 1 deletion jobs/drive.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func RegisterDriveCronJob() {
_, _ = 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(5)
wg.Add(6)
go func() {
defer wg.Done()
service.PopulateMemberDirectorySheet()
Expand All @@ -41,6 +41,10 @@ func RegisterDriveCronJob() {
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...")
Expand Down
2 changes: 1 addition & 1 deletion jobs/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
cron "github.com/robfig/cron/v3"
)

func RegisteGithubCronJob() {
func RegisterGithubCronJob() {
if config.Env != "PROD" {
utils.SugarLogger.Infoln("Github CRON Job not registered because environment is not PROD")
return
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func main() {
commands.InitializeDiscordBot()

jobs.RegisterDriveCronJob()
jobs.RegisteGithubCronJob()
jobs.RegisterGithubCronJob()
jobs.RegisterDiscordCronJob()

router := controller.SetupRouter()
Expand Down
7 changes: 7 additions & 0 deletions model/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ func (user User) GetHighestRole() string {
if user.IsSpecialAdvisor() {
return "d_special_advisor"
}
if user.IsTeamMember() {
return "d_team_member"
}
if user.IsMember() {
return "d_member"
}
Expand Down Expand Up @@ -96,6 +99,10 @@ func (user User) IsInnerCircle() bool {
return user.IsAdmin() || user.IsOfficer() || user.IsLead() || user.IsSpecialAdvisor()
}

func (user User) IsTeamMember() bool {
return user.HasRole("d_team_member")
}

func (user User) IsMember() bool {
return user.HasRole("d_member")
}
Expand Down
5 changes: 5 additions & 0 deletions service/discord_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,11 @@ func PopulateDiscordMembers() {
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 {
Expand Down
51 changes: 51 additions & 0 deletions service/drive_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,3 +604,54 @@ func PopulateMailingListSheet() {
externalMailingListEntries := GetExternalMailingListEntries()
populateMailingListSheet("External", externalMailingListEntries)
}

// UpdateTeamMembers checks the Team Members google sheet and gives the Team Member Discord role to all users with a TRUE cell
func UpdateTeamMembers() {
sheetName := "New Members"
readRange := fmt.Sprintf("'%s'!A:H", sheetName)
resp, err := SheetClient.Spreadsheets.Values.Get(config.TeamMemberMasterListSheetID, readRange).Do()
if err != nil {
utils.SugarLogger.Errorf("Unable to read sheet: %v", err)
return
}

var emails []string
for i, row := range resp.Values {
// Skip column names
if i == 0 {
continue
}

// Skip rows that aren't filled until column H
if len(row) < 8 {
continue
}

// Check if column H is TRUE
if hValue, ok := row[7].(string); ok && hValue == "TRUE" {
if email, ok := row[1].(string); ok && email != "" {
emails = append(emails, email)
}
}
}
count := 0
for _, email := range emails {
user := GetUserByEmail(email)

if user.ID == "" {
continue
}
if user.IsAlumni() || user.IsTeamMember() || !user.IsMember() {
continue
}
utils.SugarLogger.Infof("Updating %s with Team Member role", email)
err := Discord.GuildMemberRoleAdd(config.DiscordGuild, user.ID, config.TeamMemberRoleID)
if err != nil {
utils.SugarLogger.Errorln("Error adding role, ", err)
continue
}
count++
}
utils.SugarLogger.Infof("Gave %d users the Team Member role", count)
SendMessage(config.DiscordLogChannel, fmt.Sprintf("Gave %d users the Team Member role", count))
}
2 changes: 2 additions & 0 deletions service/role_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ func SyncDiscordRolesForUser(userID string, roleIds []string) {
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 {
Expand Down