From 679f3e027295eb127db589bd4a3efeed550ebe81 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 28 Aug 2024 10:04:55 -0300 Subject: [PATCH] chore(formatting,ci): more formatting commands --- flake.nix | 3 +++ internals/discord/bot/commands.go | 4 ++-- internals/discord/bot/commands/channels.go | 19 +++++++++++---- internals/discord/bot/commands/config.go | 28 +++++++++++++++------- internals/discord/bot/errors/errors.go | 5 ++-- internals/discord/bot/events.go | 1 + internals/discord/bot/events/guild.go | 2 ++ internals/discord/bot/events/messages.go | 20 +++++++++------- internals/discord/bot/gconf/config.go | 10 ++++---- internals/discord/bot/gconf/logger.go | 3 ++- internals/guilddb/guilddb.go | 18 ++++++++------ internals/guilddb/sqlite.go | 4 ---- internals/translator/translator.go | 2 ++ main.go | 6 +++-- makefile | 6 +++++ 15 files changed, 88 insertions(+), 43 deletions(-) diff --git a/flake.nix b/flake.nix index 55e7fb0..a2032b1 100644 --- a/flake.nix +++ b/flake.nix @@ -25,7 +25,10 @@ sqlite sqlitebrowser go + gofumpt golangci-lint + golines + gotools delve docker-compose (templ system) diff --git a/internals/discord/bot/commands.go b/internals/discord/bot/commands.go index b3ea367..0e5960e 100644 --- a/internals/discord/bot/commands.go +++ b/internals/discord/bot/commands.go @@ -1,13 +1,14 @@ package bot import ( - "dislate/internals/discord/bot/commands" "encoding/json" "errors" "fmt" "log/slog" "slices" + "dislate/internals/discord/bot/commands" + dgo "github.com/bwmarrin/discordgo" ) @@ -94,7 +95,6 @@ func (b *Bot) registerCommands() error { sc := opts[isSub] err := subCmds[sc.Name].Handle(s, ic) - if err != nil { _ = s.InteractionRespond(ic.Interaction, &dgo.InteractionResponse{ Type: dgo.InteractionResponseDeferredChannelMessageWithSource, diff --git a/internals/discord/bot/commands/channels.go b/internals/discord/bot/commands/channels.go index dbedbb8..cbbbbd9 100644 --- a/internals/discord/bot/commands/channels.go +++ b/internals/discord/bot/commands/channels.go @@ -20,6 +20,7 @@ type ManageChannel struct { func NewManageChannel(db gconf.DB) ManageChannel { return ManageChannel{db} } + func (c ManageChannel) Info() *dgo.ApplicationCommand { var permissions int64 = dgo.PermissionManageChannels @@ -29,6 +30,7 @@ func (c ManageChannel) Info() *dgo.ApplicationCommand { DefaultMemberPermissions: &permissions, } } + func (c ManageChannel) Subcommands() []Command { return []Command{ channelsInfo(c), @@ -36,9 +38,11 @@ func (c ManageChannel) Subcommands() []Command { channelsSetLang(c), } } + func (c ManageChannel) Handle(s *dgo.Session, i *dgo.InteractionCreate) error { return nil } + func (c ManageChannel) Components() []Component { return []Component{} } @@ -64,6 +68,7 @@ func (c channelsInfo) Info() *dgo.ApplicationCommand { }}, } } + func (c channelsInfo) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { opts := getOptions(ic.ApplicationCommandData().Options) @@ -96,16 +101,17 @@ func (c channelsInfo) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { Flags: dgo.MessageFlagsEphemeral, }, }) - if err != nil { return err } return nil } + func (c channelsInfo) Components() []Component { return []Component{} } + func (c channelsInfo) Subcommands() []Command { return []Command{} } @@ -139,6 +145,7 @@ func (c channelsLink) Info() *dgo.ApplicationCommand { }}, } } + func (c channelsLink) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { opts := getOptions(ic.ApplicationCommandData().Options) @@ -209,16 +216,17 @@ func (c channelsLink) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { Flags: dgo.MessageFlagsEphemeral, }, }) - if err != nil { return err } return nil } + func (c channelsLink) Components() []Component { return []Component{} } + func (c channelsLink) Subcommands() []Command { return []Command{} } @@ -253,6 +261,7 @@ func (c channelsSetLang) Info() *dgo.ApplicationCommand { }}, } } + func (c channelsSetLang) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { opts := getOptions(ic.ApplicationCommandData().Options) @@ -302,16 +311,17 @@ func (c channelsSetLang) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error Flags: dgo.MessageFlagsEphemeral, }, }) - if err != nil { return err } return nil } + func (c channelsSetLang) Components() []Component { return []Component{} } + func (c channelsSetLang) Subcommands() []Command { return []Command{} } @@ -344,7 +354,8 @@ func getChannelInfo(db gconf.DB, ch gdb.Channel) (*dgo.MessageEmbed, error) { g[i] = "<#" + gi.ID + ">" } - return &dgo.MessageEmbed{Title: "Channel Information", + return &dgo.MessageEmbed{ + Title: "Channel Information", Fields: []*dgo.MessageEmbedField{ {Name: "ID", Value: ch.ID, Inline: true}, {Name: "Language", Value: string(ch.Language), Inline: true}, diff --git a/internals/discord/bot/commands/config.go b/internals/discord/bot/commands/config.go index b38c3e8..6343f53 100644 --- a/internals/discord/bot/commands/config.go +++ b/internals/discord/bot/commands/config.go @@ -17,6 +17,7 @@ type ManageConfig struct { func NewMagageConfig(db gconf.DB) ManageConfig { return ManageConfig{db} } + func (c ManageConfig) Info() *dgo.ApplicationCommand { var permissions int64 = dgo.PermissionAdministrator @@ -26,12 +27,15 @@ func (c ManageConfig) Info() *dgo.ApplicationCommand { DefaultMemberPermissions: &permissions, } } + func (c ManageConfig) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { return nil } + func (c ManageConfig) Components() []Component { return []Component{} } + func (c ManageConfig) Subcommands() []Command { return []Command{ loggerConfigChannel(c), @@ -42,6 +46,7 @@ func (c ManageConfig) Subcommands() []Command { type loggerConfigChannel struct { db gconf.DB } + func (c loggerConfigChannel) Info() *dgo.ApplicationCommand { var permissions int64 = dgo.PermissionAdministrator return &dgo.ApplicationCommand{ @@ -49,9 +54,9 @@ func (c loggerConfigChannel) Info() *dgo.ApplicationCommand { Description: "Change logging channel", DefaultMemberPermissions: &permissions, Options: []*dgo.ApplicationCommandOption{{ - Type: dgo.ApplicationCommandOptionChannel, - Required: true, - Name: "log-channel", + Type: dgo.ApplicationCommandOptionChannel, + Required: true, + Name: "log-channel", Description: "The channel to send log messages and errors to", ChannelTypes: []dgo.ChannelType{ dgo.ChannelTypeGuildText, @@ -59,6 +64,7 @@ func (c loggerConfigChannel) Info() *dgo.ApplicationCommand { }}, } } + func (c loggerConfigChannel) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { opts := getOptions(ic.ApplicationCommandData().Options) @@ -91,15 +97,17 @@ func (c loggerConfigChannel) Handle(s *dgo.Session, ic *dgo.InteractionCreate) e Type: dgo.InteractionResponseChannelMessageWithSource, Data: &dgo.InteractionResponseData{ Content: fmt.Sprintf("Logging channel changed to %s", *guild.Config.LoggingChannel), - Flags: dgo.MessageFlagsEphemeral, + Flags: dgo.MessageFlagsEphemeral, }, }) return err } + func (c loggerConfigChannel) Components() []Component { return []Component{} } + func (c loggerConfigChannel) Subcommands() []Command { return []Command{} } @@ -107,6 +115,7 @@ func (c loggerConfigChannel) Subcommands() []Command { type loggerConfigLevel struct { db gconf.DB } + func (c loggerConfigLevel) Info() *dgo.ApplicationCommand { var permissions int64 = dgo.PermissionAdministrator return &dgo.ApplicationCommand{ @@ -114,9 +123,9 @@ func (c loggerConfigLevel) Info() *dgo.ApplicationCommand { Description: "Change logging channel", DefaultMemberPermissions: &permissions, Options: []*dgo.ApplicationCommandOption{{ - Type: dgo.ApplicationCommandOptionString, - Required: true, - Name: "log-level", + Type: dgo.ApplicationCommandOptionString, + Required: true, + Name: "log-level", Description: "The logging level of messages and errors", Choices: []*dgo.ApplicationCommandOptionChoice{ {Name: "Debug", Value: slog.LevelDebug.String()}, @@ -127,6 +136,7 @@ func (c loggerConfigLevel) Info() *dgo.ApplicationCommand { }}, } } + func (c loggerConfigLevel) Handle(s *dgo.Session, ic *dgo.InteractionCreate) error { opts := getOptions(ic.ApplicationCommandData().Options) @@ -161,15 +171,17 @@ func (c loggerConfigLevel) Handle(s *dgo.Session, ic *dgo.InteractionCreate) err Type: dgo.InteractionResponseChannelMessageWithSource, Data: &dgo.InteractionResponseData{ Content: fmt.Sprintf("Logging level changed to %s", l), - Flags: dgo.MessageFlagsEphemeral, + Flags: dgo.MessageFlagsEphemeral, }, }) return err } + func (c loggerConfigLevel) Components() []Component { return []Component{} } + func (c loggerConfigLevel) Subcommands() []Command { return []Command{} } diff --git a/internals/discord/bot/errors/errors.go b/internals/discord/bot/errors/errors.go index 29dad39..eda0523 100644 --- a/internals/discord/bot/errors/errors.go +++ b/internals/discord/bot/errors/errors.go @@ -16,13 +16,14 @@ type Error interface { } type defaultError struct { - err string + err string args []slog.Attr } func NewError(err string, args ...slog.Attr) defaultError { return defaultError{err, args} } + func New(err string, args ...slog.Attr) defaultError { return NewError(err, args...) } @@ -51,7 +52,7 @@ func (err defaultError) Reply(s *dgo.Session, m *dgo.Message) { } func (err defaultError) LogReply(l *slog.Logger, s *dgo.Session, m *dgo.Message) { - err.Reply(s,m) + err.Reply(s, m) err.Log(l) } diff --git a/internals/discord/bot/events.go b/internals/discord/bot/events.go index c6e99af..88ac8c8 100644 --- a/internals/discord/bot/events.go +++ b/internals/discord/bot/events.go @@ -8,6 +8,7 @@ func (b *Bot) registerEventHandlers() { events.NewMessageCreate(b.db, b.translator).Serve, events.NewMessageEdit(b.db, b.translator).Serve, events.NewReady(b.logger, b.db).Serve, + events.NewThreadCreate(b.db, b.translator).Serve, } for _, h := range ehs { b.session.AddHandler(h) diff --git a/internals/discord/bot/events/guild.go b/internals/discord/bot/events/guild.go index 3ccd275..f7b696e 100644 --- a/internals/discord/bot/events/guild.go +++ b/internals/discord/bot/events/guild.go @@ -18,6 +18,7 @@ type GuildCreate struct { func NewGuildCreate(log *slog.Logger, db gconf.DB) GuildCreate { return GuildCreate{log, db} } + func (h GuildCreate) Serve(s *dgo.Session, e *dgo.GuildCreate) { err := h.db.GuildInsert(gdb.Guild[gconf.ConfigString]{ID: e.Guild.ID}) @@ -41,6 +42,7 @@ type Ready struct { func NewReady(log *slog.Logger, db gconf.DB) EventHandler[*dgo.Ready] { return Ready{log, db} } + func (h Ready) Serve(s *dgo.Session, e *dgo.Ready) { for _, g := range e.Guilds { err := h.db.GuildInsert(gdb.Guild[gconf.ConfigString]{ID: g.ID}) diff --git a/internals/discord/bot/events/messages.go b/internals/discord/bot/events/messages.go index 617e284..a6fe4fb 100644 --- a/internals/discord/bot/events/messages.go +++ b/internals/discord/bot/events/messages.go @@ -22,6 +22,7 @@ type MessageCreate struct { func NewMessageCreate(db gconf.DB, t translator.Translator) MessageCreate { return MessageCreate{db, t} } + func (h MessageCreate) Serve(s *dgo.Session, ev *dgo.MessageCreate) { if ev.Message.Author.Bot { return @@ -127,7 +128,6 @@ func (h MessageCreate) Serve(s *dgo.Session, ev *dgo.MessageCreate) { }(c) } - } type MessageEdit struct { @@ -138,6 +138,7 @@ type MessageEdit struct { func NewMessageEdit(db gconf.DB, t translator.Translator) MessageEdit { return MessageEdit{db, t} } + func (h MessageEdit) Serve(s *dgo.Session, ev *dgo.MessageUpdate) { if ev.Message.Author.Bot { return @@ -221,11 +222,10 @@ func (h MessageEdit) Serve(s *dgo.Session, ev *dgo.MessageUpdate) { }(m) } - } func getUserWebhook(s *dgo.Session, channelID string, user *dgo.User) (*dgo.Webhook, error) { - var whName = "DISLATE_USER_WEBHOOK_" + user.ID + whName := "DISLATE_USER_WEBHOOK_" + user.ID ws, err := s.ChannelWebhooks(channelID) if err != nil { @@ -247,7 +247,7 @@ func getUserWebhook(s *dgo.Session, channelID string, user *dgo.User) (*dgo.Webh return w, nil } -func getMessage(db gconf.DB, m *dgo.Message, lang lang.Language) (guilddb.Message, error) { +func getMessage(db gconf.DB, m *dgo.Message, lang lang.Language) (guilddb.Message, error) { msg, err := db.Message(m.GuildID, m.ChannelID, m.ID) if e.Is(err, guilddb.ErrNotFound) { @@ -261,14 +261,17 @@ func getMessage(db gconf.DB, m *dgo.Message, lang lang.Language) (guilddb.Messa } return msg, nil - } -func getTranslatedMessage(db gconf.DB, m, original *dgo.Message, lang lang.Language) (guilddb.Message, error) { +func getTranslatedMessage( + db gconf.DB, + m, original *dgo.Message, + lang lang.Language, +) (guilddb.Message, error) { msg, err := db.Message(m.GuildID, m.ChannelID, m.ID) if e.Is(err, guilddb.ErrNotFound) { - if err :=db.MessageInsert(guilddb.NewTranslatedMessage( + if err := db.MessageInsert(guilddb.NewTranslatedMessage( m.GuildID, m.ChannelID, m.ID, @@ -278,7 +281,7 @@ func getTranslatedMessage(db gconf.DB, m, original *dgo.Message, lang lang.Lang )); err != nil { return guilddb.Message{}, err } - msg, err =db.Message(m.GuildID, m.ChannelID, m.ID) + msg, err = db.Message(m.GuildID, m.ChannelID, m.ID) if err != nil { return guilddb.Message{}, err } @@ -287,5 +290,4 @@ func getTranslatedMessage(db gconf.DB, m, original *dgo.Message, lang lang.Lang } return msg, nil - } diff --git a/internals/discord/bot/gconf/config.go b/internals/discord/bot/gconf/config.go index 6a299c6..4bef662 100644 --- a/internals/discord/bot/gconf/config.go +++ b/internals/discord/bot/gconf/config.go @@ -13,12 +13,14 @@ type Config struct { } type ConfigString struct { - LoggingChannel *string `json:"logging_channel"` + LoggingChannel *string `json:"logging_channel"` LoggingLevel *slog.Level `json:"logging_level"` } -type Guild gdb.Guild[ConfigString] -type DB gdb.GuildDB[ConfigString] +type ( + Guild gdb.Guild[ConfigString] + DB gdb.GuildDB[ConfigString] +) func (g Guild) GetConfig(s *dgo.Session) (*Config, error) { var l *slog.Logger @@ -36,7 +38,7 @@ func (g Guild) GetConfig(s *dgo.Session) (*Config, error) { } else { lv = slog.LevelInfo } - l = slog.New(NewGuildHandler(s,c, &slog.HandlerOptions{ + l = slog.New(NewGuildHandler(s, c, &slog.HandlerOptions{ Level: lv, })) } else { diff --git a/internals/discord/bot/gconf/logger.go b/internals/discord/bot/gconf/logger.go index 92eb7e8..9f99196 100644 --- a/internals/discord/bot/gconf/logger.go +++ b/internals/discord/bot/gconf/logger.go @@ -20,7 +20,8 @@ func NewGuildHandler(s *dgo.Session, c *dgo.Channel, opts *slog.HandlerOptions) type disabledHandler struct { *slog.TextHandler } -func (_ disabledHandler) Enabled(_ context.Context,_ slog.Level) bool { + +func (_ disabledHandler) Enabled(_ context.Context, _ slog.Level) bool { return false } diff --git a/internals/guilddb/guilddb.go b/internals/guilddb/guilddb.go index 9cc3480..fe47c2b 100644 --- a/internals/guilddb/guilddb.go +++ b/internals/guilddb/guilddb.go @@ -1,8 +1,9 @@ package guilddb import ( - "dislate/internals/translator/lang" "errors" + + "dislate/internals/translator/lang" ) type Guild[C any] struct { @@ -38,6 +39,7 @@ type Message struct { func NewMessage(GuildID, ChannelID, ID string, lang lang.Language) Message { return Message{GuildID, ChannelID, ID, lang, nil, nil} } + func NewTranslatedMessage( GuildID, ChannelID, ID string, lang lang.Language, @@ -143,9 +145,11 @@ type GuildDB[C any] interface { GuildUpdate(g Guild[C]) error } -var ErrNoAffect = errors.New("Not able to affect anything in the database") -var ErrNotFound = errors.New("Object not found in the database") -var ErrPreconditionFailed = errors.New("Precondition failed") -var ErrInvalidObject = errors.New("Invalid object") -var ErrInternal = errors.New("Internal error while trying to use database") -var ErrConfigParsing = errors.New("Error while parsing Guild's config") +var ( + ErrNoAffect = errors.New("Not able to affect anything in the database") + ErrNotFound = errors.New("Object not found in the database") + ErrPreconditionFailed = errors.New("Precondition failed") + ErrInvalidObject = errors.New("Invalid object") + ErrInternal = errors.New("Internal error while trying to use database") + ErrConfigParsing = errors.New("Error while parsing Guild's config") +) diff --git a/internals/guilddb/sqlite.go b/internals/guilddb/sqlite.go index 701605a..73b171d 100644 --- a/internals/guilddb/sqlite.go +++ b/internals/guilddb/sqlite.go @@ -159,7 +159,6 @@ func (db *SQLiteDB[C]) MessageDelete(m Message) error { DELETE channels WHERE "GuildID" = $1 AND "OriginChannelID" = $2 AND "OriginID" = $3 `, m.GuildID, m.ChannelID, m.ID) - if err != nil { return errors.Join(ErrInternal, err) } @@ -200,7 +199,6 @@ func (db *SQLiteDB[C]) selectMessages(query string, args ...any) ([]Message, err SELECT GuildID, ChannelID, ID, Language, OriginChannelID, OriginID FROM messages %s `, query), args...) - if err != nil { return []Message{}, errors.Join(ErrInternal, err) } @@ -283,7 +281,6 @@ func (db *SQLiteDB[C]) ChannelDelete(c Channel) error { } func (db *SQLiteDB[C]) ChannelGroup(guildID, channelID string) (ChannelGroup, error) { - var j string err := db.sql.QueryRow(fmt.Sprintf(` SELECT Channels FROM channelGroups, json_each(Channels) @@ -433,7 +430,6 @@ func (db *SQLiteDB[C]) selectChannels(query string, args ...any) ([]Channel, err SELECT GuildID, ID, Language FROM channels %s `, query), args...) - if err != nil { return []Channel{}, errors.Join(ErrInternal, err) } diff --git a/internals/translator/translator.go b/internals/translator/translator.go index 29025a5..d37c4f2 100644 --- a/internals/translator/translator.go +++ b/internals/translator/translator.go @@ -14,9 +14,11 @@ type MockTranslator struct{} func NewMockTranslator() MockTranslator { return MockTranslator{} } + func (t MockTranslator) Translate(from, to lang.Language, text string) (string, error) { return text, nil } + func (t MockTranslator) Detect(text string) (lang.Language, error) { return lang.EN, nil } diff --git a/main.go b/main.go index ba74d4c..8efb401 100644 --- a/main.go +++ b/main.go @@ -23,8 +23,10 @@ const ( ) // var translation_provider = flag.String("tprovider", string(GOOGLE_TRANSLATE), "Translation provider") -var database_file = flag.String("db", "file:./guild.db", "SQLite database file/location") -var discord_token = flag.String("token", os.Getenv("DISCORD_TOKEN"), "Discord bot authentication token") +var ( + database_file = flag.String("db", "file:./guild.db", "SQLite database file/location") + discord_token = flag.String("token", os.Getenv("DISCORD_TOKEN"), "Discord bot authentication token") +) func init() { flag.Parse() diff --git a/makefile b/makefile index 23213bf..288b52a 100644 --- a/makefile +++ b/makefile @@ -3,6 +3,12 @@ PORT?=8080 lint: go run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1 run +fmt: + go fmt . + go run golang.org/x/tools/cmd/goimports@v0.24.0 -l -w . + go run github.com/segmentio/golines@v0.12.2 -l -w . + go run mvdan.cc/gofumpt@v0.7.0 -l -w . + build: go build -o bin/dislate