add DeleteCommand functionality

This commit is contained in:
Dawid Wysokiński 2020-05-30 10:54:28 +02:00
parent 24d784f6ae
commit fa7dda85e4
2 changed files with 64 additions and 22 deletions

View File

@ -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 {

View File

@ -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"`
}