- Модуль: 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);
}