• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/network.php
  • Класс: BitrixImBotBotNetwork
  • Вызов: Network::checkSessionVoteMessage
static function checkSessionVoteMessage(array $messageFields): bool
{
	$botId = static::getBotId() ?: (int)$messageFields['BOT_ID'];
	if (
		$botId > 0
		&& isset($messageFields['MESSAGE'], $messageFields['COMMAND_CONTEXT'])
		&& $messageFields['COMMAND_CONTEXT'] === 'TEXTAREA'
		&& ($messageFields['MESSAGE'] === '1' || $messageFields['MESSAGE'] === '0')
	)
	{

		$voteMessage = null;

		$fromUserId = (int)$messageFields['FROM_USER_ID'];
		if (ImCommon::isChatId($messageFields['DIALOG_ID']))
		{
			if (!static::checkMessageRestriction($messageFields))
			{
				return false;
			}
			$dialogId = (string)$messageFields['DIALOG_ID'];
			$lastMessages = (new CIMChat)->getLastMessage((int)$messageFields['CHAT_ID'], $botId);
		}
		else
		{
			$dialogId = (string)$messageFields['FROM_USER_ID'];
			$lastMessages = (new CIMMessage)->getLastMessage($fromUserId, $botId, false, false);
		}

		$i = 0;
		foreach ($lastMessages['message'] as $message)
		{
			if (
				isset($message['params'])
				&& isset($message['params'][self::MESSAGE_PARAM_IMOL_VOTE])
				&& isset($message['params'][self::MESSAGE_PARAM_IMOL_VOTE_LIKE])
				&& isset($message['params'][self::MESSAGE_PARAM_IMOL_VOTE_DISLIKE])
				&& (int)$message['params'][self::MESSAGE_PARAM_IMOL_VOTE] > 0 //SESSION_ID
			)
			{
				$voteMessage = $message;
				break;
			}
			// check only 7 last messages
			if (++$i > 10)
			{
				break;
			}
		}
		if ($voteMessage)
		{
			$isActionLike = $messageFields['MESSAGE'] === '1';
			$sessionId = (int)$voteMessage['params'][self::MESSAGE_PARAM_IMOL_VOTE];

			CIMMessageParam::set($voteMessage['id'], [self::MESSAGE_PARAM_IMOL_VOTE => ($isActionLike ? 'like' : 'dislike')]);
			CIMMessageParam::sendPull($voteMessage['id'], [self::MESSAGE_PARAM_IMOL_VOTE]);

			self::sendMessage([
				'DIALOG_ID' => $dialogId,
				'MESSAGE' => $isActionLike
					? $voteMessage['params'][self::MESSAGE_PARAM_IMOL_VOTE_LIKE]
					: $voteMessage['params'][self::MESSAGE_PARAM_IMOL_VOTE_DISLIKE],
				'SYSTEM' => 'N',
				'URL_PREVIEW' => 'N',
			]);

			$voteParams = [
				'BOT_ID' => $botId,
				'DIALOG_ID' => $dialogId,
				'USER_ID' => $fromUserId,
				'ACTION' => ($isActionLike ? 'like' : 'dislike'),
				'SESSION_ID' => $sessionId,
				'MESSAGE' => [
					'MESSAGE' => $voteMessage['text'],
					'PARAMS' => $voteMessage['params'],//CONNECTOR_MID
				]
			];

			static::onSessionVote($voteParams);

			return true;
		}
	}

	return false;
}