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