Compare commits
2 Commits
develop
...
6de36ffb95
Author | SHA1 | Date | |
---|---|---|---|
6de36ffb95
|
|||
141acc6980
|
@ -6,4 +6,6 @@ RUN CGO_ENABLED=0 go build ./cmd/bb
|
||||
FROM scratch AS bin
|
||||
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=build /src/bb /
|
||||
ADD https://raw.githubusercontent.com/golang/go/master/lib/time/zoneinfo.zip /zoneinfo.zip
|
||||
ENV ZONEINFO /zoneinfo.zip
|
||||
ENTRYPOINT ["/bb"]
|
||||
|
87
bot/command.go
Normal file
87
bot/command.go
Normal 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))
|
||||
}
|
||||
}
|
@ -55,6 +55,8 @@ func main() {
|
||||
dg.AddHandler(h.Handle)
|
||||
}
|
||||
|
||||
dg.AddHandler(bot.NewCommandHandler(C))
|
||||
|
||||
dg.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages
|
||||
|
||||
err = dg.Open()
|
||||
|
Reference in New Issue
Block a user