diff --git a/internal/history/member.go b/internal/history/member.go new file mode 100644 index 0000000..c1bd4ea --- /dev/null +++ b/internal/history/member.go @@ -0,0 +1,65 @@ +package history + +import ( + "context" + "math280h/wisp/db" + "math280h/wisp/internal/shared" + + "github.com/bwmarrin/discordgo" + "github.com/rs/zerolog/log" +) + +func updateNickIfChanged(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { + userObj, err := shared.GetUserIfExists(&discordgo.User{ + ID: m.Member.User.ID, + }) + if err != nil { + log.Error().Err(err).Msg("Failed to get user") + return + } + + newNick := m.Nick + + if userObj.Nickname != newNick { + log.Debug().Msg("Nickname changed" + newNick) + if newNick == "" { + newNick = m.Member.User.Username + } + user := m.Member.User + + _, err = shared.DBClient.User.FindUnique( + db.User.UserID.Equals(user.ID), + ).Update( + db.User.Nickname.Set(newNick), + ).Exec(context.Background()) + if err != nil { + log.Error().Err(err).Msg("Failed to update nickname") + return + } + + embed := discordgo.MessageEmbed{ + Title: "Nickname Changed", + Description: user.Mention() + " (" + user.String() + ")", + Color: shared.DarkBlue, + Fields: []*discordgo.MessageEmbedField{ + { + Name: "Old Nickname", + Value: userObj.Nickname, + }, + { + Name: "New Nickname", + Value: newNick, + }, + }, + } + + _, channelErr := s.ChannelMessageSendEmbed(*shared.HistoryChannel, &embed) + if channelErr != nil { + log.Error().Err(channelErr).Msg("Failed to send message") + } + } +} + +func OnGuildMemberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { + updateNickIfChanged(s, m) +} diff --git a/internal/history/nicknames.go b/internal/history/nicknames.go deleted file mode 100644 index 6d424ae..0000000 --- a/internal/history/nicknames.go +++ /dev/null @@ -1,55 +0,0 @@ -package history - -import ( - "math280h/wisp/internal/shared" - - "github.com/bwmarrin/discordgo" - "github.com/rs/zerolog/log" -) - -func OnGuildMemberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { - var oldNick string - var beforeUpdateFailed = false - // TODO:: Improve this logic by keeping track of display name in user table - if m.BeforeUpdate == nil { - log.Debug().Msg("BeforeUpdate is nil, possibly because nick was changed while bot was booting up") - oldNick = m.Member.User.String() - beforeUpdateFailed = true - } else { - oldNick = m.BeforeUpdate.Nick - } - - newNick := m.Nick - - if oldNick != newNick { - user := m.Member.User - - var oldMsg string - if beforeUpdateFailed { - oldMsg = oldNick + " (Failed to get old nickname, possibly changed while bot was booting up)" - } else { - oldMsg = oldNick - } - - embed := discordgo.MessageEmbed{ - Title: "Nickname Changed", - Description: user.Mention() + " (" + user.String() + ")", - Color: shared.DarkBlue, - Fields: []*discordgo.MessageEmbedField{ - { - Name: "Old Nickname", - Value: oldMsg, - }, - { - Name: "New Nickname", - Value: newNick, - }, - }, - } - - _, err := s.ChannelMessageSendEmbed(*shared.HistoryChannel, &embed) - if err != nil { - log.Error().Err(err).Msg("Failed to send message") - } - } -}