From fa7dda85e41cee13c11d1a341999d492618d6c63 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sat, 30 May 2020 10:54:28 +0200 Subject: [PATCH] add DeleteCommand functionality --- discord/discord.go | 77 +++++++++++++++++++++++++++++++++++----------- models/tribe.go | 9 +++--- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/discord/discord.go b/discord/discord.go index f59a737..a61c10a 100644 --- a/discord/discord.go +++ b/discord/discord.go @@ -3,7 +3,6 @@ package discord import ( "context" "fmt" - "log" "strconv" "strings" "twdcbot/models" @@ -63,7 +62,7 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre if m.Author.ID == s.dg.State.User.ID || m.Author.Bot || m.GuildID == "" { return } - if has, err := s.MemberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has { + if has, err := s.memberHasPermission(m.GuildID, m.Author.ID, discordgo.PermissionAdministrator); err != nil || !has { return } splitted := strings.Split(m.Content, " ") @@ -71,29 +70,40 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre args := splitted[1 : argsLength+1] switch splitted[0] { case HelpCommand.WithPrefix(s.cfg.CommandPrefix): - if argsLength == 0 { - s.sendHelpMessage(m.Author.Mention(), m.ChannelID) - } else { - s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args...) - } - break + s.handleHelpCommand(m) case AddCommand.WithPrefix(s.cfg.CommandPrefix): - if argsLength > 2 { - s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, splitted[3:argsLength+1]...) - return - } else if argsLength < 2 { - s.sendMessage(m.ChannelID, m.Author.Mention()+` tw!add [świat] [id_plemienia]`) - return - } s.handleAddCommand(m, args...) + case DeleteCommand.WithPrefix(s.cfg.CommandPrefix): + s.handleDeleteCommand(m, args...) + case ListCommand.WithPrefix(s.cfg.CommandPrefix): + case LostVillagesCommand.WithPrefix(s.cfg.CommandPrefix): + case ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix): } } +func (s *Session) handleHelpCommand(m *discordgo.MessageCreate) { + s.sendHelpMessage(m.Author.Mention(), m.ChannelID) +} + func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { + argsLength := len(args) + if argsLength > 2 { + s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[2:argsLength]...) + return + } else if argsLength < 2 { + s.sendMessage(m.ChannelID, + fmt.Sprintf("%s %s [świat] [id plemienia]", + m.Author.Mention(), + AddCommand.WithPrefix(s.cfg.CommandPrefix))) + return + } world := args[0] id, err := strconv.Atoi(args[1]) if err != nil { - s.sendMessage(m.ChannelID, m.Author.Mention()+` tw!add [świat] [id_plemienia]`) + s.sendMessage(m.ChannelID, + fmt.Sprintf("%s %s [świat] [id plemienia]", + m.Author.Mention(), + AddCommand.WithPrefix(s.cfg.CommandPrefix))) return } server := &models.Server{ @@ -108,7 +118,6 @@ func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { s.sendMessage(m.ChannelID, m.Author.Mention()+fmt.Sprintf(` Osiągnięto limit plemion (%d/%d).`, TribesPerServer, TribesPerServer)) return } - log.Println(world, id, server.Tribes) err = s.cfg.TribeRepository.Store(context.Background(), &models.Tribe{ World: world, TribeID: id, @@ -118,13 +127,45 @@ func (s *Session) handleAddCommand(m *discordgo.MessageCreate, args ...string) { s.sendMessage(m.ChannelID, m.Author.Mention()+` Nie udało się dodać plemienia do obserwowanych.`) return } + + s.sendMessage(m.ChannelID, m.Author.Mention()+` Dodano.`) +} + +func (s *Session) handleDeleteCommand(m *discordgo.MessageCreate, args ...string) { + argsLength := len(args) + if argsLength > 1 { + s.sendUnknownCommandError(m.Author.Mention(), m.ChannelID, args[1:argsLength]...) + return + } else if argsLength < 1 { + s.sendMessage(m.ChannelID, + fmt.Sprintf(`%s %s [id z tw!list]`, + m.Author.Mention(), + DeleteCommand.WithPrefix(s.cfg.CommandPrefix))) + return + } + + id, err := strconv.Atoi(args[0]) + if err != nil { + s.sendMessage(m.ChannelID, + fmt.Sprintf(`%s %s [id z tw!list]`, + m.Author.Mention(), + DeleteCommand.WithPrefix(s.cfg.CommandPrefix))) + return + } + + go s.cfg.TribeRepository.Delete(context.Background(), &models.TribeFilter{ + ServerID: []string{m.GuildID}, + ID: []int{id}, + }) + + s.sendMessage(m.ChannelID, m.Author.Mention()+` Usunięto.`) } func (s *Session) Close() error { return s.dg.Close() } -func (s *Session) MemberHasPermission(guildID string, userID string, permission int) (bool, error) { +func (s *Session) memberHasPermission(guildID string, userID string, permission int) (bool, error) { member, err := s.dg.State.Member(guildID, userID) if err != nil { if member, err = s.dg.GuildMember(guildID, userID); err != nil { diff --git a/models/tribe.go b/models/tribe.go index 2112282..2d55b0f 100644 --- a/models/tribe.go +++ b/models/tribe.go @@ -9,8 +9,9 @@ type Tribe struct { } type TribeFilter struct { - ID []string - Limit int `urlstruct:",nowhere"` - Offset int `urlstruct:",nowhere"` - Order []string `urlstruct:",nowhere"` + ID []int + ServerID []string + Limit int `urlstruct:",nowhere"` + Offset int `urlstruct:",nowhere"` + Order []string `urlstruct:",nowhere"` }