summaryrefslogtreecommitdiff
path: root/protocols/Telegram/src/server.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-12-25 21:02:38 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-12-25 21:02:38 +0300
commit815d356584371b59545f5a2918a48cebd3a3b396 (patch)
treeda2ab9dfd087c5d39eb4b2224677e7c13dbef689 /protocols/Telegram/src/server.cpp
parent0c66b748a7b6b223d34374994e4d7d207e3d2c71 (diff)
Telegram: text message sending
Diffstat (limited to 'protocols/Telegram/src/server.cpp')
-rw-r--r--protocols/Telegram/src/server.cpp51
1 files changed, 48 insertions, 3 deletions
diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp
index 89db787400..a94fe77e8f 100644
--- a/protocols/Telegram/src/server.cpp
+++ b/protocols/Telegram/src/server.cpp
@@ -68,9 +68,10 @@ void CMTProto::ProcessResponse(td::ClientManager::Response response)
debugLogA("ProcessResponse: id=%d (%s)", int(response.request_id), to_string(response.object).c_str());
if (response.request_id) {
- auto *p = m_arRequests.find((TG_REQUEST *)&response.request_id);
+ TG_REQUEST tmp(response.request_id, 0);
+ auto *p = m_arRequests.find(&tmp);
if (p) {
- (this->*p->pHandler)(response);
+ p->Execute(this, response);
m_arRequests.remove(p);
}
return;
@@ -99,6 +100,41 @@ void CMTProto::ProcessResponse(td::ClientManager::Response response)
}
}
+void CMTProto::OnSendMessage(td::ClientManager::Response &response, void *pUserInfo)
+{
+ if (!response.object)
+ return;
+
+ if (response.object->get_id() != TD::message::ID) {
+ debugLogA("Gotten class ID %d instead of %d, exiting", response.object->get_id(), TD::message::ID);
+ return;
+ }
+
+ auto *pMessage = ((TD::message *)response.object.get());
+ auto *pUser = FindUser(pMessage->chat_id_);
+ if (pUser) {
+ char szMsgId[100];
+ _i64toa(pMessage->id_, szMsgId, 10);
+ ProtoBroadcastAck(pUser->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, pUserInfo, (LPARAM)szMsgId);
+ }
+}
+
+int CMTProto::SendTextMessage(uint64_t chatId, const char *pszMessage)
+{
+ int ret = m_iMsgId++;
+
+ auto pContent = TD::make_object<TD::inputMessageText>();
+ pContent->text_ = TD::make_object<TD::formattedText>();
+ pContent->text_->text_ = std::move(pszMessage);
+
+ auto *pMessage = new TD::sendMessage();
+ pMessage->chat_id_ = chatId;
+ pMessage->input_message_content_ = std::move(pContent);
+ SendQuery(pMessage, &CMTProto::OnSendMessage, (void*)ret);
+
+ return ret;
+}
+
void CMTProto::SendQuery(TD::Function *pFunc, TG_QUERY_HANDLER pHandler)
{
int queryId = ++m_iQueryId;
@@ -108,6 +144,15 @@ void CMTProto::SendQuery(TD::Function *pFunc, TG_QUERY_HANDLER pHandler)
m_arRequests.insert(new TG_REQUEST(queryId, pHandler));
}
+void CMTProto::SendQuery(TD::Function *pFunc, TG_QUERY_HANDLER_FULL pHandler, void *pUserInfo)
+{
+ int queryId = ++m_iQueryId;
+ m_pClientMmanager->send(m_iClientId, queryId, TD::object_ptr<TD::Function>(pFunc));
+
+ if (pHandler)
+ m_arRequests.insert(new TG_REQUEST_FULL(queryId, pHandler, pUserInfo));
+}
+
///////////////////////////////////////////////////////////////////////////////
void CMTProto::ProcessChat(TD::updateNewChat *pObj)
@@ -169,7 +214,7 @@ void CMTProto::ProcessMessage(TD::updateNewMessage *pObj)
}
char szId[100];
- _i64toa(pMessage->id_, szId, _countof(szId));
+ _i64toa(pMessage->id_, szId, 10);
PROTORECVEVENT pre = {};
pre.szMessage = szText.GetBuffer();