• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/network.php
  • Класс: BitrixImBotBotNetwork
  • Вызов: Network::switchButtonsAvailability
static function switchButtonsAvailability(bool $availability, int $messageId, bool $sendPullNotify = true)
{
	if (!MainLoader::includeModule('im'))
	{
		return false;
	}
	if ($messageId <= 0)
	{
		return false;
	}

	$messageRes = ImModelMessageTable::getList([
		'select' => ['ID'],
		'filter' => [
			'=ID' => $messageId,
			'=AUTHOR_ID' => static::getBotId(),
		],
	]);
	if (!($message = $messageRes->fetch()))
	{
		return false;
	}

	$messageParamRes = ImModelMessageParamTable::getList([
		'select' => [
			'PARAM_NAME',
			'PARAM_VALUE',
			'PARAM_JSON',
		],
		'filter' => [
			'=MESSAGE_ID' => $messageId,
			'=PARAM_NAME' => self::MESSAGE_PARAM_KEYBOARD,
		]
	]);
	$messageParamData = [];
	while ($row = $messageParamRes->fetch())
	{
		$messageParamData[$row['PARAM_NAME']] = $row;
	}
	if (empty($messageParamData) || !isset($messageParamData[self::MESSAGE_PARAM_KEYBOARD]))
	{
		return false;
	}

	try
	{
		$buttons = MainWebJson::decode($messageParamData[self::MESSAGE_PARAM_KEYBOARD]['PARAM_JSON']);
	}
	catch (MainArgumentException $e)
	{
	}
	if (empty($buttons) || !is_array($buttons))
	{
		return false;
	}

	$keyboard = new Keyboard(static::getBotId());

	foreach ($buttons as $buttonData)
	{
		if ($availability)
		{
			$buttonData['BG_COLOR'] = static::BUTTON_DEFAULT_COLOR;
			$buttonData['DISABLED'] = 'N';
		}
		else
		{
			$buttonData['BG_COLOR'] = static::BUTTON_DISABLED_COLOR;
			$buttonData['DISABLED'] = 'Y';
		}
		$keyboard->addButton($buttonData);
	}

	CIMMessageParam::set($messageId, [self::MESSAGE_PARAM_KEYBOARD => $keyboard]);
	if ($sendPullNotify)
	{
		CIMMessageParam::sendPull($messageId, [self::MESSAGE_PARAM_KEYBOARD]);
	}

	return true;
}