about summary refs log tree commit diff
path: root/pkg/discord/events/event_handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/discord/events/event_handler.go')
-rw-r--r--pkg/discord/events/event_handler.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/pkg/discord/events/event_handler.go b/pkg/discord/events/event_handler.go
new file mode 100644
index 0000000..5a1a118
--- /dev/null
+++ b/pkg/discord/events/event_handler.go
@@ -0,0 +1,29 @@
+package events
+
+type EventHandler interface {
+	Add(event Event, handler func(payload any))
+
+	Fire(event Event, payload any)
+}
+
+var _ EventHandler = &EventHandlerImpl{}
+
+type EventHandlerImpl struct {
+	handlers map[Event]func(payload any)
+}
+
+func NewEventHandler() *EventHandlerImpl {
+	return &EventHandlerImpl{
+		handlers: make(map[Event]func(payload any)),
+	}
+}
+
+func (h *EventHandlerImpl) Add(event Event, handler func(payload any)) {
+	h.handlers[event] = handler
+}
+
+func (h *EventHandlerImpl) Fire(event Event, payload any) {
+	if handler, ok := h.handlers[event]; ok {
+		handler(payload)
+	}
+}