From 90d422b6b022ea1580e85ffa97eb775df848ad61 Mon Sep 17 00:00:00 2001 From: alexisgeoffrey Date: Tue, 19 Apr 2022 23:07:45 -0500 Subject: [PATCH 1/5] optimize memory alignment of structs reduce size of elo values to int16 move eloString func to discordapi package as user method simplified getEloInfo --- internal/config/config.go | 32 ++++++------- internal/db/db.go | 51 ++++++++++----------- internal/db/elostring.go | 33 -------------- internal/discordapi/discordapi.go | 68 +++++++++++---------------- internal/discordapi/user.go | 76 +++++++++++++++++++++---------- 5 files changed, 120 insertions(+), 140 deletions(-) delete mode 100644 internal/db/elostring.go diff --git a/internal/config/config.go b/internal/config/config.go index ff25d9f..6669668 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -12,30 +12,30 @@ import ( type ( ConfigFile struct { - DbUrl string `yaml:"db_url" env:"DB_URL" env-required:"true"` - BotToken string `yaml:"bot_token" env:"BOT_TOKEN" env-required:"true"` - BotChannelId string `yaml:"bot_channel_id" env-required:"true"` - OneVOne EloType `yaml:"1v1"` - TwoVTwo EloType `yaml:"2v2"` - ThreeVThree EloType `yaml:"3v3"` - FourVFour EloType `yaml:"4v4"` - Custom EloType - EloTypes []EloType `yaml:"-"` - AdminRoles []string `yaml:"admin_roles,flow"` AdminRolesMap map[string]bool `yaml:"-"` + DbUrl string `yaml:"db_url" env:"DB_URL" env-required:"true"` + BotToken string `yaml:"bot_token" env:"BOT_TOKEN" env-required:"true"` + BotChannelId string `yaml:"bot_channel_id" env-required:"true"` + AdminRoles []string `yaml:"admin_roles,flow"` + EloTypes []EloType `yaml:"-"` + OneVOne EloType `yaml:"1v1"` + TwoVTwo EloType `yaml:"2v2"` + ThreeVThree EloType `yaml:"3v3"` + FourVFour EloType `yaml:"4v4"` + Custom EloType } EloType struct { - Enabled bool + RoleMap map[string]int16 `yaml:"-"` Roles []EloRole `yaml:"roles,omitempty"` - RoleMap map[string]int32 `yaml:"-"` + Enabled bool } EloRole struct { RoleId string `yaml:"role_id"` - RolePriority int32 `yaml:"role_priority"` - StartingElo int32 `yaml:"starting_elo"` - EndingElo int32 `yaml:"ending_elo"` + RolePriority int16 `yaml:"role_priority"` + StartingElo int16 `yaml:"starting_elo"` + EndingElo int16 `yaml:"ending_elo"` } ) @@ -85,7 +85,7 @@ func init() { &Cfg.Custom, } { if eloType.Enabled && len(eloType.Roles) != 0 { - eloType.RoleMap = make(map[string]int32, len(eloType.Roles)) + eloType.RoleMap = make(map[string]int16, len(eloType.Roles)) for _, role := range eloType.Roles { eloType.RoleMap[role.RoleId] = role.RolePriority } diff --git a/internal/db/db.go b/internal/db/db.go index 46369d1..35bdf78 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -14,16 +14,16 @@ type User struct { DiscordUserID string Aoe4Username string Aoe4Id string - CurrentElo UserElo - NewElo UserElo + CurrentElo userElo + NewElo userElo } -type UserElo struct { - OneVOne int32 - TwoVTwo int32 - ThreeVThree int32 - FourVFour int32 - Custom int32 +type userElo struct { + OneVOne int16 + TwoVTwo int16 + ThreeVThree int16 + FourVFour int16 + Custom int16 } var Db *pgxpool.Pool @@ -52,7 +52,7 @@ func init() { } } -func RegisterUser(username string, aoeId string, discordId string, guildId string) (err error) { +func RegisterUser(username string, aoeId string, discordId string, guildId string) error { updateUser, err := Db.Exec(context.Background(), "update users set username = $1, aoe_id = $2 where discord_id = $3 and guild_id = $4", username, aoeId, discordId, guildId) @@ -67,10 +67,10 @@ func RegisterUser(username string, aoeId string, discordId string, guildId strin } } - return + return nil } -func UpdateUserElo(discordId string, guildId string, elo UserElo) error { +func UpdateUserElo(discordId string, guildId string, elo userElo) error { updateUser, err := Db.Exec(context.Background(), `update users set elo_1v1 = $1, elo_2v2 = $2, elo_3v3 = $3, elo_4v4 = $4, elo_custom = $5 where discord_id = $6 and guild_id = $7`, @@ -85,12 +85,11 @@ func UpdateUserElo(discordId string, guildId string, elo UserElo) error { return nil } -func GetUser(discordId string, guildId string) (*User, error) { +func GetUser(discordId string, guildId string) (u *User, err error) { row := Db.QueryRow(context.Background(), "select * from users where discord_id = $1 and guild_id = $2", discordId, guildId) - var oneVOne, twoVTwo, threeVThree, fourVFour, custom pgtype.Int4 - u := &User{} - if err := row.Scan( + var oneVOne, twoVTwo, threeVThree, fourVFour, custom pgtype.Int2 + if err = row.Scan( &u.DiscordUserID, &u.Aoe4Username, nil, @@ -103,9 +102,9 @@ func GetUser(discordId string, guildId string) (*User, error) { return &User{}, err } - u.pgToInt(oneVOne, twoVTwo, threeVThree, fourVFour, custom) + u.pgToCurrentElo(oneVOne, twoVTwo, threeVThree, fourVFour, custom) - return u, nil + return } func GetUsers(guildId string) (users []User, err error) { @@ -116,8 +115,8 @@ func GetUsers(guildId string) (users []User, err error) { defer rows.Close() for rows.Next() { - var oneVOne, twoVTwo, threeVThree, fourVFour, custom pgtype.Int4 - u := User{} + var u User + var oneVOne, twoVTwo, threeVThree, fourVFour, custom pgtype.Int2 if err := rows.Scan( &u.DiscordUserID, &u.Aoe4Username, @@ -131,7 +130,7 @@ func GetUsers(guildId string) (users []User, err error) { return nil, err } - u.pgToInt(oneVOne, twoVTwo, threeVThree, fourVFour, custom) + u.pgToCurrentElo(oneVOne, twoVTwo, threeVThree, fourVFour, custom) users = append(users, u) } @@ -139,12 +138,12 @@ func GetUsers(guildId string) (users []User, err error) { return } -func (u *User) pgToInt( - oneVOne pgtype.Int4, - twoVTwo pgtype.Int4, - threeVThree pgtype.Int4, - fourVFour pgtype.Int4, - custom pgtype.Int4, +func (u *User) pgToCurrentElo( + oneVOne pgtype.Int2, + twoVTwo pgtype.Int2, + threeVThree pgtype.Int2, + fourVFour pgtype.Int2, + custom pgtype.Int2, ) { if config.Cfg.OneVOne.Enabled && oneVOne.Status == pgtype.Present { u.CurrentElo.OneVOne = oneVOne.Int diff --git a/internal/db/elostring.go b/internal/db/elostring.go deleted file mode 100644 index 3cf569d..0000000 --- a/internal/db/elostring.go +++ /dev/null @@ -1,33 +0,0 @@ -package db - -import ( - "fmt" - "strings" - - "github.com/alexisgeoffrey/aoe4elobot/v2/internal/config" -) - -func (elo *UserElo) GenerateEloString(name string) string { - builder := strings.Builder{} - builder.WriteString(fmt.Sprintf("%s:\n", name)) - - eloVals := []int32{ - elo.OneVOne, - elo.TwoVTwo, - elo.ThreeVThree, - elo.FourVFour, - elo.Custom, - } - - for i, label := range [...]string{"1v1", "2v2", "3v3", "4v4", "Custom"} { - if config.Cfg.EloTypes[i].Enabled { - if eloVals[i] == 0 { - builder.WriteString(fmt.Sprintf("%s: None\n", label)) - } else { - builder.WriteString(fmt.Sprintf("%s: %d\n", label, eloVals[i])) - } - } - } - - return builder.String() -} diff --git a/internal/discordapi/discordapi.go b/internal/discordapi/discordapi.go index fde2346..97524cc 100644 --- a/internal/discordapi/discordapi.go +++ b/internal/discordapi/discordapi.go @@ -11,9 +11,7 @@ import ( "github.com/bwmarrin/discordgo" ) -const ( - usageString = "Usage:\n```\n!setEloInfo SteamUsername/XboxLiveUsername, STEAMID64/XboxLiveID\nAliases: !set, !link\n\n!updateElo\nAliases: !update, !u\n\n!eloInfo [@User]\nAliases: !info, !stats, !i, !s\n```\nFind STEAMID64 @ https://steamid.io/lookup" -) +const usageString = "Usage:\n```\n!setEloInfo SteamUsername/XboxLiveUsername, STEAMID64/XboxLiveID\nAliases: !set, !link\n\n!updateElo\nAliases: !update, !u\n\n!eloInfo [@User]\nAliases: !info, !stats, !i, !s\n```\nFind STEAMID64 @ https://steamid.io/lookup" var cmdMutex sync.Mutex @@ -67,7 +65,7 @@ func MessageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { cmdMutex.Lock() defer cmdMutex.Unlock() - getEloInfo(s, m, dedupedMessage) + getElo(s, m, dedupedMessage) case // !help lowerTrimmedMessage == "!help", @@ -164,7 +162,7 @@ func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage } } -func getEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage string) { +func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage string) { eloInfoError := func() { s.ChannelMessageSendReply( m.ChannelID, @@ -173,8 +171,11 @@ func getEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage } input := strings.SplitN(dedupedMessage, " ", 2) + var err error + var u *db.User + var targetMember *discordgo.Member if len(input) == 1 { - u, err := db.GetUser(m.Author.ID, m.GuildID) + u, err = db.GetUser(m.Author.ID, m.GuildID) if err != nil { s.ChannelMessageSendReply( m.ChannelID, @@ -184,23 +185,7 @@ func getEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage return } - if err := (*user)(u).updateMemberElo(s, m.GuildID); err != nil { - eloInfoError() - log.Printf("error updating member elo: %v\n", err) - return - } - - var name string - if m.Member.Nick != "" { - name = m.Member.Nick - } else { - name = m.Author.Username - } - - s.ChannelMessageSendReply( - m.ChannelID, - u.NewElo.GenerateEloString(name), - m.Reference()) + targetMember = m.Member } else if len(input) == 2 { if !strings.HasPrefix(input[1], "<@") { eloInfoError() @@ -218,29 +203,12 @@ func getEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage return } - if err := (*user)(u).updateMemberElo(s, m.GuildID); err != nil { - eloInfoError() - log.Printf("error updating member elo: %v\n", err) - return - } - - targetMember, err := s.State.Member(m.GuildID, u.DiscordUserID) + targetMember, err = s.State.Member(m.GuildID, u.DiscordUserID) if err != nil { eloInfoError() log.Printf("error getting member %s from state: %v", u.DiscordUserID, err) + return } - - var name string - if targetMember.Nick == "" { - name = targetMember.User.Username - } else { - name = targetMember.Nick - } - - s.ChannelMessageSendReply( - m.ChannelID, - u.NewElo.GenerateEloString(name), - m.Reference()) } else { s.ChannelMessageSendReply( m.ChannelID, @@ -248,4 +216,20 @@ func getEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage m.Reference()) log.Printf("error getting info: %v\n", fmt.Errorf("invalid input for info: %s", m.Content)) } + + if err := (*user)(u).updateMemberElo(s, m.GuildID); err != nil { + eloInfoError() + log.Printf("error updating member elo: %v\n", err) + return + } + + if err := (*user)(u).updateMemberEloRoles(s, m.GuildID); err != nil { + log.Printf("error getting member elo: %v", err) + return + } + + s.ChannelMessageSendReply( + m.ChannelID, + (*user)(u).EloString(targetMember), + m.Reference()) } diff --git a/internal/discordapi/user.go b/internal/discordapi/user.go index e123544..6773a77 100644 --- a/internal/discordapi/user.go +++ b/internal/discordapi/user.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "log" + "strings" "sync" "github.com/alexisgeoffrey/aoe4api" @@ -43,15 +44,15 @@ func UpdateGuildElo(s *discordgo.Session, guildId string) error { func (u *user) updateMemberElo(s *discordgo.Session, guildId string) (err error) { eloAndTs := []struct { - currentElo *int32 - newElo *int32 + newElo *int16 + currentElo int16 teamSize aoe4api.TeamSize }{ - {&u.CurrentElo.OneVOne, &u.NewElo.OneVOne, aoe4api.OneVOne}, - {&u.CurrentElo.TwoVTwo, &u.NewElo.TwoVTwo, aoe4api.TwoVTwo}, - {&u.CurrentElo.ThreeVThree, &u.NewElo.ThreeVThree, aoe4api.ThreeVThree}, - {&u.CurrentElo.FourVFour, &u.NewElo.FourVFour, aoe4api.FourVFour}, - {&u.CurrentElo.Custom, &u.NewElo.Custom, 5}, + {&u.NewElo.OneVOne, u.CurrentElo.OneVOne, aoe4api.OneVOne}, + {&u.NewElo.TwoVTwo, u.CurrentElo.TwoVTwo, aoe4api.TwoVTwo}, + {&u.NewElo.ThreeVThree, u.CurrentElo.ThreeVThree, aoe4api.ThreeVThree}, + {&u.NewElo.FourVFour, u.CurrentElo.FourVFour, aoe4api.FourVFour}, + {&u.NewElo.Custom, u.CurrentElo.Custom, 5}, } builder := aoe4api.NewRequestBuilder(). @@ -83,12 +84,12 @@ func (u *user) updateMemberElo(s *discordgo.Session, guildId string) (err error) defer wg.Done() memberElo, err := req.QueryElo(u.Aoe4Id) if err != nil { - *eloAndTs[i].newElo = *eloAndTs[i].currentElo + *eloAndTs[i].newElo = eloAndTs[i].currentElo // log.Printf("no response from api for %s for elo %s", u.Aoe4Username, [...]string{"1v1", "2v2", "3v3", "4v4", "Custom"}[i]) return } - *eloAndTs[i].newElo = int32(memberElo) + *eloAndTs[i].newElo = int16(memberElo) }(i) } wg.Wait() @@ -125,7 +126,7 @@ func (u *user) updateMemberEloRoles(s *discordgo.Session, guildId string) error eloTypeLoop: for _, eloType := range config.Cfg.EloTypes { var currentRoleId string - var currentRolePriority int32 = 9999 + var currentRolePriority int16 = 9999 for _, currentRole := range member.Roles { if rolePriority, ok := eloType.RoleMap[currentRole]; ok { currentRoleId = currentRole @@ -168,21 +169,18 @@ eloTypeLoop: return nil } -func (u *user) getHighestElo() (highestElo int32) { - oldNewElo := []struct { - oldElo int32 - newElo int32 - }{ - {u.CurrentElo.OneVOne, u.NewElo.OneVOne}, - {u.CurrentElo.TwoVTwo, u.NewElo.TwoVTwo}, - {u.CurrentElo.ThreeVThree, u.NewElo.ThreeVThree}, - {u.CurrentElo.FourVFour, u.NewElo.FourVFour}, - {u.CurrentElo.Custom, u.NewElo.Custom}, +func (u *user) getHighestElo() (highestElo int16) { + eloVals := []int16{ + u.NewElo.OneVOne, + u.NewElo.TwoVTwo, + u.NewElo.ThreeVThree, + u.NewElo.FourVFour, + u.NewElo.Custom, } - for _, elo := range oldNewElo { - if elo.newElo > highestElo { - highestElo = elo.newElo + for _, elo := range eloVals { + if elo > highestElo { + highestElo = elo } } @@ -206,3 +204,35 @@ func changeMemberEloRole(s *discordgo.Session, m *discordgo.Member, currentRoleI return nil } + +func (u *user) EloString(m *discordgo.Member) string { + builder := strings.Builder{} + + var name string + if m.Nick != "" { + name = m.Nick + } else { + name = m.User.Username + } + builder.WriteString(fmt.Sprintf("%s:\n", name)) + + eloVals := []int16{ + u.NewElo.OneVOne, + u.NewElo.TwoVTwo, + u.NewElo.ThreeVThree, + u.NewElo.FourVFour, + u.NewElo.Custom, + } + + for i, label := range [...]string{"1v1", "2v2", "3v3", "4v4", "Custom"} { + if config.Cfg.EloTypes[i].Enabled { + if eloVals[i] == 0 { + builder.WriteString(fmt.Sprintf("%s: None\n", label)) + } else { + builder.WriteString(fmt.Sprintf("%s: %d\n", label, eloVals[i])) + } + } + } + + return builder.String() +} From 6cf548a1495fab9a0bd9ae698e82b24652cbc156 Mon Sep 17 00:00:00 2001 From: alexisgeoffrey Date: Fri, 22 Apr 2022 15:12:13 -0500 Subject: [PATCH 2/5] return nil instead of pointer to empty user for getUser error move member retrieval out of elostring function --- internal/db/db.go | 12 ++++++------ internal/discordapi/discordapi.go | 9 ++++++++- internal/discordapi/user.go | 12 +++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index 35bdf78..5c43adb 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -41,11 +41,11 @@ func init() { username text not null, guild_id varchar(20), aoe_id varchar(40) not null, - elo_1v1 int, - elo_2v2 int, - elo_3v3 int, - elo_4v4 int, - elo_custom int, + elo_1v1 smallint, + elo_2v2 smallint, + elo_3v3 smallint, + elo_4v4 smallint, + elo_custom smallint, primary key(discord_id, guild_id) )`); err != nil { log.Fatalf("error setting up database: %v\n", err) @@ -99,7 +99,7 @@ func GetUser(discordId string, guildId string) (u *User, err error) { &threeVThree, &fourVFour, &custom); err != nil { - return &User{}, err + return nil, err } u.pgToCurrentElo(oneVOne, twoVTwo, threeVThree, fourVFour, custom) diff --git a/internal/discordapi/discordapi.go b/internal/discordapi/discordapi.go index 97524cc..3a10142 100644 --- a/internal/discordapi/discordapi.go +++ b/internal/discordapi/discordapi.go @@ -228,8 +228,15 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str return } + var name string + if targetMember.Nick != "" { + name = targetMember.Nick + } else { + name = targetMember.User.Username + } + s.ChannelMessageSendReply( m.ChannelID, - (*user)(u).EloString(targetMember), + (*user)(u).EloString(name), m.Reference()) } diff --git a/internal/discordapi/user.go b/internal/discordapi/user.go index 6773a77..85c6a1c 100644 --- a/internal/discordapi/user.go +++ b/internal/discordapi/user.go @@ -205,15 +205,9 @@ func changeMemberEloRole(s *discordgo.Session, m *discordgo.Member, currentRoleI return nil } -func (u *user) EloString(m *discordgo.Member) string { - builder := strings.Builder{} - - var name string - if m.Nick != "" { - name = m.Nick - } else { - name = m.User.Username - } +func (u *user) EloString(name string) string { + var builder strings.Builder + builder.WriteString(fmt.Sprintf("%s:\n", name)) eloVals := []int16{ From dcd21f8419864958ee323aedfe1c56a841aeb9b3 Mon Sep 17 00:00:00 2001 From: alexisgeoffrey Date: Fri, 22 Apr 2022 15:17:04 -0500 Subject: [PATCH 3/5] fix null ref in db.GetUser --- internal/db/db.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index 5c43adb..aa8f6a6 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -85,11 +85,12 @@ func UpdateUserElo(discordId string, guildId string, elo userElo) error { return nil } -func GetUser(discordId string, guildId string) (u *User, err error) { +func GetUser(discordId string, guildId string) (*User, error) { row := Db.QueryRow(context.Background(), "select * from users where discord_id = $1 and guild_id = $2", discordId, guildId) + u := &User{} var oneVOne, twoVTwo, threeVThree, fourVFour, custom pgtype.Int2 - if err = row.Scan( + if err := row.Scan( &u.DiscordUserID, &u.Aoe4Username, nil, @@ -104,7 +105,7 @@ func GetUser(discordId string, guildId string) (u *User, err error) { u.pgToCurrentElo(oneVOne, twoVTwo, threeVThree, fourVFour, custom) - return + return u, nil } func GetUsers(guildId string) (users []User, err error) { From ab674de3d2a57c36d3cb0d1373548f900a2bd66d Mon Sep 17 00:00:00 2001 From: alexisgeoffrey Date: Fri, 22 Apr 2022 15:42:12 -0500 Subject: [PATCH 4/5] fix targetmember null ref in getelo --- internal/discordapi/discordapi.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/internal/discordapi/discordapi.go b/internal/discordapi/discordapi.go index 3a10142..0c54f22 100644 --- a/internal/discordapi/discordapi.go +++ b/internal/discordapi/discordapi.go @@ -173,7 +173,7 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str input := strings.SplitN(dedupedMessage, " ", 2) var err error var u *db.User - var targetMember *discordgo.Member + var targetName string if len(input) == 1 { u, err = db.GetUser(m.Author.ID, m.GuildID) if err != nil { @@ -185,7 +185,11 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str return } - targetMember = m.Member + if m.Member.Nick != "" { + targetName = m.Member.Nick + } else { + targetName = m.Author.Username + } } else if len(input) == 2 { if !strings.HasPrefix(input[1], "<@") { eloInfoError() @@ -203,18 +207,22 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str return } - targetMember, err = s.State.Member(m.GuildID, u.DiscordUserID) + targetMember, err := s.State.Member(m.GuildID, u.DiscordUserID) if err != nil { eloInfoError() log.Printf("error getting member %s from state: %v", u.DiscordUserID, err) return } + + if targetMember.Nick != "" { + targetName = targetMember.Nick + } else { + targetName = targetMember.User.Username + } } else { - s.ChannelMessageSendReply( - m.ChannelID, - fmt.Sprint("Unable to retrieve Elo info.\n", usageString), - m.Reference()) + eloInfoError() log.Printf("error getting info: %v\n", fmt.Errorf("invalid input for info: %s", m.Content)) + return } if err := (*user)(u).updateMemberElo(s, m.GuildID); err != nil { @@ -228,15 +236,8 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str return } - var name string - if targetMember.Nick != "" { - name = targetMember.Nick - } else { - name = targetMember.User.Username - } - s.ChannelMessageSendReply( m.ChannelID, - (*user)(u).EloString(name), + (*user)(u).EloString(targetName), m.Reference()) } From fed3b65ff8c984922e61a3656107c627f8a3130b Mon Sep 17 00:00:00 2001 From: alexisgeoffrey Date: Fri, 22 Apr 2022 15:52:31 -0500 Subject: [PATCH 5/5] disable errcheck linting of channel message send add error check to user.updateMemberElo --- internal/discordapi/discordapi.go | 24 ++++++++++++------------ internal/discordapi/user.go | 6 ++++-- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/internal/discordapi/discordapi.go b/internal/discordapi/discordapi.go index 0c54f22..2fad719 100644 --- a/internal/discordapi/discordapi.go +++ b/internal/discordapi/discordapi.go @@ -41,14 +41,14 @@ func MessageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { cmdMutex.Lock() defer cmdMutex.Unlock() - s.ChannelMessageSend(m.ChannelID, "Updating elo...") + s.ChannelMessageSend(m.ChannelID, "Updating elo...") //nolint:errcheck if err := UpdateGuildElo(s, m.GuildID); err != nil { - s.ChannelMessageSend(m.ChannelID, "Elo failed to update.") + s.ChannelMessageSend(m.ChannelID, "Elo failed to update.") //nolint:errcheck log.Printf("error updating elo: %v\n", err) return } - s.ChannelMessageSend(m.ChannelID, "Elo updated!") + s.ChannelMessageSend(m.ChannelID, "Elo updated!") //nolint:errcheck case // !eloInfo lowerTrimmedMessage == "!eloinfo", @@ -71,13 +71,13 @@ func MessageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { lowerTrimmedMessage == "!help", lowerTrimmedMessage == "!h": - s.ChannelMessageSend(m.ChannelID, usageString) + s.ChannelMessageSend(m.ChannelID, usageString) //nolint:errcheck } } func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage string) { setEloInfoError := func() { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("Your AOE4 info failed to update.\n", usageString), m.Reference()) @@ -97,7 +97,7 @@ func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage } else { targetMember, err := s.State.Member(m.GuildID, m.Author.ID) if err != nil { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("Unable to retrieve Elo info.\n", usageString), m.Reference()) @@ -114,7 +114,7 @@ func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage } if !isAdmin { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("Insufficient privileges to set Elo info for another user.\n", usageString), m.Reference()) @@ -136,7 +136,7 @@ func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage aoe4Username, aoe4Id := strings.TrimSpace(infoInput[0]), strings.TrimSpace(infoInput[1]) sendUpdateMessage := func(mention string) { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprintf("%s's AOE4 username has been updated to %s and ID has been updated to %s.", mention, @@ -164,7 +164,7 @@ func setEloInfo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage string) { eloInfoError := func() { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("Unable to retrieve Elo info.\n", usageString), m.Reference()) @@ -177,7 +177,7 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str if len(input) == 1 { u, err = db.GetUser(m.Author.ID, m.GuildID) if err != nil { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("You are not registered.\n", usageString), m.Reference()) @@ -199,7 +199,7 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str u, err := db.GetUser(strings.Trim(input[1], "<@>"), m.GuildID) if err != nil { - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, fmt.Sprint("User is not registered.\n", usageString), m.Reference()) @@ -236,7 +236,7 @@ func getElo(s *discordgo.Session, m *discordgo.MessageCreate, dedupedMessage str return } - s.ChannelMessageSendReply( + s.ChannelMessageSendReply( //nolint:errcheck m.ChannelID, (*user)(u).EloString(targetName), m.Reference()) diff --git a/internal/discordapi/user.go b/internal/discordapi/user.go index 85c6a1c..556acca 100644 --- a/internal/discordapi/user.go +++ b/internal/discordapi/user.go @@ -30,7 +30,9 @@ func UpdateGuildElo(s *discordgo.Session, guildId string) error { go func(i int) { defer wg.Done() user := (*user)(&users[i]) - user.updateMemberElo(s, guildId) + if err := user.updateMemberElo(s, guildId); err != nil { + log.Println(err) + } }(i) } wg.Wait() @@ -149,7 +151,7 @@ eloTypeLoop: } if currentRolePriority > role.RolePriority { - s.ChannelMessageSend( + s.ChannelMessageSend( //nolint:errcheck config.Cfg.BotChannelId, fmt.Sprintf("Congrats %s, you are now in %s!", member.Mention(),