49 lines
891 B
Go
49 lines
891 B
Go
|
package laniakea
|
||
|
|
||
|
type CommandExecutor func(ctx *MsgContext)
|
||
|
|
||
|
type PluginBuilder struct {
|
||
|
name string
|
||
|
commands map[string]*CommandExecutor
|
||
|
payload string
|
||
|
}
|
||
|
|
||
|
type Plugin struct {
|
||
|
Name string
|
||
|
Commands map[string]*CommandExecutor
|
||
|
Payload string
|
||
|
}
|
||
|
|
||
|
func NewPlugin(name string) *PluginBuilder {
|
||
|
return &PluginBuilder{
|
||
|
name: name,
|
||
|
commands: make(map[string]*CommandExecutor),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *PluginBuilder) Command(cmd string, f CommandExecutor) *PluginBuilder {
|
||
|
p.commands[cmd] = &f
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (p *PluginBuilder) Payload(payload string) *PluginBuilder {
|
||
|
p.payload = payload
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (p *PluginBuilder) Build() *Plugin {
|
||
|
if len(p.commands) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
plugin := &Plugin{
|
||
|
Name: p.name,
|
||
|
Commands: p.commands,
|
||
|
Payload: p.payload,
|
||
|
}
|
||
|
return plugin
|
||
|
}
|
||
|
|
||
|
func (p *Plugin) Execute(cmd string, ctx *MsgContext) {
|
||
|
(*p.Commands[cmd])(ctx)
|
||
|
}
|