package bot type EventHandler interface { PublishEvent(event string, data any) error SubscribeEvent(event string, handler func(data any) error) } type Event interface { EventID() string } func PublishEvent(client Client, event Event) error { return client.EventHandler().PublishEvent(event.EventID(), event) } func SubscribeEvent(client Client, event string, handler func(event Event) error) { client.EventHandler().SubscribeEvent(event, func(data any) error { return handler(data.(Event)) }) }