1
0
Fork 0
mirror of https://git.sr.ht/~ashkeel/strimertul synced 2024-09-18 01:50:50 +00:00

change: better log messages, tuned reconnection logic on eventsub, updated to kv v10

This commit is contained in:
Ash Keel 2023-04-19 15:27:13 +02:00
parent c2eca501ac
commit ba3b9c673a
No known key found for this signature in database
GPG key ID: BAD8D93E7314ED3E
11 changed files with 51 additions and 61 deletions

View file

@ -5,7 +5,7 @@ import (
"fmt" "fmt"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
kv "github.com/strimertul/kilovolt/v9" kv "github.com/strimertul/kilovolt/v10"
"go.uber.org/zap" "go.uber.org/zap"
) )

View file

@ -6,7 +6,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
kv "github.com/strimertul/kilovolt/v9" kv "github.com/strimertul/kilovolt/v10"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"go.uber.org/zap" "go.uber.org/zap"

View file

@ -9,7 +9,7 @@ import (
"github.com/strimertul/strimertul/utils" "github.com/strimertul/strimertul/utils"
"github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble"
kv "github.com/strimertul/kilovolt/v9" kv "github.com/strimertul/kilovolt/v10"
pebble_driver "github.com/strimertul/kv-pebble" pebble_driver "github.com/strimertul/kv-pebble"
"go.uber.org/zap" "go.uber.org/zap"
) )

6
go.mod
View file

