refactor!: restructure all project packages to simplify it

This commit is contained in:
Guz
2024-11-04 09:02:57 -03:00
parent 984f39caf2
commit daa63f5d64
26 changed files with 612 additions and 374 deletions

63
bot/gconf/config.go Normal file
View File

@@ -0,0 +1,63 @@
package gconf
import (
"log/slog"
gdb "forge.capytal.company/capytal/dislate/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]
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
}

46
bot/gconf/logger.go Normal file
View File

@@ -0,0 +1,46 @@
package gconf
import (
"context"
"log/slog"
dgo "github.com/bwmarrin/discordgo"
)
type guildHandler struct {
*slog.TextHandler
}
func NewGuildHandler(s *dgo.Session, c *dgo.Channel, opts *slog.HandlerOptions) guildHandler {
w := NewChannelWriter(s, c)
h := slog.NewTextHandler(w, opts)
return guildHandler{h}
}
type disabledHandler struct {
*slog.TextHandler
}
func (_ disabledHandler) Enabled(_ context.Context, _ slog.Level) bool {
return false
}
type channelWriter struct {
session *dgo.Session
channel *dgo.Channel
}
func NewChannelWriter(s *dgo.Session, c *dgo.Channel) channelWriter {
w := channelWriter{s, c}
return w
}
func (w channelWriter) Write(p []byte) (int, error) {
m, err := w.session.ChannelMessageSend(w.channel.ID, string(p))
if err != nil {
return 0, err
}
return len(m.Content), nil
}