- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/bot.php
- Класс: BitrixImBot
- Вызов: Bot::onMessageAdd
static function onMessageAdd($messageId, $messageFields)
{
$botExecModule = self::getBotsForMessage($messageFields);
if (!$botExecModule)
{
return true;
}
if ($messageFields['MESSAGE_TYPE'] != IM_MESSAGE_PRIVATE)
{
$messageFields['MESSAGE_ORIGINAL'] = $messageFields['MESSAGE'];
if (preg_match("/[USER=([0-9]+)( REPLACE)?](.*?)[/USER]/i", $messageFields['MESSAGE'], $matches))
{
$messageFields['TO_USER_ID'] = $matches[1];
}
else
{
$messageFields['TO_USER_ID'] = 0;
}
$messageFields['MESSAGE'] = trim(preg_replace('#[(?PUSER)=d+].+?[/(?P=tag)],?#', '', $messageFields['MESSAGE']));
}
$messageFields['DIALOG_ID'] = self::getDialogId($messageFields);
$messageFields = self::removeFieldsToEvent($messageFields);
foreach ($botExecModule as $params)
{
if (!$params['MODULE_ID'] || !BitrixMainLoader::includeModule($params['MODULE_ID']))
{
continue;
}
$messageFields['BOT_ID'] = $params['BOT_ID'];
if ($params["METHOD_MESSAGE_ADD"] && class_exists($params["CLASS"]) && method_exists($params["CLASS"], $params["METHOD_MESSAGE_ADD"]))
{
BitrixImModelBotTable::update($params['BOT_ID'], array(
"COUNT_MESSAGE" => new BitrixMainDBSqlExpression("?# + 1", "COUNT_MESSAGE")
));
call_user_func_array(array($params["CLASS"], $params["METHOD_MESSAGE_ADD"]), Array($messageId, $messageFields));
}
else if (class_exists($params["CLASS"]) && method_exists($params["CLASS"], "onMessageAdd"))
{
call_user_func_array(array($params["CLASS"], "onMessageAdd"), Array($messageId, $messageFields));
}
}
unset($messageFields['BOT_ID']);
foreach(BitrixMainEventManager::getInstance()->findEventHandlers("im", "onImBotMessageAdd") as $event)
{
ExecuteModuleEventEx($event, Array($botExecModule, $messageId, $messageFields));
}
if (
$messageFields['CHAT_ENTITY_TYPE'] == 'LINES'
&& trim($messageFields['MESSAGE']) === '0'
&& BitrixMainLoader::includeModule('imopenlines')
)
{
$chat = new BitrixImopenlinesChat($messageFields['TO_CHAT_ID']);
$chat->endBotSession();
}
return true;
}