This repository has been archived on 2020-09-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
libs/telegram_bot/telegrambotapi.h

120 lines
2.7 KiB
C++

#ifndef TELEGRAMBOTAPI_H
#define TELEGRAMBOTAPI_H
#include <QThread>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QDateTime>
#include <QMutex>
#include <QQueue>
#include <QImage>
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<SendQuery> sendmsg_que;
QList<DownloadFile> download_list;
private slots:
void sslErrors(QNetworkReply*, const QList<QSslError> &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