• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/app.php
  • Класс: BitrixImApp
  • Вызов: App::addMessage
static function addMessage(array $app, array $messageFields)
{
	$appId = intval($app['ID']);
	$moduleId = isset($app['MODULE_ID'])? $app['MODULE_ID']: '';
	$restAppId = isset($app['APP_ID'])? $app['APP_ID']: '';

	if ($appId <= 0)
		return false;

	$apps = self::getListCache();
	if (!isset($apps[$appId]))
		return false;

	if ($moduleId <> '' && $apps[$appId]['MODULE_ID'] != $moduleId)
		return false;

	if ($restAppId <> '' && $apps[$appId]['APP_ID'] != $restAppId)
		return false;

	$botId = intval($apps[$appId]['BOT_ID']);

	if (Common::isChatId($messageFields['DIALOG_ID']))
	{
		$chatId = BitrixImDialog::getChatId($messageFields['DIALOG_ID']);
		$relations = CIMChat::GetRelationById($chatId, false, true, false);
	}
	else
	{
		$userId = intval($messageFields['DIALOG_ID']);
		if (!$userId || $botId == $userId)
		{
			return false;
		}
		$relations = CIMChat::GetPrivateRelation($botId, $userId);
	}

	if ($botId && !BotToken::isActive($botId, $messageFields['DIALOG_ID']))
	{
		return false;
	}

	$messageFields['ATTACH'] = $messageFields['ATTACH']? $messageFields['ATTACH']: null;
	$messageFields['KEYBOARD'] = $messageFields['KEYBOARD']? $messageFields['KEYBOARD']: null;

	$fromUserId = isset($messageFields['FROM_USER_ID'])? $messageFields['FROM_USER_ID']: $botId;

	if (Common::isChatId($messageFields['DIALOG_ID']))
	{
		$chatId = BitrixImDialog::getChatId($messageFields['DIALOG_ID']);
		if ($chatId <= 0)
			return false;

		if (isset($relations[$fromUserId]) && $messageFields['SYSTEM'] != 'Y')
		{
			$ar = Array(
				"FROM_USER_ID" => $fromUserId,
				"TO_CHAT_ID" => $chatId,
				"ATTACH" => $messageFields['ATTACH'],
				"KEYBOARD" => $messageFields['KEYBOARD'],
			);
			if (isset($messageFields['MESSAGE']))
			{
				$ar['MESSAGE'] = $messageFields['MESSAGE'];
			}
		}
		else
		{
			$ar = Array(
				"FROM_USER_ID" => isset($relations[$fromUserId])? $fromUserId: 0,
				"TO_CHAT_ID" => $chatId,
				"ATTACH" => $messageFields['ATTACH'],
				"KEYBOARD" => $messageFields['KEYBOARD'],
				"SYSTEM" => 'Y',
			);
			if (isset($messageFields['MESSAGE']))
			{
				$ar['MESSAGE'] = $messageFields['MESSAGE'];
			}

			$ar['MESSAGE'] = "[B]".$apps[$appId]['TITLE']."[/B]n".$ar['MESSAGE'];
		}

		if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
		{
			$ar['URL_PREVIEW'] = 'N';
		}

		$ar['SKIP_USER_CHECK'] = 'Y';
		$ar['SKIP_COMMAND'] = 'Y';

		$id = CIMChat::AddMessage($ar);
	}
	else
	{
		$userId = intval($messageFields['DIALOG_ID']);
		CModule::IncludeModule('imbot');

		if (isset($relations[$fromUserId]) && $messageFields['SYSTEM'] != 'Y')
		{
			$ar = Array(
				"FROM_USER_ID" => $fromUserId,
				"TO_USER_ID" => $userId,
				"ATTACH" => $messageFields['ATTACH'],
				"KEYBOARD" => $messageFields['KEYBOARD'],
			);
			if (isset($messageFields['MESSAGE']))
			{
				$ar['MESSAGE'] = $messageFields['MESSAGE'];
			}
		}
		else
		{
			$ar = Array(
				"FROM_USER_ID" => isset($relations[$fromUserId])? $fromUserId: 0,
				"TO_USER_ID" => $userId,
				"ATTACH" => $messageFields['ATTACH'],
				"KEYBOARD" => $messageFields['KEYBOARD'],
				"SYSTEM" => "Y",
			);
			if (isset($messageFields['MESSAGE']))
			{
				$ar['MESSAGE'] = $messageFields['MESSAGE'];
			}

			$ar['MESSAGE'] = "[B]".$apps[$appId]['TITLE']."[/B]n".$ar['MESSAGE'];
		}

		if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
		{
			$ar['URL_PREVIEW'] = 'N';
		}

		$ar['SKIP_COMMAND'] = 'Y';
		$id = CIMMessage::Add($ar);
	}

	return $id;
}