@ -6,15 +6,15 @@ require (
git.sr.ht/~hamcha/containers v0.3.2 git.sr.ht/~hamcha/containers v0.3.2
github.com/Masterminds/sprig/v3 v3.2.3 github.com/Masterminds/sprig/v3 v3.2.3
github.com/apenwarr/fixconsole v0.0.0-20191012055117-5a9f6489cc29 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/gempir/go-twitch-irc/v4 v4.0.0
github.com/gorilla/websocket v1.5.0 github.com/gorilla/websocket v1.5.0
github.com/hashicorp/golang-lru/v2 v2.0.2 github.com/hashicorp/golang-lru/v2 v2.0.2
github.com/json-iterator/go v1.1.12 github.com/json-iterator/go v1.1.12
github.com/nicklaw5/helix/v2 v2.22.0 github.com/nicklaw5/helix/v2 v2.22.0
github.com/postfinance/single v0.0.2 github.com/postfinance/single v0.0.2
github.com/strimertul/kilovolt/v9 v9.1.0 github.com/strimertul/kilovolt/v10 v10.0.0
github.com/strimertul/kv-pebble v1.2.1 github.com/strimertul/kv-pebble v1.2.2
github.com/urfave/cli/v2 v2.25.1 github.com/urfave/cli/v2 v2.25.1
github.com/wailsapp/wails/v2 v2.4.1 github.com/wailsapp/wails/v2 v2.4.1
go.uber.org/zap v1.24.0 go.uber.org/zap v1.24.0

24
go.sum
View file

@ -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/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/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 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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= 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-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 h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= 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-20230418161327-101876aa7088 h1:/e1HsWCYnzjiU4G3BliGLb2f9vB5Ar2yvLJ0rqACwgs=
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/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50=
github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ=
github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= 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= 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/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= 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.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.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 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.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.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.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.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/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/strimertul/kilovolt/v9 v9.1.0 h1:g4oHaNodr2KxygbHTIr1vN4AyNRfBM02dvw5FYtF+6s= github.com/strimertul/kilovolt/v10 v10.0.0 h1:VGUFZ1/s4IDAYp9kqZQosoelRqXA/cN2JP41BgLc4yQ=
github.com/strimertul/kilovolt/v9 v9.1.0/go.mod h1:i9cizfUV9B+XYkmLSPr2dhNe8kt4R0xjG2kCZb7XoZg= github.com/strimertul/kilovolt/v10 v10.0.0/go.mod h1:lB+aF6VpoMfxkK+DFVzIB9yOW0nNaZOtFt395Cf+Hyk=
github.com/strimertul/kv-pebble v1.2.1 h1:Xqn73U6nAqrBnQxr9TrM7x1WfP26ko9Cd51340B2/o8= github.com/strimertul/kv-pebble v1.2.2 h1:/vV8a1gObO4os3gB3NT9GWAmWbi+VsSS7wvb6G+HOzM=
github.com/strimertul/kv-pebble v1.2.1/go.mod h1:lfyBKJ4uVs/KsTuLPR1TTYRe3mZzP9auLDbZD9zym+0= 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 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE=
github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= 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= 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.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 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= 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 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 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 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 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= 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 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= 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= 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-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-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-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/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.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-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.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.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/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-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/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-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.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 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-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

View file

@ -13,7 +13,7 @@ import (
"git.sr.ht/~hamcha/containers/sync" "git.sr.ht/~hamcha/containers/sync"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
kv "github.com/strimertul/kilovolt/v9" kv "github.com/strimertul/kilovolt/v10"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/strimertul/strimertul/database" "github.com/strimertul/strimertul/database"

View file

@ -18,7 +18,7 @@ import (
func (m *Manager) SetupTwitch() { func (m *Manager) SetupTwitch() {
bot := m.twitchManager.Client().Bot bot := m.twitchManager.Client().Bot
if bot == nil { 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 return
} }
@ -86,7 +86,7 @@ func (m *Manager) SetupTwitch() {
for { for {
userClient, err := client.GetUserClient(false) userClient, err := client.GetUserClient(false)
if err != nil { 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 return
} }
res, err := userClient.GetChannelChatChatters(&helix.GetChatChattersParams{ res, err := userClient.GetChannelChatChatters(&helix.GetChatChattersParams{
@ -96,7 +96,7 @@ func (m *Manager) SetupTwitch() {
After: cursor, After: cursor,
}) })
if err != nil { 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 return
} }
for _, user := range res.Data.Chatters { for _, user := range res.Data.Chatters {
@ -132,13 +132,13 @@ func (m *Manager) SetupTwitch() {
if len(users) > 0 { if len(users) > 0 {
err := m.GivePoints(pointsToGive) err := m.GivePoints(pointsToGive)
if err != nil { 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() { func (m *Manager) StopTwitch() {

View file

@ -91,12 +91,11 @@ func main() {
level = zapcore.InfoLevel level = zapcore.InfoLevel
} }
initLogger(level) initLogger(level)
logger.Info("app started", zap.String("version", appVersion))
// Create file for panics // Create file for panics
panicLog, err = os.OpenFile(panicFilename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0o666) panicLog, err = os.OpenFile(panicFilename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0o666)
if err != nil { if err != nil {
logger.Warn("could not create panic log", zap.Error(err)) logger.Warn("Could not create panic log", zap.Error(err))
} else { } else {
utils.RedirectStderr(panicLog) utils.RedirectStderr(panicLog)
} }

View file

@ -96,7 +96,7 @@ func newBot(api *Client, config BotConfig) *Bot {
// Ignore messages for a while or twitch will get mad! // Ignore messages for a while or twitch will get mad!
if message.Time.Before(bot.lastMessage.Get().Add(time.Second * 2)) { 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 return
} }
@ -140,7 +140,7 @@ func newBot(api *Client, config BotConfig) *Bot {
err := bot.api.db.PutJSON(ChatEventKey, message) err := bot.api.db.PutJSON(ChatEventKey, message)
if err != nil { 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 { if bot.Config.ChatHistory > 0 {
history := bot.chatHistory.Get() history := bot.chatHistory.Get()
@ -150,7 +150,7 @@ func newBot(api *Client, config BotConfig) *Bot {
bot.chatHistory.Set(append(history, message)) bot.chatHistory.Set(append(history, message))
err = bot.api.db.PutJSON(ChatHistoryKey, bot.chatHistory.Get()) err = bot.api.db.PutJSON(ChatHistoryKey, bot.chatHistory.Get())
if err != nil { 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) { client.OnUserJoinMessage(func(message irc.UserJoinMessage) {
if strings.ToLower(message.User) == bot.username { 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 { } 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) { client.OnUserPartMessage(func(message irc.UserPartMessage) {
if strings.ToLower(message.User) == bot.username { 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 { } 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) { if errors.Is(err, database.ErrEmptyKey) {
customCommands = make(map[string]BotCustomCommand) customCommands = make(map[string]BotCustomCommand)
} else { } 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) bot.customCommands.Set(customCommands)
err = bot.updateTemplates() err = bot.updateTemplates()
if err != nil { 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) err, bot.cancelUpdateSub = api.db.SubscribeKey(CustomCommandsKey, bot.updateCommands)
if err != nil { 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) err, bot.cancelWriteRPCSub = api.db.SubscribeKey(WriteMessageRPC, bot.handleWriteMessageRPC)
if err != nil { 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 return bot
@ -229,12 +229,12 @@ func (b *Bot) Close() error {
func (b *Bot) updateCommands(value string) { func (b *Bot) updateCommands(value string) {
err := utils.LoadJSONToWrapped[map[string]BotCustomCommand](value, b.customCommands) err := utils.LoadJSONToWrapped[map[string]BotCustomCommand](value, b.customCommands)
if err != nil { 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 return
} }
// Recreate templates // Recreate templates
if err := b.updateTemplates(); err != nil { 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 return
} }
} }
@ -258,7 +258,11 @@ func (b *Bot) updateTemplates() error {
func (b *Bot) Connect() { func (b *Bot) Connect() {
err := b.Client.Connect() err := b.Client.Connect()
if err != nil { 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))
}
} }
} }

View file

@ -21,8 +21,7 @@ func (c *Client) eventSubLoop(userClient *helix.Client) {
for endpoint != "" { for endpoint != "" {
endpoint, connection, err = c.connectWebsocket(endpoint, connection, userClient) endpoint, connection, err = c.connectWebsocket(endpoint, connection, userClient)
if err != nil { if err != nil {
c.logger.Error("eventsub ws read error", zap.Error(err)) c.logger.Error("EventSub websocket read error", zap.Error(err))
break
} }
} }
if connection != nil { 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) { func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, userClient *helix.Client) (string, *websocket.Conn, error) {
connection, _, err := websocket.DefaultDialer.Dial(url, nil) connection, _, err := websocket.DefaultDialer.Dial(url, nil)
if err != 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 return "", nil, err
} }
@ -65,14 +64,14 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use
case <-c.ctx.Done(): case <-c.ctx.Done():
return "", nil, nil return "", nil, nil
case err = <-wsErr: case err = <-wsErr:
return "", nil, err return url, nil, err // Return the endpoint so we can reconnect
case messageData = <-received: case messageData = <-received:
} }
var wsMessage EventSubWebsocketMessage var wsMessage EventSubWebsocketMessage
err = json.Unmarshal(messageData, &wsMessage) err = json.Unmarshal(messageData, &wsMessage)
if err != nil { if err != nil {
c.logger.Error("eventsub ws decode error", zap.Error(err)) c.logger.Error("Error decoding EventSub message", zap.Error(err))
continue continue
} }
@ -83,10 +82,10 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use
var welcomeData WelcomeMessagePayload var welcomeData WelcomeMessagePayload
err = json.Unmarshal(wsMessage.Payload, &welcomeData) err = json.Unmarshal(wsMessage.Payload, &welcomeData)
if err != nil { 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 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 { if oldConnection != nil {
utils.Close(oldConnection, c.logger) utils.Close(oldConnection, c.logger)
@ -94,17 +93,17 @@ func (c *Client) connectWebsocket(url string, oldConnection *websocket.Conn, use
// Add subscription to websocket session // Add subscription to websocket session
err = c.addSubscriptionsForSession(userClient, welcomeData.Session.Id) err = c.addSubscriptionsForSession(userClient, welcomeData.Session.Id)
if err != nil { if err != nil {
c.logger.Error("could not add subscriptions", zap.Error(err)) c.logger.Error("Could not add subscriptions", zap.Error(err))
break break
} }
case "session_reconnect": case "session_reconnect":
var reconnectData WelcomeMessagePayload var reconnectData WelcomeMessagePayload
err = json.Unmarshal(wsMessage.Payload, &reconnectData) err = json.Unmarshal(wsMessage.Payload, &reconnectData)
if err != nil { 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 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 return reconnectData.Session.ReconnectUrl, connection, nil
case "notification": case "notification":
@ -129,13 +128,13 @@ func (c *Client) processEvent(message EventSubWebsocketMessage) {
var notificationData NotificationMessagePayload var notificationData NotificationMessagePayload
err := json.Unmarshal(message.Payload, &notificationData) err := json.Unmarshal(message.Payload, &notificationData)
if err != nil { 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() notificationData.Date = time.Now()
err = c.db.PutJSON(EventSubEventKey, notificationData) err = c.db.PutJSON(EventSubEventKey, notificationData)
if err != nil { 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 var archive []NotificationMessagePayload
@ -149,7 +148,7 @@ func (c *Client) processEvent(message EventSubWebsocketMessage) {
} }
err = c.db.PutJSON(EventSubHistoryKey, archive) err = c.db.PutJSON(EventSubHistoryKey, archive)
if err != nil { 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), Condition: topicCondition(topic, c.User.ID),
}) })
if sub.Error != "" || sub.ErrorMessage != "" { 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) return fmt.Errorf("%s: %s", sub.Error, sub.ErrorMessage)
} }
if err != nil { if err != nil {

View file

@ -229,7 +229,7 @@ func newClient(config Config, db *database.LocalDBClient, server *http.Server, l
} }
func (c *Client) runStatusPoll() { func (c *Client) runStatusPoll() {
c.logger.Info("status poll started") c.logger.Info("Started polling for stream status")
for { for {
// Make sure we're configured and connected properly first // Make sure we're configured and connected properly first
if !c.Config.Get().Enabled || c.Bot == nil || c.Bot.Config.Channel == "" { if !c.Config.Get().Enabled || c.Bot == nil || c.Bot.Config.Channel == "" {