nyanimedb/modules/bot/front/include/handlers.hpp
2025-11-27 17:33:04 +03:00

58 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <tgbot/tgbot.h>
#include <string>
#include <structs.hpp>
#include <unordered_map>
/// @brief Структура возвращаемого значения класса BotHandlers для изменения текущего сообщения
struct HandlerResult {
std::string message;
TgBot::InlineKeyboardMarkup::Ptr keyboard;
};
enum class UserState {
MAIN_MENU, // Главное меню
VIEWING_MY_TITLES, // Список моих тайтлов
AWAITING_TITLE_NAME, // Жду название тайтла для поиска
VIEWING_TITLE_PAGE, // Смотрю страничку тайтла
AWAITING_REVIEW, // Жду ревью на тайтл
VIEWING_REVIEW_LIST, // Смотрю список ревью на тайтл
VIEWING_REVIEW, // Смотрю (конкретное) ревью на тайтл
VIEWING_DESCRIPTION, // Смотрю описание тайтла
};
struct UserContext {
UserState state;
// Информация о тайтле
};
class BotHandlers {
public:
BotHandlers(TgBot::Api api) : botApi(api) {;}
/// @brief Обработка callback'ов из кнопок интерфейса
/// @param query запрос callback
void handleCallback(TgBot::CallbackQuery::Ptr query);
/// @brief Обработка сообщений боту
/// @details
/// Функция для обработки сообщений, которые юзер отправляет
/// боту. Необходима для обработки ревью и названий искомого
/// аниме. Внутри себя проверяет текущий state пользователя
/// в боте.
/// @param message обрабатываемое сообщение
void handleMessage(TgBot::Message::Ptr message);
private:
TgBot::Api botApi;
std::unordered_map<int64_t, UserContext> userContexts;
void handleNavigation(TgBot::CallbackQuery::Ptr query);
void processCallbackImpl(TgBot::CallbackQuery::Ptr query);
/// @brief Получить очередную страницу тайтлов из списка пользователя
/// @param userId Идентификатор пользователя
/// @return HandlerResult
static HandlerResult returnMyTitles(int64_t userId);
};