• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/itrmenu.php
  • Класс: BitrixImBotItrMenu
  • Вызов: ItrMenu::generateNextMessage
public function generateNextMessage(array $params): ?array
{
	if ($this->isTrackFinished())
	{
		// Nothing to do. The finish has been reached.
		return null;
	}

	if ($this->getMessageId() <= 0 && isset($params['MESSAGE_ID']))
	{
		$this->setMessageId((int)$params['MESSAGE_ID']);
	}

	$menuData = $this->getStructure();
	if (!is_array($menuData))
	{
		return null;
	}

	$currentMenuItemId = $this->getStartItemId();

	// go to next menu level
	if (
		!empty($params['COMMAND'])
		&& $params['COMMAND'] === self::COMMAND_MENU
		&& !empty($params['COMMAND_PARAMS'])
		&& is_string($params['COMMAND_PARAMS'])
		&& $this->getItem($params['COMMAND_PARAMS'])
	)
	{
		$currentMenuItemId = $params['COMMAND_PARAMS'];
	}
	// redraw menu
	elseif ($this->isTrackStarted())
	{
		$lastMenuItemId = $this->getLastTrackItemId();
		if (
			$lastMenuItemId !== null
			&& $this->getItem($lastMenuItemId) !== null
		)
		{
			$currentMenuItemId = $lastMenuItemId;
		}
		else
		{
			$lastMenuItemId = $this->getLastExistTrackItemId();
			if (
				$lastMenuItemId !== null
				&& $this->getItem($lastMenuItemId) !== null
			)
			{
				$currentMenuItemId = $lastMenuItemId;
			}
		}
	}

	$message = null;
	$menuItem = $this->getItem($currentMenuItemId);
	if ($menuItem)
	{
		//proceed to the next item
		$this->appendTrack($currentMenuItemId);

		$message = [
			'MESSAGE' => $menuItem['text'],
		];
		if (isset($menuItem['buttons']))
		{
			$message['KEYBOARD'] = $this->makeItemKeyboard($currentMenuItemId, [
				'USER_LEVEL' => $params['USER_LEVEL'],
				'SUPPORT_LEVEL' => $params['SUPPORT_LEVEL'],
			]);
		}
	}

	return $message;
}