change the way discord message handlers are called

This commit is contained in:
Dawid Wysokiński 2020-10-17 10:27:58 +02:00
parent dc3dd073aa
commit 3a7248af58
6 changed files with 171 additions and 186 deletions

View File

@ -11,8 +11,8 @@ func (cmd Command) String() string {
return string(cmd) return string(cmd)
} }
func (cmd Command) WithPrefix(prefix string) string { func (cmd Command) WithPrefix(prefix string) Command {
return prefix + cmd.String() return Command(prefix + cmd.String())
} }
type commandCtx struct { type commandCtx struct {

View File

@ -20,11 +20,7 @@ const (
var coordsRegex = regexp.MustCompile(`(\d+)\|(\d+)`) var coordsRegex = regexp.MustCompile(`(\d+)\|(\d+)`)
func (s *Session) handleCoordsTranslationCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleCoordsTranslationCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength != 1 { if argsLength != 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
@ -67,11 +63,7 @@ func (s *Session) handleCoordsTranslationCommand(ctx commandCtx, m *discordgo.Me
})) }))
} }
func (s *Session) handleDisableCoordsTranslationCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleDisableCoordsTranslationCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
ctx.server.CoordsTranslation = "" ctx.server.CoordsTranslation = ""
go s.cfg.ServerRepository.Update(context.Background(), ctx.server) go s.cfg.ServerRepository.Update(context.Background(), ctx.server)
@ -86,7 +78,7 @@ func (s *Session) handleDisableCoordsTranslationCommand(ctx commandCtx, m *disco
})) }))
} }
func (s *Session) translateCoords(ctx commandCtx, m *discordgo.MessageCreate) { func (s *Session) translateCoords(ctx *commandCtx, m *discordgo.MessageCreate) {
if ctx.server.CoordsTranslation == "" { if ctx.server.CoordsTranslation == "" {
return return
} }

View File

@ -16,6 +16,23 @@ import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
) )
type handler struct {
cmd Command
requireAdmPermissions bool
fn func(ctx *commandCtx, m *discordgo.MessageCreate, args ...string)
}
type handlers []*handler
func (hs handlers) find(cmd Command) *handler {
for _, h := range hs {
if h.cmd == cmd {
return h
}
}
return nil
}
type SessionConfig struct { type SessionConfig struct {
Token string Token string
CommandPrefix string CommandPrefix string
@ -27,8 +44,9 @@ type SessionConfig struct {
} }
type Session struct { type Session struct {
dg *discordgo.Session dg *discordgo.Session
cfg SessionConfig cfg SessionConfig
handlers handlers
} }
func New(cfg SessionConfig) (*Session, error) { func New(cfg SessionConfig) (*Session, error) {
@ -47,6 +65,96 @@ func New(cfg SessionConfig) (*Session, error) {
} }
func (s *Session) init() error { func (s *Session) init() error {
s.handlers = handlers{
&handler{
cmd: HelpCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleHelpCommand,
},
&handler{
cmd: AuthorCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleAuthorCommand,
},
&handler{
cmd: TribeCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleTribeCommand,
},
&handler{
cmd: ChangeLanguageCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleChangeLanguageCommand,
requireAdmPermissions: true,
},
&handler{
cmd: AddGroupCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleAddGroupCommand,
requireAdmPermissions: true,
},
&handler{
cmd: DeleteGroupCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleDeleteGroupCommand,
requireAdmPermissions: true,
},
&handler{
cmd: GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleGroupsCommand,
requireAdmPermissions: true,
},
&handler{
cmd: ObserveCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleObserveCommand,
requireAdmPermissions: true,
},
&handler{
cmd: DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleDeleteObservationCommand,
requireAdmPermissions: true,
},
&handler{
cmd: ObservationsCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleObservationsCommand,
requireAdmPermissions: true,
},
&handler{
cmd: ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleConqueredVillagesCommand,
requireAdmPermissions: true,
},
&handler{
cmd: DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleDisableConqueredVillagesCommand,
requireAdmPermissions: true,
},
&handler{
cmd: LostVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleLostVillagesCommand,
requireAdmPermissions: true,
},
&handler{
cmd: DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleDisableLostVillagesCommand,
requireAdmPermissions: true,
},
&handler{
cmd: ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleShowEnnobledBarbariansCommand,
requireAdmPermissions: true,
},
&handler{
cmd: ShowInternalsCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleShowInternalsCommand,
requireAdmPermissions: true,
},
&handler{
cmd: CoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleCoordsTranslationCommand,
requireAdmPermissions: true,
},
&handler{
cmd: DisableCoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix),
fn: s.handleDisableCoordsTranslationCommand,
requireAdmPermissions: true,
},
}
s.dg.AddHandler(s.handleNewMessage) s.dg.AddHandler(s.handleNewMessage)
err := s.dg.Open() err := s.dg.Open()
@ -127,7 +235,7 @@ func (s *Session) IsGuildMember(guildID string) (bool, error) {
} }
func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCreate) { func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCreate) {
if m.Author.ID == s.dg.State.User.ID || m.Author.Bot || m.GuildID == "" { if m.Author.ID == s.dg.State.User.ID || m.Author.Bot {
return return
} }
@ -138,58 +246,32 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
ID: m.GuildID, ID: m.GuildID,
Lang: message.GetDefaultLanguage().String(), Lang: message.GetDefaultLanguage().String(),
} }
if err := s.cfg.ServerRepository.Store(context.Background(), server); err != nil { if server.ID != "" {
return if err := s.cfg.ServerRepository.Store(context.Background(), server); err != nil {
return
}
} }
ctx := commandCtx{ ctx := &commandCtx{
server: server, server: server,
localizer: message.NewLocalizer(server.Lang), localizer: message.NewLocalizer(server.Lang),
} }
switch splitted[0] { h := s.handlers.find(Command(splitted[0]))
case HelpCommand.WithPrefix(s.cfg.CommandPrefix): if h != nil {
s.handleHelpCommand(ctx, m) if h.requireAdmPermissions {
case AuthorCommand.WithPrefix(s.cfg.CommandPrefix): if m.GuildID == "" {
s.handleAuthorCommand(m) return
case TribeCommand.WithPrefix(s.cfg.CommandPrefix): }
s.handleTribeCommand(ctx, m, args...) has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator)
if err != nil || !has {
case ChangeLanguageCommand.WithPrefix(s.cfg.CommandPrefix): return
s.handleChangeLanguageCommand(ctx, m, args...) }
}
case AddGroupCommand.WithPrefix(s.cfg.CommandPrefix): h.fn(ctx, m, args...)
s.handleAddGroupCommand(ctx, m) return
case DeleteGroupCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDeleteGroupCommand(ctx, m, args...)
case GroupsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleGroupsCommand(ctx, m)
case ObserveCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObserveCommand(ctx, m, args...)
case DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDeleteObservationCommand(ctx, m, args...)
case ObservationsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObservationsCommand(ctx, m, args...)
case ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleConqueredVillagesCommand(ctx, m, args...)
case DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDisableConqueredVillagesCommand(ctx, m, args...)
case LostVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleLostVillagesCommand(ctx, m, args...)
case DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDisableLostVillagesCommand(ctx, m, args...)
case ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowEnnobledBarbariansCommand(ctx, m, args...)
case ShowInternalsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowInternalsCommand(ctx, m, args...)
case CoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleCoordsTranslationCommand(ctx, m, args...)
case DisableCoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDisableCoordsTranslationCommand(ctx, m, args...)
default:
s.translateCoords(ctx, m)
} }
s.translateCoords(ctx, m)
} }
func (s *Session) memberHasPermission(guildID string, userID string, permission int) (bool, error) { func (s *Session) memberHasPermission(guildID string, userID string, permission int) (bool, error) {
@ -225,7 +307,3 @@ func (s *Session) memberHasPermission(guildID string, userID string, permission
return false, nil return false, nil
} }
func (s *Session) sendUnknownCommandError(mention, channelID string, command ...string) {
s.SendMessage(channelID, mention+` Unknown command: `+strings.Join(command, " "))
}

View File

@ -35,11 +35,7 @@ const (
ShowInternalsCommand Command = "showinternals" ShowInternalsCommand Command = "showinternals"
) )
func (s *Session) handleAddGroupCommand(ctx commandCtx, m *discordgo.MessageCreate) { func (s *Session) handleAddGroupCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
if len(ctx.server.Groups) >= groupsPerServer { if len(ctx.server.Groups) >= groupsPerServer {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -85,16 +81,9 @@ func (s *Session) handleAddGroupCommand(ctx commandCtx, m *discordgo.MessageCrea
})) }))
} }
func (s *Session) handleDeleteGroupCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleDeleteGroupCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpDeleteGroup, MessageID: message.HelpDeleteGroup,
@ -138,11 +127,7 @@ func (s *Session) handleDeleteGroupCommand(ctx commandCtx, m *discordgo.MessageC
})) }))
} }
func (s *Session) handleGroupsCommand(ctx commandCtx, m *discordgo.MessageCreate) { func (s *Session) handleGroupsCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
groups, _, err := s.cfg.GroupRepository.Fetch(context.Background(), &models.GroupFilter{ groups, _, err := s.cfg.GroupRepository.Fetch(context.Background(), &models.GroupFilter{
ServerID: []string{m.GuildID}, ServerID: []string{m.GuildID},
Order: []string{"id ASC"}, Order: []string{"id ASC"},
@ -183,16 +168,9 @@ func (s *Session) handleGroupsCommand(ctx commandCtx, m *discordgo.MessageCreate
MessageEmbed) MessageEmbed)
} }
func (s *Session) handleConqueredVillagesCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleConqueredVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpConqueredVillages, MessageID: message.HelpConqueredVillages,
@ -250,16 +228,9 @@ func (s *Session) handleConqueredVillagesCommand(ctx commandCtx, m *discordgo.Me
})) }))
} }
func (s *Session) handleDisableConqueredVillagesCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleDisableConqueredVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpDisableConqueredVillages, MessageID: message.HelpDisableConqueredVillages,
@ -319,16 +290,9 @@ func (s *Session) handleDisableConqueredVillagesCommand(ctx commandCtx, m *disco
})) }))
} }
func (s *Session) handleLostVillagesCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleLostVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpLostVillages, MessageID: message.HelpLostVillages,
@ -388,16 +352,9 @@ func (s *Session) handleLostVillagesCommand(ctx commandCtx, m *discordgo.Message
})) }))
} }
func (s *Session) handleDisableLostVillagesCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleDisableLostVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpDisableLostVillages, MessageID: message.HelpDisableLostVillages,
@ -458,16 +415,9 @@ func (s *Session) handleDisableLostVillagesCommand(ctx commandCtx, m *discordgo.
})) }))
} }
func (s *Session) handleObserveCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleObserveCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 3 { if argsLength != 3 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[3:argsLength]...)
return
} else if argsLength < 3 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpObserve, MessageID: message.HelpObserve,
@ -601,16 +551,9 @@ func (s *Session) handleObserveCommand(ctx commandCtx, m *discordgo.MessageCreat
})) }))
} }
func (s *Session) handleDeleteObservationCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleDeleteObservationCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 2 { if argsLength != 2 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[2:argsLength]...)
return
} else if argsLength < 2 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpDeleteObservation, MessageID: message.HelpDeleteObservation,
@ -679,16 +622,9 @@ func (s *Session) handleDeleteObservationCommand(ctx commandCtx, m *discordgo.Me
})) }))
} }
func (s *Session) handleObservationsCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpObservations, MessageID: message.HelpObservations,
@ -819,16 +755,9 @@ func (s *Session) handleObservationsCommand(ctx commandCtx, m *discordgo.Message
MessageEmbed) MessageEmbed)
} }
func (s *Session) handleShowEnnobledBarbariansCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleShowEnnobledBarbariansCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpShowEnnobledBarbs, MessageID: message.HelpShowEnnobledBarbs,
@ -906,16 +835,9 @@ func (s *Session) handleShowEnnobledBarbariansCommand(ctx commandCtx, m *discord
} }
} }
func (s *Session) handleChangeLanguageCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleChangeLanguageCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpChangageLanguage, MessageID: message.HelpChangageLanguage,
@ -957,6 +879,7 @@ func (s *Session) handleChangeLanguageCommand(ctx commandCtx, m *discordgo.Messa
})) }))
return return
} }
ctx.localizer = message.NewLocalizer(lang)
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -969,16 +892,9 @@ func (s *Session) handleChangeLanguageCommand(ctx commandCtx, m *discordgo.Messa
})) }))
} }
func (s *Session) handleShowInternalsCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleShowInternalsCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has {
return
}
argsLength := len(args) argsLength := len(args)
if argsLength > 1 { if argsLength != 1 {
s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...)
return
} else if argsLength < 1 {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ m.Author.Mention()+" "+ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpShowInternals, MessageID: message.HelpShowInternals,

View File

@ -26,8 +26,7 @@ const (
AuthorCommand Command = "author" AuthorCommand Command = "author"
) )
func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate) { func (s *Session) handleHelpCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
tribeCMDWithPrefix := TribeCommand.WithPrefix(s.cfg.CommandPrefix)
commandsForAll := fmt.Sprintf(` commandsForAll := fmt.Sprintf(`
- %s - %s
- %s - %s
@ -41,7 +40,7 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODA, DefaultMessage: message.FallbackMsg(message.HelpTribeTopODA,
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODA."), "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODA."),
TemplateData: map[string]interface{}{ TemplateData: map[string]interface{}{
"Command": tribeCMDWithPrefix + " " + TopODACommand.String(), "Command": TribeCommand + " " + TopODACommand,
}, },
}), }),
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -49,7 +48,7 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODD, DefaultMessage: message.FallbackMsg(message.HelpTribeTopODD,
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODD."), "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODD."),
TemplateData: map[string]interface{}{ TemplateData: map[string]interface{}{
"Command": tribeCMDWithPrefix + " " + TopODDCommand.String(), "Command": TribeCommand + " " + TopODDCommand,
}, },
}), }),
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -57,7 +56,7 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODS, DefaultMessage: message.FallbackMsg(message.HelpTribeTopODS,
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODS."), "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODS."),
TemplateData: map[string]interface{}{ TemplateData: map[string]interface{}{
"Command": tribeCMDWithPrefix + " " + TopODSCommand.String(), "Command": TribeCommand + " " + TopODSCommand,
}, },
}), }),
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -65,7 +64,7 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
DefaultMessage: message.FallbackMsg(message.HelpTribeTopOD, DefaultMessage: message.FallbackMsg(message.HelpTribeTopOD,
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by OD."), "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by OD."),
TemplateData: map[string]interface{}{ TemplateData: map[string]interface{}{
"Command": tribeCMDWithPrefix + " " + TopODCommand.String(), "Command": TribeCommand + " " + TopODCommand,
}, },
}), }),
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -73,7 +72,7 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
DefaultMessage: message.FallbackMsg(message.HelpTribeTopPoints, DefaultMessage: message.FallbackMsg(message.HelpTribeTopPoints,
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by points."), "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by points."),
TemplateData: map[string]interface{}{ TemplateData: map[string]interface{}{
"Command": tribeCMDWithPrefix + " " + TopPointsCommand.String(), "Command": TribeCommand + " " + TopPointsCommand,
}, },
}), }),
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
@ -258,20 +257,20 @@ func (s *Session) handleHelpCommand(ctx commandCtx, m *discordgo.MessageCreate)
})). })).
AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.HelpForAllUsers, MessageID: message.HelpForAllUsers,
DefaultMessage: message.FallbackMsg(message.HelpForAllUsers, "For all server members."), DefaultMessage: message.FallbackMsg(message.HelpForAllUsers, "For everyone"),
}), commandsForAll). }), commandsForAll).
AddField(forAdmins, commandsForGuildAdmins). AddField(forAdmins, commandsForGuildAdmins).
AddField(forAdmins+" 2", commandsForGuildAdmins2). AddField(forAdmins+" 2", commandsForGuildAdmins2).
MessageEmbed) MessageEmbed)
} }
func (s *Session) handleAuthorCommand(m *discordgo.MessageCreate) { func (s *Session) handleAuthorCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
s.SendMessage(m.ChannelID, s.SendMessage(m.ChannelID,
fmt.Sprintf("%s Discord: Kichiyaki#2064 | https://dawid-wysokinski.pl/#contact.", fmt.Sprintf("%s Discord: Kichiyaki#2064 | https://dawid-wysokinski.pl/#contact.",
m.Author.Mention())) m.Author.Mention()))
} }
func (s *Session) handleTribeCommand(ctx commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
argsLength := len(args) argsLength := len(args)
if argsLength < 3 { if argsLength < 3 {
return return

View File

@ -2,7 +2,7 @@
"help.title": "Help", "help.title": "Help",
"help.description": "Commands offered by the bot.", "help.description": "Commands offered by the bot.",
"help.footer": "", "help.footer": "",
"help.forAllUsers": "For all members", "help.forAllUsers": "For everyone",
"help.forAdmins": "For admins", "help.forAdmins": "For admins",
"help.tribe.topoda": "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODA.", "help.tribe.topoda": "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODA.",
"help.tribe.topodd": "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODD.", "help.tribe.topodd": "**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODD.",