added support cb to get messages Ids

This commit is contained in:
Andrei Yankovich 2023-11-18 10:53:09 +01:00
parent d67c1b6cdd
commit 32e87db332
4 changed files with 30 additions and 22 deletions

View File

@ -81,7 +81,7 @@ bool ITelegramBot::sendSpecificMessage(const TelegramArgs& args,
auto msg = QSharedPointer<TelegramSendMsg>::create(args, extraObjects); auto msg = QSharedPointer<TelegramSendMsg>::create(args, extraObjects);
return sendMessageRequest(msg); return sendMessageRequest(msg, args.msgIdCB);
} }
bool ITelegramBot::sendSpecificMessageWithKeyboard(const TelegramArgs& args, bool ITelegramBot::sendSpecificMessageWithKeyboard(const TelegramArgs& args,
@ -120,7 +120,7 @@ bool ITelegramBot::editSpecificMessageWithKeyboard(const QVariant &messageId,
onTimeKeyboard, onTimeKeyboard,
keyboard)); keyboard));
return sendMessageRequest(msg); return sendMessageRequest(msg, args.msgIdCB);
} }
ExtraJsonObjects ExtraJsonObjects
@ -346,9 +346,9 @@ bool ITelegramBot::sendFileMessage(const TelegramArgs &args, const QFileInfo &fi
return false; return false;
} }
return sendFileWithPrivate( return sendMessageRequest(
QSharedPointer<TelegramSendPhoto>::create(args, QSharedPointer<TelegramSendPhoto>::create(args,
file)); file), args.msgIdCB);
} }
bool ITelegramBot::sendFileMessage(const TelegramArgs &args, const QByteArray &file, const QString &fileName) { bool ITelegramBot::sendFileMessage(const TelegramArgs &args, const QByteArray &file, const QString &fileName) {
@ -363,7 +363,7 @@ bool ITelegramBot::sendFileMessage(const TelegramArgs &args, const QByteArray &f
return false; return false;
} }
return sendFileWithPrivate(QSharedPointer<TelegramSendDocument>::create(args, fileName, file)); return sendMessageRequest(QSharedPointer<TelegramSendDocument>::create(args, fileName, file), args.msgIdCB);
} }
bool ITelegramBot::sendPhoto(const TelegramArgs &args, bool ITelegramBot::sendPhoto(const TelegramArgs &args,
@ -376,10 +376,10 @@ bool ITelegramBot::sendPhoto(const TelegramArgs &args,
return false; return false;
} }
return sendFileWithPrivate( return sendMessageRequest(
QSharedPointer<TelegramSendPhoto>::create(args, QSharedPointer<TelegramSendPhoto>::create(args,
photo, photo,
prepareInlineKeyBoard(keyboard))); prepareInlineKeyBoard(keyboard)), args.msgIdCB);
} }
bool ITelegramBot::sendPhoto(const TelegramArgs &args, bool ITelegramBot::sendPhoto(const TelegramArgs &args,
@ -399,11 +399,11 @@ bool ITelegramBot::sendPhoto(const TelegramArgs &args,
return false; return false;
} }
return sendFileWithPrivate( return sendMessageRequest(
QSharedPointer<TelegramSendPhoto>::create(args, QSharedPointer<TelegramSendPhoto>::create(args,
fileName, fileName,
photo, photo,
prepareInlineKeyBoard(keyboard))); prepareInlineKeyBoard(keyboard)), args.msgIdCB);
} }
bool ITelegramBot::sendFileById(const QString &fileID, const QVariant &chatId) { bool ITelegramBot::sendFileById(const QString &fileID, const QVariant &chatId) {
@ -467,11 +467,12 @@ void ITelegramBot::handleIncomeNewUpdate(const QSharedPointer<iUpdate> & update)
} }
} }
bool ITelegramBot::sendMessageRequest(const QSharedPointer<iRequest> &rquest) { bool ITelegramBot::sendMessageRequest(const QSharedPointer<iRequest> &rquest,
const std::function<void (int)> &msgIdCB) {
auto&& reply = IBot::sendRequest(rquest); auto&& reply = IBot::sendRequest(rquest);
if (reply) { if (reply) {
connect(reply.get(), &QNetworkReply::finished, this, connect(reply.get(), &QNetworkReply::finished, this,
[ reply, this]() { [ reply, msgIdCB, this]() {
if (reply->error() == QNetworkReply::NoError) { if (reply->error() == QNetworkReply::NoError) {
QByteArray&& responseData = reply->readAll(); QByteArray&& responseData = reply->readAll();
@ -480,8 +481,13 @@ bool ITelegramBot::sendMessageRequest(const QSharedPointer<iRequest> &rquest) {
const QJsonObject&& obj = json.object(); const QJsonObject&& obj = json.object();
if (obj.contains("result")) { if (obj.contains("result")) {
unsigned long long chatId = obj["result"]["chat"]["id"].toInteger(); unsigned long long chatId = obj["result"]["chat"]["id"].toInteger();
int messageID = obj["result"]["message_id"].toInt();
if (chatId) { if (chatId) {
_lastMessageId[chatId] = obj["result"]["message_id"].toInt(); _lastMessageId[chatId] = messageID;
}
if (msgIdCB) {
msgIdCB(messageID);
} }
} }
} }
@ -539,10 +545,6 @@ void ITelegramBot::handleFileHeader(const QWeakPointer<QNetworkReply> &sender,
} }
} }
bool ITelegramBot::sendFileWithPrivate(const QSharedPointer<TelegramSendFile> &file) {
return sendMessageRequest(file);
}
QString ITelegramBot::findFileInlocatStorage(const QString &fileId) const { QString ITelegramBot::findFileInlocatStorage(const QString &fileId) const {
QDir defaultFileDir(defaultFileStorageLocation()); QDir defaultFileDir(defaultFileStorageLocation());

View File

@ -353,9 +353,11 @@ protected:
/** /**
* @brief sendMessageRequest This method invoke when bot will be sent eny messages into chat. * @brief sendMessageRequest This method invoke when bot will be sent eny messages into chat.
* @param rquest This is a message request. * @param rquest This is a message request.
* @param msgIdCB call back function for the get a sent message id
* @return true if the message sent successful else false. * @return true if the message sent successful else false.
*/ */
virtual bool sendMessageRequest(const QSharedPointer<iRequest> &rquest); virtual bool sendMessageRequest(const QSharedPointer<iRequest> &rquest,
const std::function<void(int msgId)>& msgIdCB = {});
private slots: private slots:
void handleLogin(); void handleLogin();
@ -365,9 +367,6 @@ private slots:
private: private:
bool sendFileWithPrivate(const QSharedPointer<TelegramSendFile>& file);
QString findFileInlocatStorage(const QString& fileId) const; QString findFileInlocatStorage(const QString& fileId) const;
QHash<QString, QSharedPointer<QJsonObject> > QHash<QString, QSharedPointer<QJsonObject> >
prepareInlineKeyBoard(const KeyboardOnMessage &keyboard); prepareInlineKeyBoard(const KeyboardOnMessage &keyboard);

View File

@ -13,7 +13,7 @@ TelegramArgs::TelegramArgs(const QVariant &id,
unsigned long long replyToMessageId, unsigned long long replyToMessageId,
const QString &parseMode, const QString &parseMode,
bool disableWebPagePreview, bool disableWebPagePreview,
const QString &callBackQueryId) const QString &callBackQueryId, const std::function<void (int)> &msgIdCB)
{ {
this->chatId = id; this->chatId = id;
@ -22,6 +22,7 @@ TelegramArgs::TelegramArgs(const QVariant &id,
this->disableWebPagePreview = disableWebPagePreview; this->disableWebPagePreview = disableWebPagePreview;
this->replyToMessageId = replyToMessageId; this->replyToMessageId = replyToMessageId;
this->parseMode = parseMode; this->parseMode = parseMode;
this->msgIdCB = msgIdCB;
} }
QMap<QString, QVariant> TelegramArgs::toMap(bool textAsCaption) const { QMap<QString, QVariant> TelegramArgs::toMap(bool textAsCaption) const {

View File

@ -22,7 +22,8 @@ struct TelegramArgs
unsigned long long replyToMessageId = 0, unsigned long long replyToMessageId = 0,
const QString& parseMode = "html", const QString& parseMode = "html",
bool disableWebPagePreview = false, bool disableWebPagePreview = false,
const QString& callBackQueryId = "" const QString& callBackQueryId = "",
const std::function<void(int msgId)>& msgIdCB = {}
); );
/** /**
@ -67,6 +68,11 @@ struct TelegramArgs
* @return list of arguments. * @return list of arguments.
*/ */
QMap<QString, QVariant> toMap(bool textAsCaption = false) const; QMap<QString, QVariant> toMap(bool textAsCaption = false) const;
/**
* @brief msgIdCB This is id message call bak function. Will be inwoked when request finished successful.
*/
std::function<void(int msgId)> msgIdCB = {};
}; };
} }