diff options
Diffstat (limited to 'protocols/Telegram/src/server.cpp')
-rw-r--r-- | protocols/Telegram/src/server.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 3eb42bd103..403d2f390c 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -161,6 +161,10 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) ProcessChatPosition((TD::updateChatPosition *)response.object.get());
break;
+ case TD::updateChatAvailableReactions::ID:
+ ProcessChatReactions((TD::updateChatAvailableReactions *)response.object.get());
+ break;
+
case TD::updateChatReadInbox::ID:
ProcessMarkRead((TD::updateChatReadInbox *)response.object.get());
break;
@@ -516,6 +520,37 @@ void CTelegramProto::ProcessChatPosition(TD::updateChatPosition *pObj) }
}
+void CTelegramProto::ProcessChatReactions(TD::updateChatAvailableReactions *pObj)
+{
+ if (pObj->available_reactions_->get_id() != TD::chatAvailableReactionsSome::ID) {
+ debugLogA("Unsupported reactions type: %d", pObj->available_reactions_->get_id());
+ return;
+ }
+
+ auto &pReactions = ((TD::chatAvailableReactionsSome *)pObj->available_reactions_.get())->reactions_;
+
+ if (auto *pChat = FindChat(pObj->chat_id_)) {
+ if (!pChat->pReactions)
+ pChat->pReactions = new OBJLIST<char>(1);
+ else
+ pChat->pReactions->destroy();
+
+ for (auto &it : pReactions) {
+ if (it->get_id() != TD::reactionTypeEmoji::ID)
+ continue;
+
+ auto *pEmoji = (TD::reactionTypeEmoji *)it.get();
+ auto &str = pEmoji->emoji_;
+ pChat->pReactions->insert(mir_strcpy(new char[str.length() + 1], str.c_str()));
+ }
+
+ if (pChat->pReactions->getCount() == 0) {
+ delete pChat->pReactions;
+ pChat->pReactions = nullptr;
+ }
+ }
+}
+
void CTelegramProto::ProcessConnectionState(TD::updateConnectionState *pObj)
{
pConnState = std::move(pObj->state_);
|