• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_messenger.php
  • Класс: CIMMessenger
  • Вызов: CIMMessenger::ExecCommand
static function ExecCommand($id, $botId, $command, $commandParams = '', $userId = null, $byEvent = false)
{
	global $USER;
	$userId = is_null($userId)? $USER->GetId(): intval($userId);
	if ($userId <= 0)
		return false;

	$messageId = intval($id);

	$orm = BitrixImModelMessageTable::getById($messageId);
	$message = $orm->fetch();

	if(!$message)
	{
		return false;
	}

	$orm = BitrixImModelChatTable::getById($message['CHAT_ID']);
	$chat = $orm->fetch();
	if (!$chat)
	{
		return false;
	}

	$relations = CIMChat::GetRelationById($message['CHAT_ID'], false, true, false);
	if (!isset($relations[$userId]))
	{
		return false;
	}

	$entityType = $chat['ENTITY_TYPE'];
	$entityId = $chat['ENTITY_ID'];

	if ($chat['TYPE'] != IM_MESSAGE_PRIVATE)
	{
		$chatId = $message['CHAT_ID'];
		$messageType = $chat['TYPE'];

		if ($chat['ENTITY_TYPE'] === 'LIVECHAT') // TODO finalize it
		{
			[$lineId, $userId] = explode("|", $chat['ENTITY_ID']);

			$entityType = 'LINES';
			$entityId = 'livechat|'.$lineId.'|'.$message['CHAT_ID'].'|'.$userId;

			$chatLines = BitrixImModelChatTable::getList(Array(
				'select' => ['ID'],
				'filter' => [
					'=ENTITY_TYPE' => $entityType,
					'=ENTITY_ID' => $entityId,
				]
			))->fetch();
			if (!$chatLines)
			{
				return false;
			}

			$chatId = $chatLines['ID'];
			$messageType = $chatLines['TYPE'];
		}

		$messageFields = Array(
			"FROM_USER_ID" => $userId,
			"TO_CHAT_ID" => $chatId,
			"MESSAGE"  => '/'.$command.' '.$commandParams,
		);
	}
	else
	{
		$messageFields = Array(
			"FROM_USER_ID" => $userId,
			"TO_USER_ID" => intval($botId),
			"MESSAGE"  => '/'.$_POST['COMMAND'].' '.$_POST['COMMAND_PARAMS'],
		);

		$messageType = $relations[$userId]['MESSAGE_TYPE'];
	}

	$messageFields['MESSAGE_TYPE'] = $messageType;
	$messageFields['CHAT_ENTITY_TYPE'] = $entityType;
	$messageFields['CHAT_ENTITY_ID'] = $entityId;
	$messageFields['AUTHOR_ID'] = $userId;
	$messageFields['COMMAND_CONTEXT'] = 'KEYBOARD';

	BitrixImCommand::onCommandAdd($messageId, $messageFields);

	return true;
}