TerraOceanPlugin/GoBot/discord/modules/minecraft.go

93 lines
2.5 KiB
Go

package modules
import (
"github.com/bwmarrin/discordgo"
"TerraOceanBot/db"
"TerraOceanBot/discord/backend"
"TerraOceanBot/discord/config"
"TerraOceanBot/server"
)
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) {
oldUsername, oldErr := db.GetMinecraftUsername(discordID)
err := db.SetMinecraftUsername(discordID, newUsername)
if err == db.ErrAlreadyExists {
initNewEmbed(
config.SetMCUsernameErrorTitle,
config.ErrorSetMCUsernameAlreadyOwned,
config.ErrorColour,
).Send(s, channelID)
return
}
backend.UpdateVoiceChannelState(s)
if oldErr == nil {
server.WhitelistRemove(oldUsername)
}
initNewEmbed(
config.SetMCUsernameSuccessTitle,
config.SetMCUsernameSuccessDescription,
config.SuccessColour,
).Send(s, channelID)
}