- Модуль: imbot
- Путь к файлу: ~/bitrix/modules/imbot/lib/bot/network.php
- Класс: BitrixImBotBotNetwork
- Вызов: Network::onMessageAdd
static function onMessageAdd($messageId, $messageFields)
{
if (isset($messageFields['SYSTEM']) && $messageFields['SYSTEM'] === 'Y')
{
return false;
}
if (!static::checkMembershipRestriction($messageFields))
{
(new CIMChat($messageFields['BOT_ID']))->deleteUser($messageFields['CHAT_ID'], $messageFields['BOT_ID']);
return false;
}
if (!static::checkMessageRestriction($messageFields))
{
return false;
}
self::instanceDialogSession((int)$messageFields['BOT_ID'], $messageFields['DIALOG_ID'])->start();
// check user vote for session by direct text input '1' or '0'
if (self::checkSessionVoteMessage($messageFields))
{
return true;
}
$files = [];
if (isset($messageFields['FILES']) && MainLoader::includeModule('disk'))
{
foreach ($messageFields['FILES'] as $file)
{
$fileModel = BitrixDiskFile::loadById($file['id']);
if (!$fileModel)
{
continue;
}
$file['link'] = CIMDisk::getFileLink($fileModel);
if (!$file['link'])
{
continue;
}
$merged = false;
if (BitrixDiskTypeFile::isImage($fileModel))
{
$source = $fileModel->getFile();
if ($source)
{
$files[] = [
'name' => $file['name'],
'type' => $file['type'],
'link' => $file['link'],
'width' => (int)$source["WIDTH"],
'height' => (int)$source["HEIGHT"],
'size' => $file['size']
];
$merged = true;
}
}
if (!$merged)
{
$files[] = [
'name' => $file['name'],
'type' => $file['type'],
'link' => $file['link'],
'size' => $file['size']
];
}
}
}
$messageFields['MESSAGE'] = self::removeMentions($messageFields['MESSAGE'] ?? '');
$messageParams = $messageFields['PARAMS'] ?? [];
if ($relatedMessages = (new CIMHistory)->getRelatedMessages($messageId, 1, 0, false, false))
{
foreach ($relatedMessages['message'] as $message)
{
if (
$message['system'] != 'Y'
&& isset($message['params'][self::MESSAGE_PARAM_ALLOW_QUOTE])
&& $message['params'][self::MESSAGE_PARAM_ALLOW_QUOTE] === 'Y'
)
{
$messageFields['MESSAGE'] =
str_repeat("-", 54)."n".
$message['text']. "n".
str_repeat("-", 54)."n".
$messageFields['MESSAGE'];
break;
}
}
}
CIMMessageParam::set($messageId, [
self::MESSAGE_PARAM_SENDING => 'Y',
self::MESSAGE_PARAM_SENDING_TIME => time()
]);
$isSuccessful = true;
$result = self::clientMessageAdd([
'BOT_ID' => $messageFields['BOT_ID'],
'USER_ID' => $messageFields['FROM_USER_ID'],
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => [
'ID' => $messageId,
'TYPE' => $messageFields['MESSAGE_TYPE'],
'TEXT' => $messageFields['MESSAGE'],
],
'FILES' => $files,
'PARAMS' => $messageParams,
]);
if (isset($result['error']))
{
$isSuccessful = false;
self::$lastError = new ImBotError(__METHOD__, $result['error']['code'], $result['error']['msg']);
$message = '';
if (self::getError()->code == 'LINE_DISABLED')
{
if (class_exists('BitrixImBotBotSupport24'))
{
$message = ImBotBotSupport24::replacePlaceholders(
ImBotBotSupport24::getMessage('LINE_DISABLED'),
$messageFields['FROM_USER_ID']
);
}
if (empty($message))
{
$message = Loc::getMessage('IMBOT_NETWORK_ERROR_LINE_DISABLED');
}
}
else
{
$message = Loc::getMessage('IMBOT_NETWORK_ERROR_NOT_FOUND');
}
ImBot::addMessage(['BOT_ID' => $messageFields['BOT_ID']], [
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => $message,
'SYSTEM' => 'Y'
]);
CIMMessageParam::set($messageId, [
self::MESSAGE_PARAM_DELIVERED => 'N',
self::MESSAGE_PARAM_SENDING => 'N',
self::MESSAGE_PARAM_SENDING_TIME => 0
]);
}
CIMMessageParam::sendPull($messageId, [
self::MESSAGE_PARAM_DELIVERED,
self::MESSAGE_PARAM_SENDING,
self::MESSAGE_PARAM_SENDING_TIME
]);
return $isSuccessful;
}