ssh-chat/chat/command.go

52 lines
873 B
Go

package chat
import (
"errors"
"strings"
)
var ErrInvalidCommand = errors.New("invalid command")
var ErrNoOwner = errors.New("command without owner")
type CommandHandler func(c CommandMsg) error
type Commands map[string]CommandHandler
// Register command
func (c Commands) Add(command string, handler CommandHandler) {
c[command] = handler
}
// Execute command message, assumes IsCommand was checked
func (c Commands) Run(msg CommandMsg) error {
if msg.from == nil {
return ErrNoOwner
}
handler, ok := c[msg.Command()]
if !ok {
return ErrInvalidCommand
}
return handler(msg)
}
var defaultCmdHandlers Commands
func init() {
c := Commands{}
c.Add("/me", func(msg CommandMsg) error {
me := strings.TrimLeft(msg.body, "/me")
if me == "" {
me = " is at a loss for words."
}
// XXX: Finish this.
return nil
})
defaultCmdHandlers = c
}