Ctrl K
ComunidadGuías…

events.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package main

import (
	"sync"

	"github.com/Luzifer/go_helpers/fieldcollection"
	log "github.com/sirupsen/logrus"

	"github.com/Luzifer/twitch-bot/v3/pkg/event"
	"github.com/Luzifer/twitch-bot/v3/plugins"
)

var (
	registeredEventHandlers     []plugins.EventHandlerFunc
	registeredEventHandlersLock sync.Mutex
)

var (
	eventTypeCustom       = new("custom")
	eventTypeKoFiDonation = new("kofi_donation")

	knownEvents = []*string{
		event.AdBreakBegin{}.Event(),
		event.Announcement{}.Event(),
		event.Ban{}.Event(),
		event.Bits{}.Event(),
		eventTypeCustom,
		event.ChannelPointRedeem{}.Event(),
		event.ClearChat{}.Event(),
		event.ClearMessage{}.Event(),
		event.Follow{}.Event(),
		event.GiftPaidUpgrade{}.Event(),
		event.HypetrainBegin{}.Event(),
		event.HypetrainEnd{}.Event(),
		event.HypetrainProgress{}.Event(),
		event.Join{}.Event(),
		eventTypeKoFiDonation,
		event.ModeratorAdd{}.Event(),
		event.ModeratorRemove{}.Event(),
		event.OutboundRaid{}.Event(),
		event.Part{}.Event(),
		event.Permit{}.Event(),
		event.PollBegin{}.Event(),
		event.PollEnd{}.Event(),
		event.PollProgress{}.Event(),
		event.PrimePaidUpgrade{}.Event(),
		event.Raid{}.Event(),
		event.Resub{}.Event(),
		event.ShoutoutCreated{}.Event(),
		event.ShoutoutReceived{}.Event(),
		event.Sub{}.Event(),
		event.SubGift{}.Event(),
		event.SubMysteryGift{}.Event(),
		event.SuspiciousUserMessage{}.Event(),
		event.SuspiciousUserUpdate{}.Event(),
		event.Timeout{}.Event(),
		event.VIPAdd{}.Event(),
		event.VIPRemove{}.Event(),
		event.WatchStreak{}.Event(),
		event.Whisper{}.Event(),

		event.CategoryUpdate{}.Event(),
		event.StreamOffline{}.Event(),
		event.StreamOnline{}.Event(),
		event.TitleUpdate{}.Event(),
	}
)

func notifyEventHandlers(evt string, eventData *fieldcollection.FieldCollection) {
	registeredEventHandlersLock.Lock()
	defer registeredEventHandlersLock.Unlock()

	for _, fn := range registeredEventHandlers {
		if err := fn(evt, eventData); err != nil {
			log.WithError(err).Error("EventHandler caused error")
		}
	}
}

func registerEventHandlers(eh plugins.EventHandlerFunc) error {
	registeredEventHandlersLock.Lock()
	defer registeredEventHandlersLock.Unlock()

	registeredEventHandlers = append(registeredEventHandlers, eh)
	return nil
}