private function processRoomEvent(Event $event) { $eventId = $event->getId(); $this->logger->log(Level::EVENT, "Processing room event #{$eventId}", $event); try { $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for built in event handlers"); (yield $this->builtInActionManager->handleEvent($event)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for built in event handlers"); $chatMessage = null; if ($event instanceof MessageEvent && ($this->devMode || $event->getUserId() !== $event->getRoom()->getSession()->getUser()->getId())) { $chatMessage = $this->messageFactory->build($event); if ($chatMessage instanceof Command) { $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for built in commands"); (yield $this->builtInActionManager->handleCommand($chatMessage)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for built in commands"); } else { $this->logger->log(Level::DEBUG, "Event #{$eventId} is not a command, it's a " . get_class($chatMessage)); } } if (!$event instanceof RoomSourcedEvent) { // probably an Unknown event return; } $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for plugins"); (yield $this->pluginManager->handleRoomEvent($event, $chatMessage)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for plugins"); } catch (\Throwable $e) { $this->logger->log(Level::DEBUG, "Something went wrong while processing event #{$eventId}: {$e}"); } }