• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/bot.php
  • Класс: BitrixImBot
  • Вызов: Bot::getBotsForMessage
static function getBotsForMessage($messageFields): array
{
	$bots = self::getListCache();
	if (empty($bots))
	{
		return [];
	}

	if (isset($messageFields['FROM_USER_ID'], $bots[$messageFields['FROM_USER_ID']]))
	{
		return [];
	}
	if (
		$messageFields['MESSAGE_TYPE'] === IM_MESSAGE_CHAT
		&& $messageFields['CHAT_ENTITY_TYPE'] === 'SUPPORT24_QUESTION' /** @see BitrixImBotBotSupport24::CHAT_ENTITY_TYPE */
		&& isset($bots[$messageFields['AUTHOR_ID']])
	)
	{
		return [];
	}

	$botExecModule = [];
	if ($messageFields['MESSAGE_TYPE'] === IM_MESSAGE_PRIVATE)
	{
		if (isset($bots[$messageFields['TO_USER_ID']]))
		{
			$botExecModule[$messageFields['TO_USER_ID']] = $bots[$messageFields['TO_USER_ID']];
		}
	}
	else
	{
		$botFound = [];
		$message = $messageFields['MESSAGE'] ?? null;
		if (
			$messageFields['CHAT_ENTITY_TYPE'] === 'LINES'
			|| $messageFields['CHAT_ENTITY_TYPE'] === 'SUPPORT24_QUESTION' /** @see BitrixImBotBotSupport24::CHAT_ENTITY_TYPE */
		)
		{
			$botFound = $messageFields['BOT_IN_CHAT'];
		}
		else if (preg_match_all("/[USER=([0-9]+)( REPLACE)?](.*?)[/USER]/i", $message, $matches))
		{
			foreach ($matches[1] as $userId)
			{
				if (isset($bots[$userId]) && isset($messageFields['BOT_IN_CHAT'][$userId]))
				{
					$botFound[$userId] = $userId;
				}
			}
		}

		foreach ($messageFields['BOT_IN_CHAT'] as $botId)
		{
			if (isset($bots[$botId]) && $bots[$botId]['TYPE'] == self::TYPE_SUPERVISOR)
			{
				$botFound[$botId] = $botId;
			}
		}

		if (!empty($botFound))
		{
			foreach ($botFound as $botId)
			{
				if (!isset($bots[$botId]))
				{
					continue;
				}
				if ($messageFields['CHAT_ENTITY_TYPE'] == 'LINES' && $bots[$botId]['OPENLINE'] == 'N')
				{
					continue;
				}
				$botExecModule[$botId] = $bots[$botId];
			}
		}
	}

	return $botExecModule;
}