aboutsummaryrefslogtreecommitdiffstats
path: root/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp97
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;
+
+}
+
+