- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/bot.php
- Класс: BitrixImBot
- Вызов: Bot::addMessage
static function addMessage(array $bot, array $messageFields)
{
$botId = $bot['BOT_ID'];
$moduleId = isset($bot['MODULE_ID'])? $bot['MODULE_ID']: '';
$appId = isset($bot['APP_ID'])? $bot['APP_ID']: '';
if (intval($botId) <= 0)
{
return false;
}
if (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot())
{
return false;
}
$bots = self::getListCache();
if (!isset($bots[$botId]))
{
return false;
}
if ($moduleId <> '' && $bots[$botId]['MODULE_ID'] != $moduleId)
{
return false;
}
if ($appId <> '' && $bots[$botId]['APP_ID'] != $appId)
{
return false;
}
$isPrivateSystem = false;
if (($messageFields['FROM_USER_ID'] ?? null) && ($messageFields['TO_USER_ID'] ?? null))
{
$messageFields['SYSTEM'] = 'Y';
$messageFields['DIALOG_ID'] = $messageFields['TO_USER_ID'];
$isPrivateSystem = true;
}
else if (empty($messageFields['DIALOG_ID']))
{
return false;
}
$messageFields['MENU'] ??= null;
$messageFields['ATTACH'] ??= null;
$messageFields['KEYBOARD'] ??= null;
$messageFields['PARAMS'] ??= [];
if (Common::isChatId($messageFields['DIALOG_ID']))
{
$chatId = BitrixImDialog::getChatId($messageFields['DIALOG_ID']);
if ($chatId <= 0)
{
return false;
}
if (CIMChat::GetGeneralChatId() == $chatId && !CIMChat::CanSendMessageToGeneralChat($botId))
{
return false;
}
else
{
$ar = Array(
"FROM_USER_ID" => $botId,
"TO_CHAT_ID" => $chatId,
"ATTACH" => $messageFields['ATTACH'],
"KEYBOARD" => $messageFields['KEYBOARD'],
"MENU" => $messageFields['MENU'],
"PARAMS" => $messageFields['PARAMS'],
);
if (isset($messageFields['MESSAGE']) && (!empty($messageFields['MESSAGE']) || $messageFields['MESSAGE'] === "0"))
{
$ar['MESSAGE'] = $messageFields['MESSAGE'];
}
if (isset($messageFields['SYSTEM']) && $messageFields['SYSTEM'] == 'Y')
{
$ar['SYSTEM'] = 'Y';
$ar['MESSAGE'] = BitrixImUser::getInstance($botId)->getFullName().":[br]".$ar['MESSAGE'];
}
if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
{
$ar['URL_PREVIEW'] = 'N';
}
if (isset($messageFields['SKIP_CONNECTOR']) && $messageFields['SKIP_CONNECTOR'] == 'Y')
{
$ar['SKIP_CONNECTOR'] = 'Y';
$ar['SILENT_CONNECTOR'] = 'Y';
}
$ar['SKIP_COMMAND'] = 'Y';
$id = CIMChat::AddMessage($ar);
}
}
else
{
if ($isPrivateSystem)
{
$fromUserId = intval($messageFields['FROM_USER_ID']);
if ($botId > 0)
{
$messageFields['MESSAGE'] = Loc::getMessage("BOT_MESSAGE_FROM", Array("#BOT_NAME#" => "[USER=".$botId."][/USER][BR]")).$messageFields['MESSAGE'];
}
}
else
{
$fromUserId = $botId;
}
$userId = intval($messageFields['DIALOG_ID']);
$ar = Array(
"FROM_USER_ID" => $fromUserId,
"TO_USER_ID" => $userId,
"ATTACH" => $messageFields['ATTACH'],
"KEYBOARD" => $messageFields['KEYBOARD'],
"MENU" => $messageFields['MENU'],
"PARAMS" => $messageFields['PARAMS'],
);
if (isset($messageFields['MESSAGE']) && (!empty($messageFields['MESSAGE']) || $messageFields['MESSAGE'] === "0"))
{
$ar['MESSAGE'] = $messageFields['MESSAGE'];
}
if (isset($messageFields['SYSTEM']) && $messageFields['SYSTEM'] == 'Y')
{
$ar['SYSTEM'] = 'Y';
}
if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] == 'N')
{
$ar['URL_PREVIEW'] = 'N';
}
if (isset($messageFields['SKIP_CONNECTOR']) && $messageFields['SKIP_CONNECTOR'] == 'Y')
{
$ar['SKIP_CONNECTOR'] = 'Y';
$ar['SILENT_CONNECTOR'] = 'Y';
}
$ar['SKIP_COMMAND'] = 'Y';
$id = CIMMessage::Add($ar);
}
return $id;
}