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