laniakea/plugins.go

49 lines
891 B
Go
Raw Permalink Normal View History

2024-12-16 00:52:43 +03:00
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)
}