55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package command is an interface for defining bot commands
 | |
| package command
 | |
| 
 | |
| var (
 | |
| 	// Commmands keyed by golang/regexp patterns
 | |
| 	// regexp.Match(key, input) is used to match
 | |
| 	Commands = map[string]Command{}
 | |
| )
 | |
| 
 | |
| // Command is the interface for specific named
 | |
| // commands executed via plugins or the bot.
 | |
| type Command interface {
 | |
| 	// Executes the command with args passed in
 | |
| 	Exec(args ...string) ([]byte, error)
 | |
| 	// Usage of the command
 | |
| 	Usage() string
 | |
| 	// Description of the command
 | |
| 	Description() string
 | |
| 	// Name of the command
 | |
| 	String() string
 | |
| }
 | |
| 
 | |
| type cmd struct {
 | |
| 	name        string
 | |
| 	usage       string
 | |
| 	description string
 | |
| 	exec        func(args ...string) ([]byte, error)
 | |
| }
 | |
| 
 | |
| func (c *cmd) Description() string {
 | |
| 	return c.description
 | |
| }
 | |
| 
 | |
| func (c *cmd) Exec(args ...string) ([]byte, error) {
 | |
| 	return c.exec(args...)
 | |
| }
 | |
| 
 | |
| func (c *cmd) Usage() string {
 | |
| 	return c.usage
 | |
| }
 | |
| 
 | |
| func (c *cmd) String() string {
 | |
| 	return c.name
 | |
| }
 | |
| 
 | |
| // NewCommand helps quickly create a new command
 | |
| func NewCommand(name, usage, description string, exec func(args ...string) ([]byte, error)) Command {
 | |
| 	return &cmd{
 | |
| 		name:        name,
 | |
| 		usage:       usage,
 | |
| 		description: description,
 | |
| 		exec:        exec,
 | |
| 	}
 | |
| }
 |