- Модуль: 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;
}