discord-community/modules.go
Knut Ahlers 5bd54dd15c
Add persistent store and module IDs
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2021-08-07 16:16:14 +02:00

48 lines
854 B
Go

package main
import (
"sync"
"github.com/bwmarrin/discordgo"
"github.com/pkg/errors"
"github.com/robfig/cron/v3"
)
var (
moduleRegister = map[string]moduleInitFn{}
moduleRegisterLock sync.RWMutex
)
type (
module interface {
ID() string
Initialize(id string, crontab *cron.Cron, discord *discordgo.Session, attrs moduleAttributeStore) error
Setup() error
}
moduleInitFn func() module
)
func GetModuleByName(name string) module {
moduleRegisterLock.RLock()
defer moduleRegisterLock.RUnlock()
mif, ok := moduleRegister[name]
if !ok {
return nil
}
return mif()
}
func RegisterModule(name string, modInit moduleInitFn) {
moduleRegisterLock.Lock()
defer moduleRegisterLock.Unlock()
if _, ok := moduleRegister[name]; ok {
panic(errors.Errorf("duplicate module register %q", name))
}
moduleRegister[name] = modInit
}