mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-04-14 08:07:16 +03:00
52 lines
873 B
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
|
|
}
|