From 82b7d51df7a5e3b42f4c004c644222200d45f550 Mon Sep 17 00:00:00 2001 From: Ash Keel Date: Sun, 25 Feb 2024 14:58:35 +0100 Subject: [PATCH] refactor: minor lint fixes --- .dockerignore | 11 +++++++++++ .golangci.yml | 12 ++++++++++++ app.go | 3 ++- backup.go | 4 ++-- database/driver.interface.go | 6 +++--- loyalty/prediction.go | 4 ++-- loyalty/twitch-bot.go | 8 ++++---- main.go | 2 +- strimertul.bat | 3 +++ twitch/bot.timer.go | 2 +- twitch/client.eventsub.go | 28 ++++++++++++++-------------- twitch/client.go | 3 +-- webserver/server.go | 2 +- webserver/server_test.go | 6 ++++++ webserver/testing.go | 2 +- 15 files changed, 64 insertions(+), 32 deletions(-) create mode 100644 .dockerignore create mode 100644 .golangci.yml create mode 100644 strimertul.bat diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..655db96 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +*.exe +*.db +*.db.lock +/data/ +/backups/ +.vscode +.idea +strimertul_* +/build/bin/ +*.log +api.json \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..d4c48ec --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,12 @@ +linters: + enable: + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - unused + - revive + - errorlint + - errname + - contextcheck \ No newline at end of file diff --git a/app.go b/app.go index 4785616..82f1312 100644 --- a/app.go +++ b/app.go @@ -34,7 +34,7 @@ import ( type App struct { ctx context.Context cliParams *cli.Context - driver database.DatabaseDriver + driver database.Driver ready *sync.RWSync[bool] isFatalError *sync.RWSync[bool] backupOptions database.BackupOptions @@ -269,6 +269,7 @@ func (a *App) SendCrashReport(errorData string, info string) (string, error) { logger.Error("Could not send crash report", zap.Error(err)) return "", err } + defer resp.Body.Close() // Check the response if resp.StatusCode != http.StatusOK { diff --git a/backup.go b/backup.go index 44249fd..ef391d4 100644 --- a/backup.go +++ b/backup.go @@ -13,7 +13,7 @@ import ( "git.sr.ht/~ashkeel/strimertul/utils" ) -func BackupTask(driver database.DatabaseDriver, options database.BackupOptions) { +func BackupTask(driver database.Driver, options database.BackupOptions) { if options.BackupDir == "" { logger.Warn("Backup directory not set, database backups are disabled") return @@ -34,7 +34,7 @@ func BackupTask(driver database.DatabaseDriver, options database.BackupOptions) } } -func performBackup(driver database.DatabaseDriver, options database.BackupOptions) { +func performBackup(driver database.Driver, options database.BackupOptions) { // Run backup procedure file, err := os.Create(fmt.Sprintf("%s/%s.db", options.BackupDir, time.Now().Format("20060102-150405"))) if err != nil { diff --git a/database/driver.interface.go b/database/driver.interface.go index 7fcf8aa..b734b72 100644 --- a/database/driver.interface.go +++ b/database/driver.interface.go @@ -13,8 +13,8 @@ import ( "git.sr.ht/~ashkeel/strimertul/utils" ) -// DatabaseDriver is a driver wrapping a supported database -type DatabaseDriver interface { +// Driver is a driver wrapping a supported database +type Driver interface { Hub() *kv.Hub Close() error Import(map[string]string) error @@ -46,7 +46,7 @@ func getDatabaseDriverName(ctx *cli.Context) string { return string(file) } -func GetDatabaseDriver(ctx *cli.Context) (DatabaseDriver, error) { +func GetDatabaseDriver(ctx *cli.Context) (Driver, error) { name := getDatabaseDriverName(ctx) dbDirectory := ctx.String("database-dir") logger := ctx.Context.Value(utils.ContextLogger).(*zap.Logger) diff --git a/loyalty/prediction.go b/loyalty/prediction.go index 69f6a5e..51dfcae 100644 --- a/loyalty/prediction.go +++ b/loyalty/prediction.go @@ -32,7 +32,7 @@ func NewPrediction(teams []string, bettingTime time.Duration) *Prediction { } } -func (p *Prediction) AddBet(who string, teamId uint, amount uint64) error { +func (p *Prediction) AddBet(who string, teamID uint, amount uint64) error { _, ok := p.Bets[who] if ok { return ErrPAlreadyBet @@ -40,7 +40,7 @@ func (p *Prediction) AddBet(who string, teamId uint, amount uint64) error { p.Bets[who] = PredictionBet{ Amount: amount, - Team: teamId, + Team: teamID, } return nil } diff --git a/loyalty/twitch-bot.go b/loyalty/twitch-bot.go index b2b8ffd..3dd1a5a 100644 --- a/loyalty/twitch-bot.go +++ b/loyalty/twitch-bot.go @@ -1,6 +1,7 @@ package loyalty import ( + "errors" "fmt" "strconv" "strings" @@ -233,14 +234,13 @@ func (m *Manager) cmdRedeemReward(bot *twitch.Bot, message irc.PrivateMessage) { Reward: reward, RequestText: text, }); err != nil { - switch err { - case ErrRedeemInCooldown: + if errors.Is(err, ErrRedeemInCooldown) { nextAvailable := m.GetRewardCooldown(reward.ID) bot.Client.Say(message.Channel, fmt.Sprintf("%s: That reward is in cooldown (available in %s)", message.User.DisplayName, time.Until(nextAvailable).Truncate(time.Second))) - default: - m.logger.Error("Error while performing redeem", zap.Error(err)) + return } + m.logger.Error("Error while performing redeem", zap.Error(err)) return } diff --git a/main.go b/main.go index 2cf0ef6..c6a87bf 100644 --- a/main.go +++ b/main.go @@ -105,7 +105,7 @@ func main() { ctx.Context = context.WithValue(ctx.Context, utils.ContextLogger, logger) return nil }, - After: func(ctx *cli.Context) error { + After: func(_ *cli.Context) error { if panicLog != nil { utils.Close(panicLog, logger) } diff --git a/strimertul.bat b/strimertul.bat new file mode 100644 index 0000000..975dd0c --- /dev/null +++ b/strimertul.bat @@ -0,0 +1,3 @@ +@echo off +CD /D %~dp0 +C:\projects\strimertul\strimertul\build\bin\strimertul.exe \ No newline at end of file diff --git a/twitch/bot.timer.go b/twitch/bot.timer.go index d4ec3ac..30d1fe2 100644 --- a/twitch/bot.timer.go +++ b/twitch/bot.timer.go @@ -55,7 +55,7 @@ func SetupTimers(bot *Bot) *BotTimerModule { // Fill messages with zero values // (This can probably be done faster) - for i := 0; i < AverageMessageWindow; i += 1 { + for i := 0; i < AverageMessageWindow; i++ { mod.messages.Push(0) } diff --git a/twitch/client.eventsub.go b/twitch/client.eventsub.go index 4d152de..6c4c554 100644 --- a/twitch/client.eventsub.go +++ b/twitch/client.eventsub.go @@ -76,14 +76,14 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use continue } - reconnectURL, err, done := c.processMessage(wsMessage, oldConnection, userClient) + reconnectURL, done, err := c.processMessage(wsMessage, oldConnection, userClient) if done { return reconnectURL, connection, err } } } -func (c *Client) processMessage(wsMessage EventSubWebsocketMessage, oldConnection *websocket.Conn, userClient *helix.Client) (string, error, bool) { +func (c *Client) processMessage(wsMessage EventSubWebsocketMessage, oldConnection *websocket.Conn, userClient *helix.Client) (string, bool, error) { switch wsMessage.Metadata.MessageType { case "session_keepalive": // Nothing to do @@ -94,7 +94,7 @@ func (c *Client) processMessage(wsMessage EventSubWebsocketMessage, oldConnectio c.logger.Error("Error decoding EventSub welcome message", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) break } - c.logger.Info("Connection to EventSub websocket established", zap.String("session-id", welcomeData.Session.Id)) + c.logger.Info("Connection to EventSub websocket established", zap.String("session-id", welcomeData.Session.ID)) // We can only close the old connection once the new one has been established if oldConnection != nil { @@ -102,7 +102,7 @@ func (c *Client) processMessage(wsMessage EventSubWebsocketMessage, oldConnectio } // Add subscription to websocket session - err = c.addSubscriptionsForSession(userClient, welcomeData.Session.Id) + err = c.addSubscriptionsForSession(userClient, welcomeData.Session.ID) if err != nil { c.logger.Error("Could not add subscriptions", zap.Error(err)) break @@ -114,26 +114,26 @@ func (c *Client) processMessage(wsMessage EventSubWebsocketMessage, oldConnectio c.logger.Error("Error decoding EventSub session reconnect parameters", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) break } - c.logger.Info("EventSub websocket requested a reconnection", zap.String("session-id", reconnectData.Session.Id), zap.String("reconnect-url", reconnectData.Session.ReconnectUrl)) + c.logger.Info("EventSub websocket requested a reconnection", zap.String("session-id", reconnectData.Session.ID), zap.String("reconnect-url", reconnectData.Session.ReconnectURL)) - return reconnectData.Session.ReconnectUrl, nil, true + return reconnectData.Session.ReconnectURL, true, nil case "notification": go c.processEvent(wsMessage) case "revocation": // TODO idk what to do here } - return "", nil, false + return "", false, nil } func (c *Client) processEvent(message EventSubWebsocketMessage) { // Check if we processed this already - if message.Metadata.MessageId != "" { - if c.eventCache.Contains(message.Metadata.MessageId) { - c.logger.Debug("Received duplicate event, ignoring", zap.String("message-id", message.Metadata.MessageId)) + if message.Metadata.MessageID != "" { + if c.eventCache.Contains(message.Metadata.MessageID) { + c.logger.Debug("Received duplicate event, ignoring", zap.String("message-id", message.Metadata.MessageID)) return } } - defer c.eventCache.Add(message.Metadata.MessageId, message.Metadata.MessageTimestamp) + defer c.eventCache.Add(message.Metadata.MessageID, message.Metadata.MessageTimestamp) // Decode data var notificationData NotificationMessagePayload @@ -218,11 +218,11 @@ type EventSubWebsocketMessage struct { type WelcomeMessagePayload struct { Session struct { - Id string `json:"id"` + ID string `json:"id"` Status string `json:"status"` ConnectedAt time.Time `json:"connected_at"` KeepaliveTimeoutSeconds int `json:"keepalive_timeout_seconds"` - ReconnectUrl string `json:"reconnect_url,omitempty"` + ReconnectURL string `json:"reconnect_url,omitempty"` } `json:"session"` } @@ -233,7 +233,7 @@ type NotificationMessagePayload struct { } type EventSubMetadata struct { - MessageId string `json:"message_id"` + MessageID string `json:"message_id"` MessageType string `json:"message_type"` MessageTimestamp time.Time `json:"message_timestamp"` SubscriptionType string `json:"subscription_type"` diff --git a/twitch/client.go b/twitch/client.go index 4eea26f..579c6e0 100644 --- a/twitch/client.go +++ b/twitch/client.go @@ -244,9 +244,8 @@ func (c *Client) runStatusPoll() { if err != nil { c.logger.Error("Error checking stream status", zap.Error(err)) return - } else { - c.streamOnline.Set(len(status.Data.Streams) > 0) } + c.streamOnline.Set(len(status.Data.Streams) > 0) err = c.db.PutJSON(StreamInfoKey, status.Data.Streams) if err != nil { diff --git a/webserver/server.go b/webserver/server.go index 88ebbb6..730a7ab 100644 --- a/webserver/server.go +++ b/webserver/server.go @@ -140,7 +140,7 @@ func (s *WebServer) makeMux() *http.ServeMux { func healthFunc(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) - fmt.Fprint(w, "OK") + _, _ = fmt.Fprint(w, "OK") } func (s *WebServer) RegisterRoute(route string, handler http.Handler) { diff --git a/webserver/server_test.go b/webserver/server_test.go index be8d4a8..4f8b13c 100644 --- a/webserver/server_test.go +++ b/webserver/server_test.go @@ -67,6 +67,8 @@ func TestListen(t *testing.T) { if err != nil { t.Fatal(err) } + defer resp.Body.Close() + if resp.StatusCode != 200 { t.Fatalf("Expected 200, got %d", resp.StatusCode) } @@ -117,6 +119,8 @@ func TestCustomRoute(t *testing.T) { if err != nil { t.Fatal(err) } + defer resp.Body.Close() + if resp.StatusCode != 200 { t.Fatalf("Expected 200, got %d", resp.StatusCode) } @@ -137,6 +141,8 @@ func TestCustomRoute(t *testing.T) { if err != nil { t.Fatal(err) } + defer resp.Body.Close() + if resp.StatusCode != 404 { t.Fatalf("Expected 404, got %d", resp.StatusCode) } diff --git a/webserver/testing.go b/webserver/testing.go index 1457c4d..2014a3c 100644 --- a/webserver/testing.go +++ b/webserver/testing.go @@ -40,7 +40,7 @@ func (t *TestServer) Shutdown(_ context.Context) error { } func (t *TestServer) Factory() ServerFactory { - return func(h http.Handler, addr string) (Server, error) { + return func(h http.Handler, _ string) (Server, error) { s := httptest.NewUnstartedServer(h) t.server.Set(s) return t, nil