#ifndef TELEGRAMBOTAPI_H #define TELEGRAMBOTAPI_H #include #include #include #include #include #include #include #include #include class TelegramBotAPI : public QObject { Q_OBJECT Q_PROPERTY(uint botID READ botID) Q_PROPERTY(QString botName READ botName) Q_PROPERTY(QString botToken READ botToken WRITE setBotToken) public: explicit TelegramBotAPI(QObject *parent = 0); ~TelegramBotAPI(); enum MessageType { Text, Photo, Document, }; struct Message { Message() { chat_id = id = user_id = 0; } uint id; uint chat_id; uint user_id; QString user_name; QString text; QDateTime time; }; struct File { uint chat_id; QString filename; QByteArray data; }; uint botID() const {return m_botID;} QString botToken() const {return m_botToken;} QString botName() const {return m_botName;} bool isConnected() const {return is_connected;} public slots: void setBotToken(QString arg); bool sendMessage(uint chat_id, QString msg) {return sendMessage(chat_id, TelegramBotAPI::Text, msg.toUtf8());} bool sendMessage(uint chat_id, MessageType mtype, QByteArray data, QString filename = QString()); private: struct SendQuery { QString method; QVariantMap params; }; struct DownloadFile { bool downloaded; int chat_id; QString id; QString filename; QUrl url; QByteArray data; }; static const char * send_methods[]; static const char * param_filename; // void run(); void sendRequest(QString method, QVariantMap params); void checkBot(); void updateBot(); bool fileDownload(); bool parseHeader(QString json, QVariant &res); void parseCheckBot(QString json); void parseMessages(QString json); void parseFile(QString json); Message parseMessage(QVariant msg); void startDownloadFile(uint chat_id, QVariantMap file); QNetworkAccessManager * qnam; QNetworkReply *reply; // QMutex mutex; uint m_botID; QString m_botToken; QString botUrl; QString botUrlFile; QString m_botName; bool is_connected; int last_update; bool wait_server; bool has_stop; QQueue sendmsg_que; QList download_list; private slots: void sslErrors(QNetworkReply*, const QList &errors); void httpFinished(); // void httpFinished(QNetworkReply*); signals: void botOK(); void botFail(); void errorOccured(QString error); void newMessage(TelegramBotAPI::Message msg); void newMessage(uint chat_id, QString msg); void newFile(TelegramBotAPI::File file); }; Q_DECLARE_METATYPE(TelegramBotAPI::Message) #endif // TELEGRAMBOTAPI_H