[core] Fix: send-message function passed to plugin was nil

Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
Knut Ahlers 2021-12-10 02:28:13 +01:00
parent 8c32889584
commit 7e2b83fc0a
Signed by: luzifer
GPG Key ID: 0066F03ED215AD7D
2 changed files with 17 additions and 6 deletions

View File

@ -13,7 +13,6 @@ import (
"sync" "sync"
"time" "time"
"github.com/go-irc/irc"
"github.com/gofrs/uuid/v3" "github.com/gofrs/uuid/v3"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -55,8 +54,6 @@ var (
runID = uuid.Must(uuid.NewV4()).String() runID = uuid.Must(uuid.NewV4()).String()
externalHTTPAvailable bool externalHTTPAvailable bool
sendMessage func(m *irc.Message) error
store = newStorageFile(false) store = newStorageFile(false)
twitchClient *twitch.Client twitchClient *twitch.Client
twitchEventSubClient *twitch.EventSubClient twitchEventSubClient *twitch.EventSubClient
@ -249,7 +246,6 @@ func main() {
case <-ircDisconnected: case <-ircDisconnected:
if ircHdl != nil { if ircHdl != nil {
sendMessage = nil
ircHdl.Close() ircHdl.Close()
} }
@ -258,11 +254,9 @@ func main() {
} }
go func() { go func() {
sendMessage = ircHdl.SendMessage
if err := ircHdl.Run(); err != nil { if err := ircHdl.Run(); err != nil {
log.WithError(err).Error("IRC run exited unexpectedly") log.WithError(err).Error("IRC run exited unexpectedly")
} }
sendMessage = nil
time.Sleep(ircReconnectDelay) time.Sleep(ircReconnectDelay)
ircDisconnected <- struct{}{} ircDisconnected <- struct{}{}
}() }()

View File

@ -4,9 +4,11 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/go-irc/irc"
"github.com/pkg/errors" "github.com/pkg/errors"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/Luzifer/go_helpers/v2/backoff"
"github.com/Luzifer/go_helpers/v2/str" "github.com/Luzifer/go_helpers/v2/str"
"github.com/Luzifer/twitch-bot/internal/actors/ban" "github.com/Luzifer/twitch-bot/internal/actors/ban"
"github.com/Luzifer/twitch-bot/internal/actors/delay" "github.com/Luzifer/twitch-bot/internal/actors/delay"
@ -25,6 +27,8 @@ import (
"github.com/Luzifer/twitch-bot/twitch" "github.com/Luzifer/twitch-bot/twitch"
) )
const ircHandleWaitRetries = 10
var ( var (
corePluginRegistrations = []plugins.RegisterFunc{ corePluginRegistrations = []plugins.RegisterFunc{
// Actors // Actors
@ -105,3 +109,16 @@ func getRegistrationArguments() plugins.RegistrationArguments {
SendMessage: sendMessage, SendMessage: sendMessage,
} }
} }
func sendMessage(m *irc.Message) error {
if err := backoff.NewBackoff().WithMaxIterations(ircHandleWaitRetries).Retry(func() error {
if ircHdl == nil {
return errors.New("irc handle not available")
}
return nil
}); err != nil {
return errors.Wrap(err, "waiting for IRC connection")
}
return ircHdl.SendMessage(m)
}