From ba3b9c673a879299ea163f51b9693c72e1989fde Mon Sep 17 00:00:00 2001 From: Ash Keel Date: Wed, 19 Apr 2023 15:27:13 +0200 Subject: [PATCH] change: better log messages, tuned reconnection logic on eventsub, updated to kv v10 --- database/database.go | 2 +- database/driver.interface.go | 2 +- database/driver.pebble.go | 2 +- go.mod | 6 +++--- go.sum | 24 ++++++------------------ http/server.go | 2 +- loyalty/twitch-bot.go | 10 +++++----- main.go | 3 +-- twitch/bot.go | 32 ++++++++++++++++++-------------- twitch/client.eventsub.go | 27 +++++++++++++-------------- twitch/client.go | 2 +- 11 files changed, 51 insertions(+), 61 deletions(-) diff --git a/database/database.go b/database/database.go index 58125fe..8cf1a52 100644 --- a/database/database.go +++ b/database/database.go @@ -5,7 +5,7 @@ import ( "fmt" jsoniter "github.com/json-iterator/go" - kv "github.com/strimertul/kilovolt/v9" + kv "github.com/strimertul/kilovolt/v10" "go.uber.org/zap" ) diff --git a/database/driver.interface.go b/database/driver.interface.go index 2b00997..09a446f 100644 --- a/database/driver.interface.go +++ b/database/driver.interface.go @@ -6,7 +6,7 @@ import ( "os" "path/filepath" - kv "github.com/strimertul/kilovolt/v9" + kv "github.com/strimertul/kilovolt/v10" "github.com/urfave/cli/v2" "go.uber.org/zap" diff --git a/database/driver.pebble.go b/database/driver.pebble.go index 3c76e48..4b2ebc0 100644 --- a/database/driver.pebble.go +++ b/database/driver.pebble.go @@ -9,7 +9,7 @@ import ( "github.com/strimertul/strimertul/utils" "github.com/cockroachdb/pebble" - kv "github.com/strimertul/kilovolt/v9" + kv "github.com/strimertul/kilovolt/v10" pebble_driver "github.com/strimertul/kv-pebble" "go.uber.org/zap" ) diff --git a/go.mod b/go.mod index 5c3ed11..c808f76 100644 --- a/go.mod +++ b/go.mod @@ -6,15 +6,15 @@ require ( git.sr.ht/~hamcha/containers v0.3.2 github.com/Masterminds/sprig/v3 v3.2.3 github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29 - github.com/cockroachdb/pebble v0.0.0-20230209222158-0568b5fd3d14 + github.com/cockroachdb/pebble v0.0.0-20230418161327-101876aa7088 github.com/gempir/go-twitch-irc/v4 v4.0.0 github.com/gorilla/websocket v1.5.0 github.com/hashicorp/golang-lru/v2 v2.0.2 github.com/json-iterator/go v1.1.12 github.com/nicklaw5/helix/v2 v2.22.0 github.com/postfinance/single v0.0.2 - github.com/strimertul/kilovolt/v9 v9.1.0 - github.com/strimertul/kv-pebble v1.2.1 + github.com/strimertul/kilovolt/v10 v10.0.0 + github.com/strimertul/kv-pebble v1.2.2 github.com/urfave/cli/v2 v2.25.1 github.com/wailsapp/wails/v2 v2.4.1 go.uber.org/zap v1.24.0 diff --git a/go.sum b/go.sum index d80df36..aa05f9c 100644 --- a/go.sum +++ b/go.sum @@ -25,7 +25,6 @@ github.com/ashkeel/helix/v2 v2.20.0-ws h1:IvwMHs4PBCoVgu0IVlTZGyQG8h40zBY/FYmRXG github.com/ashkeel/helix/v2 v2.20.0-ws/go.mod h1:zZcKsyyBWDli34x3QleYsVMiiNGMXPAEU5NjsiZDtvY= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= @@ -42,8 +41,8 @@ github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZO github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230209222158-0568b5fd3d14 h1:4spJmU4jzTXRbaQV9yrGHBDL/nTgaebjbW4Qidtkz0w= -github.com/cockroachdb/pebble v0.0.0-20230209222158-0568b5fd3d14/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= +github.com/cockroachdb/pebble v0.0.0-20230418161327-101876aa7088 h1:/e1HsWCYnzjiU4G3BliGLb2f9vB5Ar2yvLJ0rqACwgs= +github.com/cockroachdb/pebble v0.0.0-20230418161327-101876aa7088/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= @@ -291,19 +290,17 @@ github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb6 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/strimertul/kilovolt/v9 v9.1.0 h1:g4oHaNodr2KxygbHTIr1vN4AyNRfBM02dvw5FYtF+6s= -github.com/strimertul/kilovolt/v9 v9.1.0/go.mod h1:i9cizfUV9B+XYkmLSPr2dhNe8kt4R0xjG2kCZb7XoZg= -github.com/strimertul/kv-pebble v1.2.1 h1:Xqn73U6nAqrBnQxr9TrM7x1WfP26ko9Cd51340B2/o8= -github.com/strimertul/kv-pebble v1.2.1/go.mod h1:lfyBKJ4uVs/KsTuLPR1TTYRe3mZzP9auLDbZD9zym+0= +github.com/strimertul/kilovolt/v10 v10.0.0 h1:VGUFZ1/s4IDAYp9kqZQosoelRqXA/cN2JP41BgLc4yQ= +github.com/strimertul/kilovolt/v10 v10.0.0/go.mod h1:lB+aF6VpoMfxkK+DFVzIB9yOW0nNaZOtFt395Cf+Hyk= +github.com/strimertul/kv-pebble v1.2.2 h1:/vV8a1gObO4os3gB3NT9GWAmWbi+VsSS7wvb6G+HOzM= +github.com/strimertul/kv-pebble v1.2.2/go.mod h1:I6VvL0/UXW007BEEf1liHYKZcKqQypRt+9pxJkbmvZQ= github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -339,17 +336,11 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -369,7 +360,6 @@ golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -467,7 +457,6 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -519,6 +508,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/http/server.go b/http/server.go index 6c86cab..c614b44 100644 --- a/http/server.go +++ b/http/server.go @@ -13,7 +13,7 @@ import ( "git.sr.ht/~hamcha/containers/sync" jsoniter "github.com/json-iterator/go" - kv "github.com/strimertul/kilovolt/v9" + kv "github.com/strimertul/kilovolt/v10" "go.uber.org/zap" "github.com/strimertul/strimertul/database" diff --git a/loyalty/twitch-bot.go b/loyalty/twitch-bot.go index b17fbc7..347e4cd 100644 --- a/loyalty/twitch-bot.go +++ b/loyalty/twitch-bot.go @@ -18,7 +18,7 @@ import ( func (m *Manager) SetupTwitch() { bot := m.twitchManager.Client().Bot if bot == nil { - m.logger.Warn("bot is offline or not configured, could not setup commands") + m.logger.Warn("Twitch bot is offline or not configured, could not setup commands") return } @@ -86,7 +86,7 @@ func (m *Manager) SetupTwitch() { for { userClient, err := client.GetUserClient(false) if err != nil { - m.logger.Error("could not get user api client for list of chatters", zap.Error(err)) + m.logger.Error("Could not get user api client for list of chatters", zap.Error(err)) return } res, err := userClient.GetChannelChatChatters(&helix.GetChatChattersParams{ @@ -96,7 +96,7 @@ func (m *Manager) SetupTwitch() { After: cursor, }) if err != nil { - m.logger.Error("could not retrieve list of chatters", zap.Error(err)) + m.logger.Error("Could not retrieve list of chatters", zap.Error(err)) return } for _, user := range res.Data.Chatters { @@ -132,13 +132,13 @@ func (m *Manager) SetupTwitch() { if len(users) > 0 { err := m.GivePoints(pointsToGive) if err != nil { - m.logger.Error("error giving points to user", zap.Error(err)) + m.logger.Error("Error awarding loyalty points to user", zap.Error(err)) } } } }() - m.logger.Info("loyalty twitch setup completed") + m.logger.Info("Loyalty system integration with Twitch is ready") } func (m *Manager) StopTwitch() { diff --git a/main.go b/main.go index b1cb4ce..ff2d7ea 100644 --- a/main.go +++ b/main.go @@ -91,12 +91,11 @@ func main() { level = zapcore.InfoLevel } initLogger(level) - logger.Info("app started", zap.String("version", appVersion)) // Create file for panics panicLog, err = os.OpenFile(panicFilename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0o666) if err != nil { - logger.Warn("could not create panic log", zap.Error(err)) + logger.Warn("Could not create panic log", zap.Error(err)) } else { utils.RedirectStderr(panicLog) } diff --git a/twitch/bot.go b/twitch/bot.go index 88c86bc..14cc39a 100644 --- a/twitch/bot.go +++ b/twitch/bot.go @@ -96,7 +96,7 @@ func newBot(api *Client, config BotConfig) *Bot { // Ignore messages for a while or twitch will get mad! if message.Time.Before(bot.lastMessage.Get().Add(time.Second * 2)) { - bot.logger.Debug("message received too soon, ignoring") + bot.logger.Debug("Message received too soon, ignoring") return } @@ -140,7 +140,7 @@ func newBot(api *Client, config BotConfig) *Bot { err := bot.api.db.PutJSON(ChatEventKey, message) if err != nil { - bot.logger.Warn("could not save chat message to key", zap.String("key", ChatEventKey), zap.Error(err)) + bot.logger.Warn("Could not save chat message to key", zap.String("key", ChatEventKey), zap.Error(err)) } if bot.Config.ChatHistory > 0 { history := bot.chatHistory.Get() @@ -150,7 +150,7 @@ func newBot(api *Client, config BotConfig) *Bot { bot.chatHistory.Set(append(history, message)) err = bot.api.db.PutJSON(ChatHistoryKey, bot.chatHistory.Get()) if err != nil { - bot.logger.Warn("could not save message to chat history", zap.Error(err)) + bot.logger.Warn("Could not save message to chat history", zap.Error(err)) } } @@ -161,17 +161,17 @@ func newBot(api *Client, config BotConfig) *Bot { client.OnUserJoinMessage(func(message irc.UserJoinMessage) { if strings.ToLower(message.User) == bot.username { - bot.logger.Info("joined channel", zap.String("channel", message.Channel)) + bot.logger.Info("Twitch bot joined channel", zap.String("channel", message.Channel)) } else { - bot.logger.Debug("user joined channel", zap.String("channel", message.Channel), zap.String("username", message.User)) + bot.logger.Debug("User joined channel", zap.String("channel", message.Channel), zap.String("username", message.User)) } }) client.OnUserPartMessage(func(message irc.UserPartMessage) { if strings.ToLower(message.User) == bot.username { - bot.logger.Info("left channel", zap.String("channel", message.Channel)) + bot.logger.Info("Twitch bot left channel", zap.String("channel", message.Channel)) } else { - bot.logger.Debug("user left channel", zap.String("channel", message.Channel), zap.String("username", message.User)) + bot.logger.Debug("User left channel", zap.String("channel", message.Channel), zap.String("username", message.User)) } }) @@ -189,22 +189,22 @@ func newBot(api *Client, config BotConfig) *Bot { if errors.Is(err, database.ErrEmptyKey) { customCommands = make(map[string]BotCustomCommand) } else { - bot.logger.Error("failed to load custom commands", zap.Error(err)) + bot.logger.Error("Failed to load custom commands", zap.Error(err)) } } bot.customCommands.Set(customCommands) err = bot.updateTemplates() if err != nil { - bot.logger.Error("failed to parse custom commands", zap.Error(err)) + bot.logger.Error("Failed to parse custom commands", zap.Error(err)) } err, bot.cancelUpdateSub = api.db.SubscribeKey(CustomCommandsKey, bot.updateCommands) if err != nil { - bot.logger.Error("could not set-up bot command reload subscription", zap.Error(err)) + bot.logger.Error("Could not set-up bot command reload subscription", zap.Error(err)) } err, bot.cancelWriteRPCSub = api.db.SubscribeKey(WriteMessageRPC, bot.handleWriteMessageRPC) if err != nil { - bot.logger.Error("could not set-up bot command reload subscription", zap.Error(err)) + bot.logger.Error("Could not set-up bot command reload subscription", zap.Error(err)) } return bot @@ -229,12 +229,12 @@ func (b *Bot) Close() error { func (b *Bot) updateCommands(value string) { err := utils.LoadJSONToWrapped[map[string]BotCustomCommand](value, b.customCommands) if err != nil { - b.logger.Error("failed to decode new custom commands", zap.Error(err)) + b.logger.Error("Failed to decode new custom commands", zap.Error(err)) return } // Recreate templates if err := b.updateTemplates(); err != nil { - b.logger.Error("failed to update custom commands templates", zap.Error(err)) + b.logger.Error("Failed to update custom commands templates", zap.Error(err)) return } } @@ -258,7 +258,11 @@ func (b *Bot) updateTemplates() error { func (b *Bot) Connect() { err := b.Client.Connect() if err != nil { - b.logger.Error("bot connection ended", zap.Error(err)) + if errors.Is(err, irc.ErrClientDisconnected) { + b.logger.Info("Twitch bot connection terminated", zap.Error(err)) + } else { + b.logger.Error("Twitch bot connection terminated unexpectedly", zap.Error(err)) + } } } diff --git a/twitch/client.eventsub.go b/twitch/client.eventsub.go index d6a40f1..96d2aec 100644 --- a/twitch/client.eventsub.go +++ b/twitch/client.eventsub.go @@ -21,8 +21,7 @@ func (c *Client) eventSubLoop(userClient *helix.Client) { for endpoint != "" { endpoint, connection, err = c.connectWebsocket(endpoint, connection, userClient) if err != nil { - c.logger.Error("eventsub ws read error", zap.Error(err)) - break + c.logger.Error("EventSub websocket read error", zap.Error(err)) } } if connection != nil { @@ -33,7 +32,7 @@ func (c *Client) eventSubLoop(userClient *helix.Client) { func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, userClient *helix.Client) (string, *websocket.Conn, error) { connection, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { - c.logger.Error("could not connect to eventsub ws", zap.Error(err)) + c.logger.Error("Could not establish a connection to the EventSub websocket", zap.Error(err)) return "", nil, err } @@ -65,14 +64,14 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use case <-c.ctx.Done(): return "", nil, nil case err = <-wsErr: - return "", nil, err + return url, nil, err // Return the endpoint so we can reconnect case messageData = <-received: } var wsMessage EventSubWebsocketMessage err = json.Unmarshal(messageData, &wsMessage) if err != nil { - c.logger.Error("eventsub ws decode error", zap.Error(err)) + c.logger.Error("Error decoding EventSub message", zap.Error(err)) continue } @@ -83,10 +82,10 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use var welcomeData WelcomeMessagePayload err = json.Unmarshal(wsMessage.Payload, &welcomeData) if err != nil { - c.logger.Error("eventsub ws decode error", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) + c.logger.Error("Error decoding EventSub message", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) break } - c.logger.Info("eventsub ws connection established", zap.String("session-id", welcomeData.Session.Id)) + c.logger.Info("Connection to EventSub websocket established", zap.String("session-id", welcomeData.Session.Id)) if oldConnection != nil { utils.Close(oldConnection, c.logger) @@ -94,17 +93,17 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use // Add subscription to websocket session err = c.addSubscriptionsForSession(userClient, welcomeData.Session.Id) if err != nil { - c.logger.Error("could not add subscriptions", zap.Error(err)) + c.logger.Error("Could not add subscriptions", zap.Error(err)) break } case "session_reconnect": var reconnectData WelcomeMessagePayload err = json.Unmarshal(wsMessage.Payload, &reconnectData) if err != nil { - c.logger.Error("eventsub ws decode error", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) + c.logger.Error("Error decoding EventSub message", zap.String("message-type", wsMessage.Metadata.MessageType), zap.Error(err)) break } - c.logger.Info("eventsub ws connection reset requested", 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, connection, nil case "notification": @@ -129,13 +128,13 @@ func (c *Client) processEvent(message EventSubWebsocketMessage) { var notificationData NotificationMessagePayload err := json.Unmarshal(message.Payload, ¬ificationData) if err != nil { - c.logger.Error("eventsub ws decode error", zap.String("message-type", message.Metadata.MessageType), zap.Error(err)) + c.logger.Error("Error decoding EventSub message", zap.String("message-type", message.Metadata.MessageType), zap.Error(err)) } notificationData.Date = time.Now() err = c.db.PutJSON(EventSubEventKey, notificationData) if err != nil { - c.logger.Error("error saving event to db", zap.String("key", EventSubEventKey), zap.Error(err)) + c.logger.Error("Error storing event to database", zap.String("key", EventSubEventKey), zap.Error(err)) } var archive []NotificationMessagePayload @@ -149,7 +148,7 @@ func (c *Client) processEvent(message EventSubWebsocketMessage) { } err = c.db.PutJSON(EventSubHistoryKey, archive) if err != nil { - c.logger.Error("error saving event to db", zap.String("key", EventSubHistoryKey), zap.Error(err)) + c.logger.Error("Error storing event to database", zap.String("key", EventSubHistoryKey), zap.Error(err)) } } @@ -172,7 +171,7 @@ func (c *Client) addSubscriptionsForSession(userClient *helix.Client, session st Condition: topicCondition(topic, c.User.ID), }) if sub.Error != "" || sub.ErrorMessage != "" { - c.logger.Error("subscription error", zap.String("topic", topic), zap.String("topic-version", version), zap.String("err", sub.Error), zap.String("message", sub.ErrorMessage)) + c.logger.Error("EventSub Subscription error", zap.String("topic", topic), zap.String("topic-version", version), zap.String("err", sub.Error), zap.String("message", sub.ErrorMessage)) return fmt.Errorf("%s: %s", sub.Error, sub.ErrorMessage) } if err != nil { diff --git a/twitch/client.go b/twitch/client.go index 502a460..bfe2977 100644 --- a/twitch/client.go +++ b/twitch/client.go @@ -229,7 +229,7 @@ func newClient(config Config, db *database.LocalDBClient, server *http.Server, l } func (c *Client) runStatusPoll() { - c.logger.Info("status poll started") + c.logger.Info("Started polling for stream status") for { // Make sure we're configured and connected properly first if !c.Config.Get().Enabled || c.Bot == nil || c.Bot.Config.Channel == "" {