diff options
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..49d7f81 --- /dev/null +++ b/main.cpp @@ -0,0 +1,97 @@ +#include <string> +#include "include/toml.hpp" +#include "include/json.hpp" +#include <boost/asio.hpp> +#include <tgbot/tgbot.h> +#include <cpr/cpr.h> + +using json = nlohmann::json; + +int main() { + auto config = toml::parse_file("../config.toml"); + + + TgBot::Bot bot(config["telegram"]["apikey"].value_or("")); + + + bot.getEvents().onAnyMessage([&bot, &config](TgBot::Message::Ptr message){ + + std::istringstream msg(message->text); + std::string command, commandtmp, arguments; + + std::getline(msg, commandtmp, ' '); + std::getline(msg, arguments); + //std::cout << "command: " << commandtmp << "\n"; + if(!(commandtmp.at(0) == '/')){ + return 0; + } else{ + command = commandtmp.substr(1, commandtmp.length()-1); + } + + json request; + request["command"] = command; + request["arguments"] = arguments; + request["session"] = std::to_string(message->from->id); + + //std::cout << request.dump() << "\n"; + + cpr::Response r = cpr::Post(cpr::Url{config["n_core"]["adress"].value_or("localhost:18080")}, + cpr::Body{request.dump()}); + if(r.status_code != 200) { + std::cerr << "Error " << r.status_code << " aborting\n"; + return 1; + } + + //std::cout << r.text << "\n"; + + + auto jreply = json::parse(r.text); + + std::string outMessage; + + if(jreply["success"] == true) { + + for (auto x : jreply["reply"].items()) { + + + if (x.value().at("annotations").at(0).at("type") == "none") { + outMessage += x.value().at("text"); + } else if (x.value().at("annotations").at(0).at("type") == "bold") { + outMessage.append("<b>").append(x.value().at("text")).append("</b>"); + } else if (x.value().at("annotations").at(0).at("type") == "link") { + outMessage.append("<u>").append(x.value().at("text")).append("</u>"); + } else if (x.value().at("annotations").at(0).at("type") == "italic") { + outMessage.append("<i>").append(x.value().at("text")).append("</i>"); + } else if (x.value().at("annotations").at(0).at("type") == "strikethrough") { + outMessage.append("<strike>").append(x.value().at("text")).append("</strike>"); + } else if (x.value().at("annotations").at(0).at("type") == "link") { + outMessage.append("<u>").append(x.value().at("text")).append("</u>"); + } else if (x.value().at("annotations").at(0).at("type") == "command") { + outMessage.append("/").append(x.value().at("text")); + } + + } + bot.getApi().sendMessage(message->chat->id, outMessage, false, 0, nullptr, "HTML"); + } else { + bot.getApi().sendMessage(message->chat->id, "Command was not successfully executed."); + } + + }); + + try { + printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str()); + TgBot::TgLongPoll longPoll(bot); + while (true) { + //printf("Long poll started\n"); + longPoll.start(); + } + } catch (TgBot::TgException& e) { + printf("error: %s\n", e.what()); + } + + + return 0; + +} + + |