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