diff --git a/modules/bot/front/.gitignore b/modules/bot/front/.gitignore index c315271..567609b 100644 --- a/modules/bot/front/.gitignore +++ b/modules/bot/front/.gitignore @@ -1,4 +1 @@ build/ -out/ -.vscode -api/generated-client \ No newline at end of file diff --git a/modules/bot/front/include/constants.hpp b/modules/bot/front/include/constants.hpp index 75e691e..595a369 100644 --- a/modules/bot/front/include/constants.hpp +++ b/modules/bot/front/include/constants.hpp @@ -11,22 +11,21 @@ namespace BotConstants { } namespace Callback { const std::string ACTION = "action:"; - const std::string FIND_ANIME = ACTION + "find_anime"; - const std::string ADD_REVIEW = ACTION + "add_review"; - const std::string ADD_STATUS = ACTION + "add_status"; - const std::string STATUS = "status:"; - const std::string WATCHING = STATUS + "watching"; - const std::string SEEN = STATUS + "seen"; - const std::string WANT = STATUS + "want"; - const std::string THROWN = STATUS + "thrown"; + const std::string FIND_ANIME = ACTION + "find_anime"; + const std::string ADD_REVIEW = ACTION + "add_review"; + const std::string ADD_STATUS = ACTION + "add_status"; + const std::string STATUS = "status:"; + const std::string WATCHING = STATUS + "watching"; + const std::string SEEN = STATUS + "seen"; + const std::string WANT = STATUS + "want"; + const std::string THROWN = STATUS + "thrown"; const std::string NAVIGATION = "navigation:"; - const std::string MY_TITLES = NAVIGATION + "my_titles"; - const std::string LIST_PREV = NAVIGATION + "prev"; - const std::string LIST_NEXT = NAVIGATION + "next"; + const std::string MY_TITLES = NAVIGATION + "my_titles"; + const std::string LIST_PREV = NAVIGATION + "prev"; + const std::string LIST_NEXT = NAVIGATION + "next"; const std::string CHOICE = "choice:"; } namespace Text { const std::string MAIN_MENU = "Вас приветствует nyanimedb бот:)\nЧего будем делать?"; - const std::string SAD_ERROR = "У нас что-то случилось:(\nМы обязательно скоро исправимся"; } } diff --git a/modules/bot/front/include/front.hpp b/modules/bot/front/include/front.hpp index 4d37ec8..f2c6485 100644 --- a/modules/bot/front/include/front.hpp +++ b/modules/bot/front/include/front.hpp @@ -5,12 +5,11 @@ #include #include -#include "handlers.hpp" class AnimeBot { private: + std::string token; TgBot::Bot bot; - BotHandlers handler; public: /// Init Bot diff --git a/modules/bot/front/include/handlers.hpp b/modules/bot/front/include/handlers.hpp index 7440d00..27aee3a 100644 --- a/modules/bot/front/include/handlers.hpp +++ b/modules/bot/front/include/handlers.hpp @@ -1,4 +1,3 @@ -#pragma once #include #include #include @@ -10,28 +9,13 @@ struct HandlerResult { }; 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); +public: + void handleCallback(const TgBot::CallbackQuery::Ptr query); private: TgBot::Api botApi; - void handleNavigation(TgBot::CallbackQuery::Ptr query); - - void processCallbackImpl(TgBot::CallbackQuery::Ptr query); + void handleNavigation(const TgBot::CallbackQuery::Ptr query); /// @brief Получить очередную страницу тайтлов из списка пользователя /// @param userId Идентификатор пользователя diff --git a/modules/bot/front/src/KeyboardFactory.cpp b/modules/bot/front/src/KeyboardFactory.cpp index fc1a3fd..bc1bdd0 100644 --- a/modules/bot/front/src/KeyboardFactory.cpp +++ b/modules/bot/front/src/KeyboardFactory.cpp @@ -39,16 +39,16 @@ TgBot::InlineKeyboardMarkup::Ptr KeyboardFactory::createMyTitles(std::vector(); button->text = BotConstants::Button::PREV; - button->callbackData = BotConstants::Callback::LIST_PREV + ':' + std::to_string(titles[0].num); + button->callbackData = BotConstants::Callback::LIST_PREV + std::to_string(titles[0].num); layout[counter / 2].push_back(button); } else { auto button_prev = std::make_shared(); button_prev->text = BotConstants::Button::PREV; - button_prev->callbackData = BotConstants::Callback::LIST_PREV + ':' + std::to_string(titles[0].num); + button_prev->callbackData = BotConstants::Callback::LIST_PREV + std::to_string(titles[0].num); auto button_next = std::make_shared(); button_next->text = BotConstants::Button::NEXT; - button_next->callbackData = BotConstants::Callback::LIST_NEXT + ':' + std::to_string(titles[5].num); + button_next->callbackData = BotConstants::Callback::LIST_NEXT + std::to_string(titles[5].num); layout.push_back({button_prev, button_next}); } diff --git a/modules/bot/front/src/front.cpp b/modules/bot/front/src/front.cpp index 9ee010c..e6d3034 100644 --- a/modules/bot/front/src/front.cpp +++ b/modules/bot/front/src/front.cpp @@ -3,9 +3,7 @@ #include "constants.hpp" #include "handlers.hpp" -AnimeBot::AnimeBot(const std::string& token) - : bot(token) - , handler(bot.getApi()) { +AnimeBot::AnimeBot(const std::string& token) : bot(token) { setupHandlers(); } @@ -13,13 +11,20 @@ void AnimeBot::setupHandlers() { bot.getEvents().onCommand("start", [this](TgBot::Message::Ptr message) { sendMainMenu(message->chat->id); }); - - bot.getEvents().onCallbackQuery([this](TgBot::CallbackQuery::Ptr query) { - handler.handleCallback(query); - }); - bot.getEvents().onAnyMessage([this](TgBot::Message::Ptr message) { - handler.handleMessage(message); + auto [text, kb] = BotHandlers::returnMyTitles(321); + + auto cp_api = bot.getApi(); + bot.getEvents().onCallbackQuery([text, kb, cp_api](TgBot::CallbackQuery::Ptr query) { + cp_api.editMessageText( + text, + query->message->chat->id, + query->message->messageId, + "", + "", + nullptr, + kb + ); }); } @@ -30,4 +35,10 @@ void AnimeBot::sendMainMenu(int64_t chatId) { TgBot::Bot& AnimeBot::getBot() { return bot; -} \ No newline at end of file +} + +/* +void AnimeBot::showMyTitles() { + +} +*/ diff --git a/modules/bot/front/src/handlers.cpp b/modules/bot/front/src/handlers.cpp index 4ae1040..cbd90da 100644 --- a/modules/bot/front/src/handlers.cpp +++ b/modules/bot/front/src/handlers.cpp @@ -3,23 +3,15 @@ #include "structs.hpp" #include "constants.hpp" -void BotHandlers::handleCallback(TgBot::CallbackQuery::Ptr query) { - if (!query) { - // TODO: log - return; - } +void BotHandlers::handleCallback(const TgBot::CallbackQuery::Ptr query) { + std::string data = query -> data; - try { - // TODO: Тут mutex на многопоточке - botApi.answerCallbackQuery(query->id); - } catch (const std::exception& e) { - std::cerr << "answerCallbackQuery error"; - //TODO: обработка ошибки + if (data.starts_with(BotConstants::Callback::NAVIGATION)) { + handleNavigation(query); } - - processCallbackImpl(query); } +/// В угоду потокобезопасности создаем новый экземпляр TgBot::Api HandlerResult BotHandlers::returnMyTitles(int64_t userId) { // Здесь должен происходить запрос на сервер std::vector titles = {{123, "Школа мертвяков", "", 1}, {321, "KissXsis", "", 2}}; @@ -31,37 +23,6 @@ HandlerResult BotHandlers::returnMyTitles(int64_t userId) { return result; } -void BotHandlers::handleNavigation(TgBot::CallbackQuery::Ptr query) { - const std::string& data = query->data; - if (data == BotConstants::Callback::MY_TITLES) { - auto [text, kb] = BotHandlers::returnMyTitles(321); - botApi.editMessageText( - text, - query->message->chat->id, - query->message->messageId, - "", - "", - nullptr, - kb - ); - } - else { - botApi.sendMessage(query->message->chat->id, BotConstants::Text::SAD_ERROR, nullptr, nullptr); - } -} - -void BotHandlers::handleMessage(TgBot::Message::Ptr message) { - //TODO: просмотр состояния пользователя +void BotHandlers::handleNavigation(const TgBot::CallbackQuery::Ptr query) { return; } - -void BotHandlers::processCallbackImpl(TgBot::CallbackQuery::Ptr query) { - const std::string& data = query->data; - - if (data.starts_with(BotConstants::Callback::NAVIGATION)) { - handleNavigation(query); - } - else { - botApi.sendMessage(query->message->chat->id, BotConstants::Text::SAD_ERROR, nullptr, nullptr); - } -}