#include #include #include #include #include #include "TAPIInlineQuery.h" #include "TAPIMarkup.h" #include "TAPIManager.h" #include "Log.h" #include "bot.h" #include "config.h" namespace tapi = TelegramAPI; class CommandStart : public TelegramAPI::Command { public: CommandStart(Bot& bot) : TelegramAPI::Command("/start", "Start the Bot"), bot(bot) {} virtual bool process(TelegramAPI::Manager* m, const TelegramAPI::Message& msg) { return bot.handleStart(m, msg); } private: Bot& bot; }; static bool run = true; void sig_handler(int sig_num) { Log::info << "signalHandler triggered"; run = false; (void) sig_num; } static bool loadConfig(Conf& out) { std::ifstream conf("tictactoebot.conf"); if(!conf) { Log::error << "Could not open config file! tictactoebot.conf"; return false; } while(conf && !conf.eof()) { std::string key, value; std::getline(conf, key, '='); std::getline(conf, value); if(key == "token") { out.token = value; } else if(key == "apiurl") { out.apiurl = value; } else { Log::info << "unused config value: \"" << key << "\": \"" << value << '"'; } } conf.close(); return true; } int main(int argv, char** argc) { Log::init(); Log::setConsoleLogLevel(Log::Level::TRACE); Log::setColoredOutput(true); Conf conf; if(!loadConfig(conf)) return 1; TelegramAPI::Manager tmgr(conf.token); Bot bot(&tmgr, conf); Log::info << "Starting."; tmgr.registerCommand(std::make_unique(bot)); namespace pl = std::placeholders; tmgr.setMessageHandler(std::bind(&Bot::handleMessage, &bot, pl::_1, pl::_2)); tmgr.setCallbackQueryHandler(std::bind(&Bot::handleCallback, &bot, pl::_1, pl::_2)); tmgr.setMyCommands(); signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); while (run) { tmgr.getUpdates(); } bot.stop(); Log::stop(); return 0; }