#ifndef API_BOT_HPP_ #define API_BOT_HPP_ #include <utils/types.hpp> #include <string> #include <iostream> #include <tuple> using std::string; using std::cout; using std::endl; template<typename...Args> class Bot { private: void initializeNets(const json& data) { initializeNetsImpl(data, std::index_sequence_for<Args...>{}); } template<unsigned long... Is> void initializeNetsImpl(const json& data, std::index_sequence<Is...>) { net = std::make_tuple(std::make_unique<Args>(data)...); } json data; public: std::tuple<std::unique_ptr<Args>...> net; Bot(const json& data) : data(data) { initializeNets(data); } }; class BotHandler : Bot<> { private: json data; public: BotHandler(const json& data) : data(data), Bot(data) {}; string id() { return data["d"]["id"]; } bool isBot() { try { return data["d"]["bot"]; } catch (...) { return false; } } }; #endif