diff --git a/libs/googletest-1.14.0/googletest/include/gtest/gtest-matchers.h b/libs/googletest-1.14.0/googletest/include/gtest/gtest-matchers.h index eae210e..97cef1f 100644 --- a/libs/googletest-1.14.0/googletest/include/gtest/gtest-matchers.h +++ b/libs/googletest-1.14.0/googletest/include/gtest/gtest-matchers.h @@ -402,7 +402,7 @@ class MatcherBase : private MatcherDescriberInterface { template ()> struct ValuePolicy { static const M& Get(const MatcherBase& m) { - // When inlined along with Init, need to be explicit to avoid violating + // When inlined along with Bind_Commands, need to be explicit to avoid violating // strict aliasing rules. const M* ptr = static_cast(static_cast(&m.buffer_)); diff --git a/source/view/handlers/message_handler/message_handler.cpp b/source/view/handlers/message_handler/message_handler.cpp index 0607685..ae199f7 100644 --- a/source/view/handlers/message_handler/message_handler.cpp +++ b/source/view/handlers/message_handler/message_handler.cpp @@ -29,7 +29,7 @@ AMessage_Handler::AMessage_Handler(TgBot::Bot& tg_bot, AUser_DB_Controller& user { } // --------------------------------------------------------------------------------------------------------------------- -void AMessage_Handler::Init() +void AMessage_Handler::Bind_Commands() { TG_Bot.getEvents().onCommand(SMessage_Commands::Start.data(), [this](TgBot::Message::Ptr message) -> void { @@ -49,7 +49,7 @@ void AMessage_Handler::Init() { Auto_Register(message->from->id, message->from->username, message->from->firstName); - if (Can_Use_Command(message, 7)) + if (Can_Use_Command(message, Time_To_Wait)) { auto expression{ AProgrammer_Game_Controller::Generate_Expression() }; TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Programmer_Game_Msg(expression)); @@ -62,7 +62,7 @@ void AMessage_Handler::Init() { Auto_Register(message->from->id, message->from->username, message->from->firstName); - if (Can_Use_Command(message, 7)) + if (Can_Use_Command(message, Time_To_Wait)) { auto expression{ AMath_Problem_Game_Controller::Generate_Problem() }; TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Math_Game_Msg(expression)); @@ -71,44 +71,9 @@ void AMessage_Handler::Init() Task_DB_Controller.Set_Answer(message->from->id, expression.Result); } }); - // TODO: ..................................................................................................................... TG_Bot.getEvents().onCommand(SMessage_Commands::Answer.data(), [this](TgBot::Message::Ptr message) -> void { - if (auto current_user_state{ State_DB_Controller.Get_State(message->from->id) }; current_user_state != AState_DB_Controller::EState_Type::Default) - { - std::int64_t score{}; - auto current_score{ Stats_DB_Controller.Get_Score(message->from->id) }; - - switch (current_user_state) - { - case AState_DB_Controller::EState_Type::Programmer_Game: - { - score = AProgrammer_Game_Controller::Score; - break; - } - case AState_DB_Controller::EState_Type::Math_Game: - { - score = AMath_Problem_Game_Controller::Score; - break; - } - } - - auto answer{ Task_DB_Controller.Get_Answer(message->from->id) }; - std::string_view user_answer{ message->text.begin() + 8, message->text.end() }; - - if (answer != user_answer) - { - Stats_DB_Controller.Set_Score(message->from->id, (current_score - score)); - TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Incorrect_Answer_Msg(score, answer)); - } - else - { - Stats_DB_Controller.Set_Score(message->from->id, (current_score + score)); - TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Correct_Answer_Msg(score)); - } - - State_DB_Controller.Set_State(message->from->id, AState_DB_Controller::EState_Type::Default); - } + Handle_Answer(message); }); } @@ -136,4 +101,51 @@ bool AMessage_Handler::Can_Use_Command(const TgBot::Message::Ptr& message, std:: Task_DB_Controller.Set_Time_Stamp(message->from->id, current_time); return true; +} + +// --------------------------------------------------------------------------------------------------------------------- +void AMessage_Handler::Handle_Answer(TgBot::Message::Ptr& message) +{ + if (auto current_user_state{ State_DB_Controller.Get_State(message->from->id) }; current_user_state != AState_DB_Controller::EState_Type::Default) + { + std::int64_t score{}; + auto current_score{ Stats_DB_Controller.Get_Score(message->from->id) }; + + switch (current_user_state) + { + case AState_DB_Controller::EState_Type::Programmer_Game: + { + score = AProgrammer_Game_Controller::Score; + break; + } + case AState_DB_Controller::EState_Type::Math_Game: + { + score = AMath_Problem_Game_Controller::Score; + break; + } + } + + auto answer{ Task_DB_Controller.Get_Answer(message->from->id) }; + Parse_User_Answer(message->text); + + if (answer != message->text) + { + Stats_DB_Controller.Set_Score(message->from->id, (current_score - score)); + TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Incorrect_Answer_Msg(score, answer)); + } + else + { + Stats_DB_Controller.Set_Score(message->from->id, (current_score + score)); + TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Correct_Answer_Msg(score)); + } + + State_DB_Controller.Set_State(message->from->id, AState_DB_Controller::EState_Type::Default); + } +} + +// --------------------------------------------------------------------------------------------------------------------- +void AMessage_Handler::Parse_User_Answer(std::string& answer) +{ + answer.erase(answer.begin(), answer.begin() + static_cast(SMessage_Commands::Answer.size() + 1)); // erase /answer part, + 1 for '/' + answer.erase(std::remove(answer.begin(), answer.end(), ' '), answer.end()); } \ No newline at end of file diff --git a/source/view/handlers/message_handler/message_handler.hpp b/source/view/handlers/message_handler/message_handler.hpp index 144e4e5..9c53fba 100644 --- a/source/view/handlers/message_handler/message_handler.hpp +++ b/source/view/handlers/message_handler/message_handler.hpp @@ -45,11 +45,16 @@ class AMessage_Handler explicit AMessage_Handler(TgBot::Bot& tg_bot, AUser_DB_Controller& user_db_controller, AState_DB_Controller& state_db_controller, ATask_DB_Controller& task_db_controller, AStats_DB_Controller& stats_db_controller); constexpr ~AMessage_Handler() = default; - void Init(); + void Bind_Commands(); private: void Auto_Register(std::int64_t user_id, std::string_view username, std::string_view first_name); bool Can_Use_Command(const TgBot::Message::Ptr& message, std::int64_t required_difference); // TODO: ................. + void Handle_Answer(TgBot::Message::Ptr& message); + void Parse_User_Answer(std::string& answer); + +private: + constexpr static std::size_t Time_To_Wait{ 3 }; private: TgBot::Bot& TG_Bot; diff --git a/source/view/main.cpp b/source/view/main.cpp index cb1029f..7f868eb 100644 --- a/source/view/main.cpp +++ b/source/view/main.cpp @@ -56,7 +56,7 @@ int main() AStats_DB_Controller stats_db_controller{ *db_cfg }; AMessage_Handler message_handler{ tg_bot, user_db_controller, state_db_controller, task_db_controller, stats_db_controller }; - message_handler.Init(); // TODO ....... + message_handler.Bind_Commands(); try {