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

	if (intval($botId) <= 0)
	{
		return false;
	}

	if (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot())
	{
		return false;
	}

	$bots = self::getListCache();
	if (!isset($bots[$botId]))
	{
		return false;
	}

	if ($moduleId <> '' && $bots[$botId]['MODULE_ID'] != $moduleId)
	{
		return false;
	}

	if ($appId <> '' && $bots[$botId]['APP_ID'] != $appId)
	{
		return false;
	}

	$isPrivateSystem = false;
	if (($messageFields['FROM_USER_ID'] ?? null) && ($messageFields['TO_USER_ID'] ?? null))
	{
		$messageFields['SYSTEM'] = 'Y';
		$messageFields['DIALOG_ID'] = $messageFields['TO_USER_ID'];
		$isPrivateSystem = true;
	}
	else if (empty($messageFields['DIALOG_ID']))
	{
		return false;
	}

	$messageFields['MENU'] ??= null;
	$messageFields['ATTACH'] ??= null;
	$messageFields['KEYBOARD'] ??= null;
	$messageFields['PARAMS'] ??= [];

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

		if (CIMChat::GetGeneralChatId() == $chatId && !CIMChat::CanSendMessageToGeneralChat($botId))
		{
			return false;
		}
		else
		{
			$ar = Array(
				"FROM_USER_ID" => $botId,
				"TO_CHAT_ID" => $chatId,
				"ATTACH" => $messageFields['ATTACH'],
				"KEYBOARD" => $messageFields['KEYBOARD'],
				"MENU" => $messageFields['MENU'],
				"PARAMS" => $messageFields['PARAMS'],
			);
			if (isset($messageFields['MESSAGE']) && (!empty($messageFields['MESSAGE']) || $messageFields['MESSAGE'] === "0"))
			{
				$ar['MESSAGE'] = $messageFields['MESSAGE'];
			}
			if (isset($messageFields['SYSTEM']) && $messageFields['SYSTEM'] == 'Y')
			{
				$ar['SYSTEM'] = 'Y';
				$ar['MESSAGE'] = BitrixImUser::getInstance($botId)->getFullName().":[br]".$ar['MESSAGE'];
			}
			if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
			{
				$ar['URL_PREVIEW'] = 'N';
			}
			if (isset($messageFields['SKIP_CONNECTOR']) && $messageFields['SKIP_CONNECTOR'] == 'Y')
			{
				$ar['SKIP_CONNECTOR'] = 'Y';
				$ar['SILENT_CONNECTOR'] = 'Y';
			}
			$ar['SKIP_COMMAND'] = 'Y';
			$id = CIMChat::AddMessage($ar);
		}
	}
	else
	{
		if ($isPrivateSystem)
		{
			$fromUserId = intval($messageFields['FROM_USER_ID']);
			if ($botId > 0)
			{
				$messageFields['MESSAGE'] = Loc::getMessage("BOT_MESSAGE_FROM", Array("#BOT_NAME#" => "[USER=".$botId."][/USER][BR]")).$messageFields['MESSAGE'];
			}
		}
		else
		{
			$fromUserId = $botId;
		}

		$userId = intval($messageFields['DIALOG_ID']);
		$ar = Array(
			"FROM_USER_ID" => $fromUserId,
			"TO_USER_ID" => $userId,
			"ATTACH" => $messageFields['ATTACH'],
			"KEYBOARD" => $messageFields['KEYBOARD'],
			"MENU" => $messageFields['MENU'],
			"PARAMS" => $messageFields['PARAMS'],
		);
		if (isset($messageFields['MESSAGE']) && (!empty($messageFields['MESSAGE']) || $messageFields['MESSAGE'] === "0"))
		{
			$ar['MESSAGE'] = $messageFields['MESSAGE'];
		}
		if (isset($messageFields['SYSTEM']) && $messageFields['SYSTEM'] == 'Y')
		{
			$ar['SYSTEM'] = 'Y';
		}
		if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
		{
			$ar['URL_PREVIEW'] = 'N';
		}
		if (isset($messageFields['SKIP_CONNECTOR']) && $messageFields['SKIP_CONNECTOR'] == 'Y')
		{
			$ar['SKIP_CONNECTOR'] = 'Y';
			$ar['SILENT_CONNECTOR'] = 'Y';
		}
		$ar['SKIP_COMMAND'] = 'Y';
		$id = CIMMessage::Add($ar);
	}

	return $id;
}