ssh-chat/chat/command.go

53 lines
972 B
Go
Raw Normal View History

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