feat(tgbot-front): implement the back button operation
Add functions to handle navigation callback logic Also add function for creating initial user context (pay attention to auth and registration later)
This commit is contained in:
parent
0fdf577612
commit
ccf9722bb7
5 changed files with 145 additions and 44 deletions
|
|
@ -33,5 +33,6 @@ namespace BotConstants {
|
|||
namespace Text {
|
||||
const std::string MAIN_MENU = "Вас приветствует nyanimedb бот:)\nЧего будем делать?";
|
||||
const std::string SAD_ERROR = "У нас что-то случилось:(\nМы обязательно скоро исправимся";
|
||||
const std::string AUTH_ERROR = "Проблемы с авторизацией, попробуйте авторизоваться повторно";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ struct NavigationStep {
|
|||
|
||||
|
||||
struct UserContext {
|
||||
int64_t userId;
|
||||
std::vector<NavigationStep> history; // Текущее состояние пользователя + история предыдущих состояний
|
||||
};
|
||||
|
||||
|
|
@ -50,6 +51,10 @@ public:
|
|||
/// @param message обрабатываемое сообщение
|
||||
void handleMessage(TgBot::Message::Ptr message);
|
||||
|
||||
/// @brief Создает контекст начального меню для пользователя
|
||||
/// @param chatId id чата пользователя
|
||||
void createInitContext(int64_t chatId);
|
||||
|
||||
private:
|
||||
TgBot::Api botApi;
|
||||
std::unordered_map<int64_t, UserContext> userContexts;
|
||||
|
|
@ -60,8 +65,9 @@ private:
|
|||
|
||||
/// @brief Получить очередную страницу тайтлов из списка пользователя
|
||||
/// @param userId Идентификатор пользователя
|
||||
/// @param payload Полезная нагрузка
|
||||
/// @return HandlerResult
|
||||
static HandlerResult returnMyTitles(int64_t userId);
|
||||
static HandlerResult returnMyTitles(int64_t userId, int64_t payload);
|
||||
|
||||
/// @brief Вход в новое состояние
|
||||
/// @param ctx текущий контекст
|
||||
|
|
@ -83,4 +89,33 @@ private:
|
|||
/// @param payload Изменяемое значение нагрузки
|
||||
/// @param curState Текущее состояние
|
||||
void increasePayload(int64_t& payload, const UserState curState);
|
||||
|
||||
/// @brief Редактирует текущее сообщение в диалоге с пользователем
|
||||
/// @details Меняет текст сообщения и клавиатуру на те, что передаются
|
||||
/// в аргументе response. Информацию об id чата и изменяемого сообщения
|
||||
/// забирает из query, который возвращается с callback'ом после нажатия
|
||||
/// кнопки в интерфейсе
|
||||
/// @param query Callback запрос
|
||||
/// @param response Параметры ответа: клавиатура и текст
|
||||
void editMessage(TgBot::CallbackQuery::Ptr query, HandlerResult response);
|
||||
|
||||
/// @brief Отрисовка текущего экрана (соотв. контексту)
|
||||
/// @param ctx - текущий контекст
|
||||
/// @return HandlerResult для нового состояния сообщения
|
||||
HandlerResult renderCurrent(const UserContext& ctx);
|
||||
|
||||
/// @brief Логика переходов между контекстами (навигация на следующий шаг)
|
||||
/// @param query - запрос
|
||||
/// @param current - текущий шаг навигации
|
||||
/// @return следующий NavigationStep при успехе (std::nullopt в случае ошибки)
|
||||
std::optional<NavigationStep> computeNextStep(const TgBot::CallbackQuery::Ptr& query,
|
||||
const NavigationStep& current);
|
||||
|
||||
/// @brief Получить состояние страницы главного меню
|
||||
/// @return HandlerResult с параметрами главного меню
|
||||
HandlerResult showMainMenu();
|
||||
|
||||
/// @brief Посылает интерфейс обработки ошибки на callback запрос
|
||||
/// @param query запрос
|
||||
void sendError(TgBot::CallbackQuery::Ptr query, const std::string& errText);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue