From bbdcb047d0f321647ca90204f238ef4b35cbb9b5 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 26 Oct 2024 04:14:01 +0300 Subject: [PATCH] Added ability to request sponsored messages not only for channels. --- .../data/components/sponsored_messages.cpp | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/data/components/sponsored_messages.cpp b/Telegram/SourceFiles/data/components/sponsored_messages.cpp index 2d8dfcba1..d08cde1b4 100644 --- a/Telegram/SourceFiles/data/components/sponsored_messages.cpp +++ b/Telegram/SourceFiles/data/components/sponsored_messages.cpp @@ -194,7 +194,12 @@ void SponsoredMessages::inject( } bool SponsoredMessages::canHaveFor(not_null history) const { - return history->peer->isChannel(); + if (history->peer->isChannel()) { + return true; + } else if (const auto user = history->peer->asUser()) { + return user->isBot(); + } + return false; } void SponsoredMessages::request(not_null history, Fn done) { @@ -218,10 +223,8 @@ void SponsoredMessages::request(not_null history, Fn done) { } } } - const auto channel = history->peer->asChannel(); - Assert(channel != nullptr); request.requestId = _session->api().request( - MTPmessages_GetSponsoredMessages(channel->input) + MTPmessages_GetSponsoredMessages(history->peer->input) ).done([=](const MTPmessages_sponsoredMessages &result) { parse(history, result); if (done) { @@ -406,7 +409,7 @@ void SponsoredMessages::clearItems(not_null history) { const SponsoredMessages::Entry *SponsoredMessages::find( const FullMsgId &fullId) const { - if (!peerIsChannel(fullId.peer)) { + if (!peerIsChannel(fullId.peer) && !peerIsUser(fullId.peer)) { return nullptr; } const auto history = _session->data().history(fullId.peer); @@ -434,11 +437,9 @@ void SponsoredMessages::view(const FullMsgId &fullId) { if (request.requestId || TooEarlyForRequest(request.lastReceived)) { return; } - const auto channel = entryPtr->item->history()->peer->asChannel(); - Assert(channel != nullptr); request.requestId = _session->api().request( MTPmessages_ViewSponsoredMessage( - channel->input , + entryPtr->item->history()->peer->input, MTP_bytes(randomId)) ).done([=] { auto &request = _viewRequests[randomId]; @@ -489,14 +490,12 @@ void SponsoredMessages::clicked( return; } const auto randomId = entryPtr->sponsored.randomId; - const auto channel = entryPtr->item->history()->peer->asChannel(); - Assert(channel != nullptr); using Flag = MTPmessages_ClickSponsoredMessage::Flag; _session->api().request(MTPmessages_ClickSponsoredMessage( MTP_flags(Flag(0) | (isMedia ? Flag::f_media : Flag(0)) | (isFullscreen ? Flag::f_fullscreen : Flag(0))), - channel->input, + entryPtr->item->history()->peer->input, MTP_bytes(randomId) )).send(); } @@ -526,10 +525,6 @@ auto SponsoredMessages::createReportCallback(const FullMsgId &fullId) } const auto history = entry->item->history(); - const auto channel = history->peer->asChannel(); - if (!channel) { - return; - } const auto erase = [=] { const auto it = _data.find(history); @@ -549,7 +544,7 @@ auto SponsoredMessages::createReportCallback(const FullMsgId &fullId) state->requestId = _session->api().request( MTPmessages_ReportSponsoredMessage( - channel->input, + history->peer->input, MTP_bytes(entry->sponsored.randomId), MTP_bytes(optionId)) ).done([=](