diff --git a/discord/admin_commands.go b/discord/admin_commands.go new file mode 100644 index 0000000..048c6f2 --- /dev/null +++ b/discord/admin_commands.go @@ -0,0 +1,76 @@ +package discord + +import ( + "context" + "github.com/bwmarrin/discordgo" + "github.com/nicksnyder/go-i18n/v2/i18n" + + "github.com/tribalwarshelp/dcbot/message" +) + +const ( + ChangeLanguageCommand Command = "changelanguage" +) + +type hndlrChangeLanguage struct { + *Session +} + +var _ commandHandler = &hndlrChangeLanguage{} + +func (hndlr *hndlrChangeLanguage) cmd() Command { + return ChangeLanguageCommand +} + +func (hndlr *hndlrChangeLanguage) requireAdmPermissions() bool { + return true +} + +func (hndlr *hndlrChangeLanguage) execute(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) { + argsLength := len(args) + if argsLength != 1 { + hndlr.SendMessage(m.ChannelID, + m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ + MessageID: message.HelpChangageLanguage, + TemplateData: map[string]interface{}{ + "Command": hndlr.cmd().WithPrefix(hndlr.cfg.CommandPrefix), + "Languages": getAvailableLanguages(), + }, + })) + return + } + + lang := args[0] + valid := isValidLanguageTag(lang) + if !valid { + hndlr.SendMessage(m.ChannelID, + ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ + MessageID: message.ChangeLanguageLanguageNotSupported, + TemplateData: map[string]interface{}{ + "Mention": m.Author.Mention(), + }, + })) + return + } + + ctx.server.Lang = lang + if err := hndlr.cfg.ServerRepository.Update(context.Background(), ctx.server); err != nil { + hndlr.SendMessage(m.ChannelID, + ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ + MessageID: message.InternalServerError, + TemplateData: map[string]interface{}{ + "Mention": m.Author.Mention(), + }, + })) + return + } + ctx.localizer = message.NewLocalizer(lang) + + hndlr.SendMessage(m.ChannelID, + ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ + MessageID: message.ChangeLanguageSuccess, + TemplateData: map[string]interface{}{ + "Mention": m.Author.Mention(), + }, + })) +} diff --git a/discord/observations.go b/discord/observations.go index acf997e..0906eec 100644 --- a/discord/observations.go +++ b/discord/observations.go @@ -35,7 +35,6 @@ const ( DisableLostVillagesCommand Command = "disablelostvillages" ConqueredVillagesCommand Command = "conqueredvillages" DisableConqueredVillagesCommand Command = "disableconqueredvillages" - ChangeLanguageCommand Command = "changelanguage" ShowInternalsCommand Command = "showinternals" ) @@ -901,69 +900,6 @@ func (hndlr *hndlrShowEnnobledBarbarians) execute(ctx *commandCtx, m *discordgo. })) } -type hndlrChangeLanguage struct { - *Session -} - -var _ commandHandler = &hndlrChangeLanguage{} - -func (hndlr *hndlrChangeLanguage) cmd() Command { - return ChangeLanguageCommand -} - -func (hndlr *hndlrChangeLanguage) requireAdmPermissions() bool { - return true -} - -func (hndlr *hndlrChangeLanguage) execute(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) { - argsLength := len(args) - if argsLength != 1 { - hndlr.SendMessage(m.ChannelID, - m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ - MessageID: message.HelpChangageLanguage, - TemplateData: map[string]interface{}{ - "Command": hndlr.cmd().WithPrefix(hndlr.cfg.CommandPrefix), - "Languages": getAvailableLanguages(), - }, - })) - return - } - - lang := args[0] - valid := isValidLanguageTag(lang) - if !valid { - hndlr.SendMessage(m.ChannelID, - ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ - MessageID: message.ChangeLanguageLanguageNotSupported, - TemplateData: map[string]interface{}{ - "Mention": m.Author.Mention(), - }, - })) - return - } - - ctx.server.Lang = lang - if err := hndlr.cfg.ServerRepository.Update(context.Background(), ctx.server); err != nil { - hndlr.SendMessage(m.ChannelID, - ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ - MessageID: message.InternalServerError, - TemplateData: map[string]interface{}{ - "Mention": m.Author.Mention(), - }, - })) - return - } - ctx.localizer = message.NewLocalizer(lang) - - hndlr.SendMessage(m.ChannelID, - ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ - MessageID: message.ChangeLanguageSuccess, - TemplateData: map[string]interface{}{ - "Mention": m.Author.Mention(), - }, - })) -} - type hndlrShowInternals struct { *Session }