Compare commits

...

2 Commits

Author SHA1 Message Date
141acc6980
Add a command router
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
This will only required one handler for all of the commands
2022-09-05 16:55:07 -05:00
0f25b75fe4
Add forgotten imports
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2022-09-05 15:14:42 -05:00
3 changed files with 93 additions and 1 deletions

87
bot/command.go Normal file
View File

@ -0,0 +1,87 @@
package bot
import (
"fmt"
"git.kill0.net/chill9/beepboop/lib"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)
var (
DefaultCommander *Commander
)
type (
Commander struct {
commands map[string]*Command
}
Command struct {
Name string
Config Config
Func func(cmd *Command, args []string) error
Session *discordgo.Session
Message *discordgo.MessageCreate
}
)
func init() {
DefaultCommander = NewCommander()
}
func NewCommander() *Commander {
cmdr := new(Commander)
cmdr.commands = make(map[string]*Command)
return cmdr
}
func (cmdr *Commander) AddCommand(cmd *Command) {
cmdr.commands[cmd.Name] = cmd
}
func (cmdr *Commander) GetCommand(name string) (*Command, bool) {
cmd, ok := cmdr.commands[name]
return cmd, ok
}
func AddCommand(cmd *Command) {
DefaultCommander.AddCommand(cmd)
}
func GetCommand(name string) (*Command, bool) {
cmd, ok := DefaultCommander.GetCommand(name)
return cmd, ok
}
func NewCommandHandler(config Config) func(s *discordgo.Session, m *discordgo.MessageCreate) {
return func(s *discordgo.Session, m *discordgo.MessageCreate) {
var cmd *Command
if m.Author.ID == s.State.User.ID {
return
}
if !lib.HasCommand(m.Content, config.Prefix) {
return
}
cmdName, args := lib.SplitCommandAndArgs(m.Content, config.Prefix)
cmd, ok := GetCommand(cmdName)
if ok {
cmd.Config = config
cmd.Name = cmdName
cmd.Session = s
cmd.Message = m
log.Debugf("command: %+v, args: %+v", cmd.Name, args)
cmd.Func(cmd, args)
return
}
log.Warnf("unknown command: %+v, args: %+v", cmdName, args)
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("unknown command: %s", cmdName))
}
}

View File

@ -55,6 +55,8 @@ func main() {
dg.AddHandler(h.Handle) dg.AddHandler(h.Handle)
} }
dg.AddHandler(bot.NewCommandHandler(C))
dg.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages dg.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages
err = dg.Open() err = dg.Open()

View File

@ -1,6 +1,9 @@
package lib package lib
import "testing" import (
"reflect"
"testing"
)
func TestContainsCommand(t *testing.T) { func TestContainsCommand(t *testing.T) {
tables := []struct { tables := []struct {