58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package plugin_utils
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/go-telegram/bot"
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type Initializer struct {
|
|
Name string
|
|
Func func(ctx context.Context, thebot *bot.Bot) error
|
|
}
|
|
|
|
func AddInitializer(initializers ...Initializer) int {
|
|
if AllPlugins.Initializer == nil {
|
|
AllPlugins.Initializer = []Initializer{}
|
|
}
|
|
var pluginCount int
|
|
for _, initializer := range initializers {
|
|
AllPlugins.Initializer = append(AllPlugins.Initializer, initializer)
|
|
pluginCount++
|
|
}
|
|
return pluginCount
|
|
}
|
|
|
|
func RunPluginInitializers(ctx context.Context, thebot *bot.Bot) {
|
|
logger := zerolog.Ctx(ctx)
|
|
|
|
count := len(AllPlugins.Initializer)
|
|
successCount := 0
|
|
|
|
for _, initializer := range AllPlugins.Initializer {
|
|
if initializer.Func == nil {
|
|
logger.Warn().
|
|
Str("pluginName", initializer.Name).
|
|
Msg("Plugin has no initialize function, skipping")
|
|
continue
|
|
}
|
|
err := initializer.Func(ctx, thebot)
|
|
if err != nil {
|
|
logger.Error().
|
|
Err(err).
|
|
Str("pluginName", initializer.Name).
|
|
Msg("Failed to initialize plugin")
|
|
continue
|
|
} else {
|
|
logger.Info().
|
|
Str("pluginName", initializer.Name).
|
|
Msg("Plugin initialize success")
|
|
successCount++
|
|
}
|
|
|
|
}
|
|
|
|
logger.Info().Msgf("Run (%d/%d) initializer success", successCount, count)
|
|
}
|