feat(bot,events,commands): guild configuration and logging
This commit is contained in:
61
internals/discord/bot/gconf/config.go
Normal file
61
internals/discord/bot/gconf/config.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package gconf
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
|
||||
gdb "dislate/internals/guilddb"
|
||||
|
||||
dgo "github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Logger *slog.Logger
|
||||
}
|
||||
|
||||
type ConfigString struct {
|
||||
LoggingChannel *string `json:"logging_channel"`
|
||||
LoggingLevel *slog.Level `json:"logging_level"`
|
||||
}
|
||||
|
||||
type Guild gdb.Guild[ConfigString]
|
||||
type DB gdb.GuildDB[ConfigString]
|
||||
|
||||
func (g Guild) GetConfig(s *dgo.Session) (*Config, error) {
|
||||
var l *slog.Logger
|
||||
var err error
|
||||
|
||||
if g.Config.LoggingChannel != nil {
|
||||
c, err := s.Channel(*g.Config.LoggingChannel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var lv slog.Level
|
||||
if g.Config.LoggingLevel != nil {
|
||||
lv = *g.Config.LoggingLevel
|
||||
} else {
|
||||
lv = slog.LevelInfo
|
||||
}
|
||||
l = slog.New(NewGuildHandler(s,c, &slog.HandlerOptions{
|
||||
Level: lv,
|
||||
}))
|
||||
} else {
|
||||
l = slog.New(disabledHandler{})
|
||||
}
|
||||
|
||||
return &Config{l}, err
|
||||
}
|
||||
|
||||
func GetLogger(guildID string, s *dgo.Session, db DB) *slog.Logger {
|
||||
g, err := db.Guild(guildID)
|
||||
if err != nil {
|
||||
return slog.New(disabledHandler{})
|
||||
}
|
||||
|
||||
c, err := Guild(g).GetConfig(s)
|
||||
if err != nil {
|
||||
return slog.New(disabledHandler{})
|
||||
}
|
||||
|
||||
return c.Logger
|
||||
}
|
||||
Reference in New Issue
Block a user