*/ class Command implements IEventListener { public const RESPONSE_NONE = 0; public const RESPONSE_USER = 1; public const RESPONSE_ALL = 2; public function handle(Event $event): void { if (!$event instanceof MessageParseEvent) { return; } $message = $event->getMessage(); if ($message->getMessageType() !== ChatManager::VERB_COMMAND) { return; } $message->setVisibility(false); $comment = $message->getComment(); $data = json_decode($comment->getMessage(), true); if (!\is_array($data)) { return; } $event->stopPropagation(); if ($data['visibility'] === self::RESPONSE_NONE) { $message->setVisibility(false); return; } $participant = $message->getParticipant(); if ($data['visibility'] !== self::RESPONSE_ALL && $participant !== null && ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_USERS || $data['user'] !== $participant->getAttendee()->getActorId())) { $message->setVisibility(false); return; } $message->setMessage($data['output'], []); } }