/
modules.go
66 lines (53 loc) · 1.46 KB
/
modules.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package modules
import (
"context"
"database/sql"
"fmt"
"github.com/bwmarrin/discordgo"
"github.com/galexrt/fivenet/gen/go/proto/resources/users"
"github.com/galexrt/fivenet/pkg/config"
"github.com/galexrt/fivenet/pkg/mstlystcdata"
"github.com/galexrt/fivenet/query/fivenet/table"
"go.uber.org/zap"
)
var (
tOauth2Accs = table.FivenetOauth2Accounts
tAccs = table.FivenetAccounts
tUsers = table.Users.AS("users")
)
var Modules = map[string]NewModuleFunc{}
type NewModuleFunc func(*BaseModule) (Module, error)
type Module interface {
Run(settings *users.DiscordSyncSettings) ([]*discordgo.MessageEmbed, error)
}
func GetModule(name string, base *BaseModule) (Module, error) {
fn, ok := Modules[name]
if !ok {
return nil, fmt.Errorf("no module found by name %s", name)
}
// "Wrap" logger with module name
base.logger = base.logger.Named(name)
return fn(base)
}
type BaseModule struct {
ctx context.Context
logger *zap.Logger
db *sql.DB
discord *discordgo.Session
guild *discordgo.Guild
job string
cfg *config.DiscordBot
enricher *mstlystcdata.Enricher
}
func NewBaseModule(ctx context.Context, logger *zap.Logger, db *sql.DB, discord *discordgo.Session, guild *discordgo.Guild, job string, cfg *config.DiscordBot, enricher *mstlystcdata.Enricher) *BaseModule {
return &BaseModule{
ctx: ctx,
logger: logger,
db: db,
discord: discord,
guild: guild,
job: job,
cfg: cfg,
enricher: enricher,
}
}