- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/bot.php
- Класс: BitrixImBot
- Вызов: Bot::onJoinChat
static function onJoinChat($dialogId, $joinFields)
{
$bots = self::getListCache();
if (empty($bots))
{
return true;
}
if (!isset($joinFields['BOT_ID']) || !$bots[$joinFields['BOT_ID']])
{
return false;
}
$bot = $bots[$joinFields['BOT_ID']];
if (!BitrixMainLoader::includeModule($bot['MODULE_ID']))
{
return false;
}
if ($joinFields['CHAT_TYPE'] == IM_MESSAGE_PRIVATE)
{
$updateCounter = array("COUNT_USER" => new BitrixMainDBSqlExpression("?# + 1", "COUNT_USER"));
}
else
{
$updateCounter = array("COUNT_CHAT" => new BitrixMainDBSqlExpression("?# + 1", "COUNT_CHAT"));
}
BitrixImModelBotTable::update($joinFields['BOT_ID'], $updateCounter);
if ($joinFields['CHAT_TYPE'] != IM_MESSAGE_PRIVATE && $bot['TYPE'] == self::TYPE_SUPERVISOR)
{
CIMMessenger::Add(Array(
'DIALOG_ID' => $dialogId,
'MESSAGE_TYPE' => $joinFields['CHAT_TYPE'],
'MESSAGE' => str_replace(Array('#BOT_NAME#'), Array('[USER='.$joinFields['BOT_ID'].'][/USER]'), $joinFields['ACCESS_HISTORY']? Loc::getMessage('BOT_SUPERVISOR_NOTICE_ALL_MESSAGES'): Loc::getMessage('BOT_SUPERVISOR_NOTICE_NEW_MESSAGES')),
'SYSTEM' => 'Y',
'SKIP_COMMAND' => 'Y',
'PARAMS' => Array(
"CLASS" => "bx-messenger-content-item-system"
),
));
}
if ($bot["METHOD_WELCOME_MESSAGE"] && class_exists($bot["CLASS"]) && method_exists($bot["CLASS"], $bot["METHOD_WELCOME_MESSAGE"]))
{
call_user_func_array(array($bot["CLASS"], $bot["METHOD_WELCOME_MESSAGE"]), Array($dialogId, $joinFields));
}
else if (
$bot["TEXT_PRIVATE_WELCOME_MESSAGE"] <> ''
&& $joinFields['CHAT_TYPE'] == IM_MESSAGE_PRIVATE
&& $joinFields['FROM_USER_ID'] != $joinFields['BOT_ID']
)
{
if ($bot['TYPE'] == self::TYPE_HUMAN)
{
self::startWriting(Array('BOT_ID' => $joinFields['BOT_ID']), $dialogId);
}
$userName = BitrixImUser::getInstance($joinFields['USER_ID'])->getName();
self::addMessage(Array('BOT_ID' => $joinFields['BOT_ID']), Array(
'DIALOG_ID' => $dialogId,
'MESSAGE' => str_replace(Array('#USER_NAME#'), Array($userName), $bot["TEXT_PRIVATE_WELCOME_MESSAGE"]),
));
}
else if (
$bot["TEXT_CHAT_WELCOME_MESSAGE"] <> ''
&& (
$joinFields['CHAT_TYPE'] == IM_MESSAGE_CHAT
|| $joinFields['CHAT_TYPE'] == IM_MESSAGE_OPEN_LINE
)
&& $joinFields['FROM_USER_ID'] != $joinFields['BOT_ID']
)
{
if ($bot['TYPE'] == self::TYPE_HUMAN)
{
self::startWriting(Array('BOT_ID' => $joinFields['BOT_ID']), $dialogId);
}
$userName = BitrixImUser::getInstance($joinFields['USER_ID'])->getName();
self::addMessage(Array('BOT_ID' => $joinFields['BOT_ID']), Array(
'DIALOG_ID' => $dialogId,
'MESSAGE' => str_replace(Array('#USER_NAME#'), Array($userName), $bot["TEXT_CHAT_WELCOME_MESSAGE"]),
));
}
foreach(BitrixMainEventManager::getInstance()->findEventHandlers("im", "onImBotJoinChat") as $event)
{
ExecuteModuleEventEx($event, Array($bot, $dialogId, $joinFields));
}
return true;
}