This commit is contained in:
2026-02-12 11:17:23 +03:00
parent 60f09e940a
commit ece131c14a
4 changed files with 34 additions and 56 deletions

View File

@@ -9,49 +9,42 @@ import (
type CommandExecutor func(ctx *MsgContext, dbContext *DatabaseContext)
type PluginBuilder struct {
name string
commands map[string]*CommandExecutor
payloads map[string]*CommandExecutor
updateListener *CommandExecutor
middlewares extypes.Slice[*PluginMiddleware]
name string
commands map[string]CommandExecutor
payloads map[string]CommandExecutor
middlewares extypes.Slice[*PluginMiddleware]
}
type Plugin struct {
Name string
Commands map[string]*CommandExecutor
Payloads map[string]*CommandExecutor
UpdateListener *CommandExecutor
Middlewares extypes.Slice[*PluginMiddleware]
Name string
Commands map[string]CommandExecutor
Payloads map[string]CommandExecutor
Middlewares extypes.Slice[*PluginMiddleware]
}
func NewPlugin(name string) *PluginBuilder {
return &PluginBuilder{
name: name,
commands: make(map[string]*CommandExecutor),
payloads: make(map[string]*CommandExecutor),
commands: make(map[string]CommandExecutor),
payloads: make(map[string]CommandExecutor),
}
}
func (p *PluginBuilder) Command(f CommandExecutor, cmd ...string) *PluginBuilder {
for _, c := range cmd {
p.commands[c] = &f
p.commands[c] = f
}
return p
}
func (p *PluginBuilder) Payload(f CommandExecutor, payloads ...string) *PluginBuilder {
for _, payload := range payloads {
p.payloads[payload] = &f
p.payloads[payload] = f
}
return p
}
func (p *PluginBuilder) UpdateListener(listener CommandExecutor) *PluginBuilder {
p.updateListener = &listener
return p
}
func (p *PluginBuilder) Middleware(middleware *PluginMiddleware) *PluginBuilder {
func (p *PluginBuilder) AddMiddleware(middleware *PluginMiddleware) *PluginBuilder {
p.middlewares = p.middlewares.Push(middleware)
return p
}
@@ -61,20 +54,17 @@ func (p *PluginBuilder) Build() Plugin {
log.Printf("no command or payloads for %s", p.name)
}
return Plugin{
Name: p.name,
Commands: p.commands,
Payloads: p.payloads,
UpdateListener: p.updateListener,
Middlewares: p.middlewares,
p.name, p.commands,
p.payloads, p.middlewares,
}
}
func (p *Plugin) Execute(cmd string, ctx *MsgContext, dbContext *DatabaseContext) {
(*p.Commands[cmd])(ctx, dbContext)
(p.Commands[cmd])(ctx, dbContext)
}
func (p *Plugin) ExecutePayload(payload string, ctx *MsgContext, dbContext *DatabaseContext) {
(*p.Payloads[payload])(ctx, dbContext)
(p.Payloads[payload])(ctx, dbContext)
}
func (p *Plugin) executeMiddlewares(ctx *MsgContext, db *DatabaseContext) bool {
@@ -102,14 +92,6 @@ type MiddlewareBuilder struct {
func NewMiddleware(name string, executor CommandExecutor) *MiddlewareBuilder {
return &MiddlewareBuilder{name: name, executor: executor, order: 0, async: false}
}
func (m *MiddlewareBuilder) SetName(name string) *MiddlewareBuilder {
m.name = name
return m
}
func (m *MiddlewareBuilder) SetExecutor(executor CommandExecutor) *MiddlewareBuilder {
m.executor = executor
return m
}
func (m *MiddlewareBuilder) SetOrder(order int) *MiddlewareBuilder {
m.order = order
return m