ssh-chat/chat/command.go
2014-12-26 12:26:53 -08:00

53 lines
972 B
Go

package chat
import (
"errors"
"strings"
)
var ErrInvalidCommand = errors.New("invalid command")
var ErrNoOwner = errors.New("command without owner")
type CommandHandler func(*Channel, 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(channel *Channel, msg CommandMsg) error {
if msg.from == nil {
return ErrNoOwner
}
handler, ok := c[msg.Command()]
if !ok {
return ErrInvalidCommand
}
return handler(channel, msg)
}
var defaultCmdHandlers Commands
func init() {
c := Commands{}
c.Add("/me", func(channel *Channel, msg CommandMsg) error {
me := strings.TrimLeft(msg.body, "/me")
if me == "" {
me = " is at a loss for words."
} else {
me = me[1:]
}
channel.Send(NewEmoteMsg(me, msg.From()))
return nil
})
defaultCmdHandlers = c
}