package modules import ( "github.com/bwmarrin/discordgo" "TerraOceanBot/db" "TerraOceanBot/discord/config" ) var minecraftConfirmReact = make(map[string]string) var updateMinecraftUsername = memberFilter(true, enforceArgumentCount( config.SetMCUsernameUsage, 2, func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) { oldUsername, err := db.GetMinecraftUsername(m.Author.ID) if err != nil { if err == db.ErrNotFound { processUsernameUpdate(s, m.Author.ID, m.ChannelID, command[1]) return } auditError(s, m.ChannelID, err) return } if oldUsername == command[1] { initNewEmbed(config.SetMCUsernameErrorTitle, config.ErrorSetMCUsernameDuplicate, config.ErrorColour). Send(s, m.ChannelID) return } msg, err := initNewEmbed( config.SetMCUsernameConfirmTitle, config.SetMCUsernameConfirmDescription, config.SetMCUsernameConfirmColour, ).AddField(config.SetMCUsernameConfirmOldUsername, oldUsername). AddField(config.SetMCUsernameConfirmNewUsername, command[1]). SendPM(s, m.Author.ID) if err != nil { auditError(s, m.ChannelID, err) } minecraftConfirmReact[msg.ID] = command[1] s.MessageReactionAdd(msg.ChannelID, msg.ID, emojiCheck) s.MessageReactionAdd(msg.ChannelID, msg.ID, emojiX) }, )) func ConfirmMinecraftUsername(s *discordgo.Session, r *discordgo.MessageReactionAdd) { if r.UserID == s.State.User.ID { return } newUsername, ok := minecraftConfirmReact[r.MessageID] if !ok { return } delete(minecraftConfirmReact, r.MessageID) switch r.Emoji.Name { case emojiCheck: case emojiX: initNewEmbed(config.SetMCUsernameConfirmDeniedTitle, config.SetMCUsernameConfirmDeniedDescription, config.SuccessColour). Send(s, r.ChannelID) return } processUsernameUpdate(s, r.UserID, r.ChannelID, newUsername) } func processUsernameUpdate(s *discordgo.Session, discordID, channelID, newUsername string) { err := db.SetMinecraftUsername(discordID, newUsername) if err == db.ErrAlreadyExists { initNewEmbed( config.SetMCUsernameErrorTitle, config.ErrorSetMCUsernameAlreadyOwned, config.ErrorColour, ).Send(s, channelID) return } initNewEmbed( config.SetMCUsernameSuccessTitle, config.SetMCUsernameSuccessDescription, config.SuccessColour, ).Send(s, channelID) }