• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Update/UpdateService.php
  • Класс: BitrixImV2MessageUpdateUpdateService
  • Вызов: UpdateService::sendEvents
private function sendEvents()
{
	$pullMessage = [
		'id' => (int)$this->message->getId(),
		'type' => $this->message->getChat()->getType() == Chat::IM_TYPE_PRIVATE ? 'private' : 'chat',
		'text' => Text::parse($this->message->getMessage()),
		'params' => $this->message->getParams()->toRestFormat(),
	];

	$relations = $this->message->getChat()->getRelations();
	$relationIds = [];
	$botInChat = [];

	if ($pullMessage['type'] == Chat::IM_TYPE_PRIVATE)
	{
		foreach ($relations as $relation)
		{
			$relationIds[] = $relation->getUserId();
			if ($relation->getUserId() !== $this->message->getAuthorId())
			{
				$recipientId = $relation->getUserId();
			}
		}

		$pullMessage['fromUserId'] = $this->message->getAuthorId();
		$pullMessage['toUserId'] = $recipientId;
		$pullMessage['senderId'] = $this->message->getAuthorId();
		$pullMessage['chatId'] = $this->message->getChatId();
	}
	else
	{
		$pullMessage['chatId'] = $this->message->getChatId();
		$pullMessage['dialogId'] = 'chat' . $pullMessage['chatId'];
		$pullMessage['senderId'] = $this->message->getAuthorId();

		foreach ($relations as $relation)
		{
			$relationIds[] = $relation->getUserId();
			if ($this->message->getChat()->getEntityType() === Chat::ENTITY_TYPE_LINE)
			{
				if ($relation->getUser()->getExternalAuthId() === 'imconnector')
				{
					unset($relationIds[$relation->getUserId()]);
					continue;
				}
			}
			if ($relation->getUser()->getExternalAuthId() === Bot::EXTERNAL_AUTH_ID)
			{
				$botInChat[$relation->getUserId()] = $relation->getUserId();
				unset($relationIds[$relation->getUserId()]);
			}
		}
	}

	if ($pullMessage['type'] == Chat::IM_TYPE_PRIVATE)
	{
		Event::add($pullMessage['toUserId'], [
			'module_id' => 'im',
			'command' => 'messageUpdate',
			'params' => $pullMessage,
			'extra' => Common::getPullExtra()
		]);

		$pullMessage['fromUserId'] = $pullMessage['toUserId'];
		$pullMessage['toUserId'] = $pullMessage['fromUserId'];
		$pullMessage['senderId'] = $pullMessage['toUserId'];

		Event::add($pullMessage['toUserId'], [
			'module_id' => 'im',
			'command' => 'messageUpdate',
			'params' => $pullMessage,
			'extra' => Common::getPullExtra()
		]);
	}
	else
	{
		Event::add($relationIds, [
			'module_id' => 'im',
			'command' => 'messageUpdate',
			'params' => $pullMessage,
			'extra' => Common::getPullExtra()
		]);
	}

	if (in_array($this->message->getChat()->getType(), [IM_MESSAGE_OPEN, IM_MESSAGE_OPEN_LINE], true))
	{
		CPullWatch::AddToStack('IM_PUBLIC_' . $this->message->getChatId(), [
			'module_id' => 'im',
			'command' => 'messageUpdate',
			'params' => $pullMessage,
			'extra' => Common::getPullExtra()
		]);
	}

	$this->fireEventAfterMessageUpdate($botInChat);
}