[customevent] Add API module to create custom events

Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
Knut Ahlers 2022-03-31 00:23:19 +02:00
parent cbf50ff928
commit a73f27abd0
Signed by: luzifer
GPG key ID: 0066F03ED215AD7D
4 changed files with 54 additions and 1 deletions

2
go.mod
View file

@ -1,6 +1,6 @@
module github.com/Luzifer/twitch-bot
go 1.17
go 1.18
require (
github.com/Luzifer/go-openssl/v4 v4.1.0

View file

@ -0,0 +1,45 @@
package customevent
import (
"encoding/json"
"net/http"
"github.com/pkg/errors"
"github.com/Luzifer/twitch-bot/plugins"
)
var eventCreatorFunc plugins.EventHandlerFunc
func Register(args plugins.RegistrationArguments) error {
eventCreatorFunc = args.CreateEvent
args.RegisterAPIRoute(plugins.HTTPRouteRegistrationArgs{
Description: "Creates an `custom` event containing the fields provided in the request body",
HandlerFunc: handleCreateEvent,
Method: http.MethodPost,
Module: "customevent",
Name: "Create custom event",
Path: "/create",
RequiresWriteAuth: true,
ResponseType: plugins.HTTPRouteResponseTypeNo200,
})
return nil
}
func handleCreateEvent(w http.ResponseWriter, r *http.Request) {
payload := make(map[string]any)
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
http.Error(w, errors.Wrap(err, "parsing event payload").Error(), http.StatusBadRequest)
return
}
if err := eventCreatorFunc("custom", plugins.FieldCollectionFromData(payload)); err != nil {
http.Error(w, errors.Wrap(err, "creating event").Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusCreated)
}

View file

@ -47,6 +47,8 @@ type (
RegisterFunc func(RegistrationArguments) error
RegistrationArguments struct {
// CreateEvent allows to create an event handed out to all modules to handle
CreateEvent EventHandlerFunc
// FormatMessage is a method to convert templates into strings using internally known variables / configs
FormatMessage MsgFormatter
// GetLogger returns a sirupsen log.Entry pre-configured with the module name

View file

@ -22,6 +22,7 @@ import (
"github.com/Luzifer/twitch-bot/internal/actors/respond"
"github.com/Luzifer/twitch-bot/internal/actors/timeout"
"github.com/Luzifer/twitch-bot/internal/actors/whisper"
"github.com/Luzifer/twitch-bot/internal/apimodules/customevent"
"github.com/Luzifer/twitch-bot/internal/apimodules/msgformat"
"github.com/Luzifer/twitch-bot/internal/apimodules/overlays"
"github.com/Luzifer/twitch-bot/internal/template/numeric"
@ -53,6 +54,7 @@ var (
random.Register,
// API-only modules
customevent.Register,
msgformat.Register,
overlays.Register,
}
@ -104,6 +106,10 @@ func registerRoute(route plugins.HTTPRouteRegistrationArgs) error {
func getRegistrationArguments() plugins.RegistrationArguments {
return plugins.RegistrationArguments{
CreateEvent: func(evt string, eventData *plugins.FieldCollection) error {
handleMessage(ircHdl.Client(), nil, &evt, eventData)
return nil
},
FormatMessage: formatMessage,
GetLogger: func(moduleName string) *log.Entry { return log.WithField("module", moduleName) },
GetStorageManager: func() plugins.StorageManager { return store },