• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/command.php
  • Класс: BitrixImCommand
  • Вызов: Command::findCommands
static function findCommands($fields)
{
	$command = mb_substr($fields['COMMAND'], 0, 1) == '/'? mb_substr($fields['COMMAND'], 1) : $fields['COMMAND'];
	$execParams = isset($fields['EXEC_PARAMS'])? $fields['EXEC_PARAMS']: '';
	$messageFields = isset($fields['MESSAGE_FIELDS'])? $fields['MESSAGE_FIELDS']: Array();

	if ($messageFields['MESSAGE_TYPE'] != IM_MESSAGE_PRIVATE)
	{
		$relations = CIMChat::GetRelationById($messageFields['TO_CHAT_ID'], false, true, false);
	}

	$result = Array();
	if ($command == '')
		return $result;

	$isExtranet = BitrixImUser::getInstance($messageFields['FROM_USER_ID'])->isExtranet();

	$commands = self::getListCache();
	$bots = Bot::getListCache();
	foreach ($commands as $value)
	{
		$chatEntityType = $messageFields['CHAT_ENTITY_TYPE'] ?? null;
		if (
			$chatEntityType === 'LIVECHAT'
			|| ($chatEntityType === 'LINES' && $bots[$value['BOT_ID']]['OPENLINE'] != 'Y')
		)
		{
			continue;
		}
		if ($value['COMMAND'] == $command)
		{
			if ($value['EXTRANET_SUPPORT'] == 'N' && $isExtranet)
			{
				continue;
			}
			if ($value['COMMON'] == 'N')
			{
				if ($messageFields['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE)
				{
					if ($messageFields['TO_USER_ID'] != $value['BOT_ID'])
					{
						continue;
					}
				}
				else
				{
					if (!isset($relations[$value['BOT_ID']]))
					{
						continue;
					}
				}
			}

			$result[$value['COMMAND_ID']] = $value;
			$result[$value['COMMAND_ID']]['CONTEXT'] = $messageFields['COMMAND_CONTEXT'];
			$result[$value['COMMAND_ID']]['EXEC_PARAMS'] = $execParams;
		}
	}

	return $result;
}