mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 11:51:17 +00:00
Add registration for raw-message-handlers
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
f0b6556083
commit
e4d4c45e7a
3 changed files with 46 additions and 7 deletions
|
@ -57,12 +57,13 @@ func registerRoute(route plugins.HTTPRouteRegistrationArgs) error {
|
|||
|
||||
func getRegistrationArguments() plugins.RegistrationArguments {
|
||||
return plugins.RegistrationArguments{
|
||||
FormatMessage: formatMessage,
|
||||
GetLogger: func(moduleName string) *log.Entry { return log.WithField("module", moduleName) },
|
||||
RegisterActor: registerAction,
|
||||
RegisterAPIRoute: registerRoute,
|
||||
RegisterCron: cronService.AddFunc,
|
||||
RegisterTemplateFunction: tplFuncs.Register,
|
||||
SendMessage: sendMessage,
|
||||
FormatMessage: formatMessage,
|
||||
GetLogger: func(moduleName string) *log.Entry { return log.WithField("module", moduleName) },
|
||||
RegisterActor: registerAction,
|
||||
RegisterAPIRoute: registerRoute,
|
||||
RegisterCron: cronService.AddFunc,
|
||||
RegisterRawMessageHandler: registerRawMessageHandler,
|
||||
RegisterTemplateFunction: tplFuncs.Register,
|
||||
SendMessage: sendMessage,
|
||||
}
|
||||
}
|
||||
|
|
33
irc.go
33
irc.go
|
@ -4,13 +4,42 @@ import (
|
|||
"crypto/tls"
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/Luzifer/twitch-bot/plugins"
|
||||
"github.com/Luzifer/twitch-bot/twitch"
|
||||
"github.com/go-irc/irc"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var (
|
||||
rawMessageHandlers []plugins.RawMessageHandlerFunc
|
||||
rawMessageHandlersLock sync.Mutex
|
||||
)
|
||||
|
||||
func notifyRawMessageHandlers(m *irc.Message) error {
|
||||
rawMessageHandlersLock.Lock()
|
||||
defer rawMessageHandlersLock.Unlock()
|
||||
|
||||
for _, fn := range rawMessageHandlers {
|
||||
if err := fn(m); err != nil {
|
||||
return errors.Wrap(err, "executing raw message handlers")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func registerRawMessageHandler(fn plugins.RawMessageHandlerFunc) error {
|
||||
rawMessageHandlersLock.Lock()
|
||||
defer rawMessageHandlersLock.Unlock()
|
||||
|
||||
rawMessageHandlers = append(rawMessageHandlers, fn)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type ircHandler struct {
|
||||
conn *tls.Conn
|
||||
c *irc.Client
|
||||
|
@ -127,6 +156,10 @@ func (i ircHandler) Handle(c *irc.Client, m *irc.Message) {
|
|||
}).Trace("Unhandled message")
|
||||
// Unhandled message type, not yet needed
|
||||
}
|
||||
|
||||
if err := notifyRawMessageHandlers(m); err != nil {
|
||||
log.WithError(err).Error("Unable to notify raw message handlers")
|
||||
}
|
||||
}
|
||||
|
||||
func (i ircHandler) Run() error { return errors.Wrap(i.c.Run(), "running IRC client") }
|
||||
|
|
|
@ -29,6 +29,9 @@ type (
|
|||
|
||||
MsgFormatter func(tplString string, m *irc.Message, r *Rule, fields map[string]interface{}) (string, error)
|
||||
|
||||
RawMessageHandlerFunc func(m *irc.Message) error
|
||||
RawMessageHandlerRegisterFunc func(RawMessageHandlerFunc) error
|
||||
|
||||
// RegisterFunc is the type of function your plugin must expose with the name Register
|
||||
RegisterFunc func(RegistrationArguments) error
|
||||
|
||||
|
@ -43,6 +46,8 @@ type (
|
|||
RegisterAPIRoute HTTPRouteRegistrationFunc
|
||||
// RegisterCron is a method to register cron functions in the global cron instance
|
||||
RegisterCron CronRegistrationFunc
|
||||
// RegisterRawMessageHandler is a method to register an handler to receive ALL messages received
|
||||
RegisterRawMessageHandler RawMessageHandlerRegisterFunc
|
||||
// RegisterTemplateFunction can be used to register a new template functions
|
||||
RegisterTemplateFunction TemplateFuncRegister
|
||||
// SendMessage can be used to send a message not triggered by an event
|
||||
|
|
Loading…
Reference in a new issue