Added ability to request sponsored messages not only for channels.

This commit is contained in:
23rd 2024-10-26 04:14:01 +03:00
parent 78f2e70956
commit bbdcb047d0

View file

@ -194,7 +194,12 @@ void SponsoredMessages::inject(
} }
bool SponsoredMessages::canHaveFor(not_null<History*> history) const { bool SponsoredMessages::canHaveFor(not_null<History*> 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*> history, Fn<void()> done) { void SponsoredMessages::request(not_null<History*> history, Fn<void()> done) {
@ -218,10 +223,8 @@ void SponsoredMessages::request(not_null<History*> history, Fn<void()> done) {
} }
} }
} }
const auto channel = history->peer->asChannel();
Assert(channel != nullptr);
request.requestId = _session->api().request( request.requestId = _session->api().request(
MTPmessages_GetSponsoredMessages(channel->input) MTPmessages_GetSponsoredMessages(history->peer->input)
).done([=](const MTPmessages_sponsoredMessages &result) { ).done([=](const MTPmessages_sponsoredMessages &result) {
parse(history, result); parse(history, result);
if (done) { if (done) {
@ -406,7 +409,7 @@ void SponsoredMessages::clearItems(not_null<History*> history) {
const SponsoredMessages::Entry *SponsoredMessages::find( const SponsoredMessages::Entry *SponsoredMessages::find(
const FullMsgId &fullId) const { const FullMsgId &fullId) const {
if (!peerIsChannel(fullId.peer)) { if (!peerIsChannel(fullId.peer) && !peerIsUser(fullId.peer)) {
return nullptr; return nullptr;
} }
const auto history = _session->data().history(fullId.peer); const auto history = _session->data().history(fullId.peer);
@ -434,11 +437,9 @@ void SponsoredMessages::view(const FullMsgId &fullId) {
if (request.requestId || TooEarlyForRequest(request.lastReceived)) { if (request.requestId || TooEarlyForRequest(request.lastReceived)) {
return; return;
} }
const auto channel = entryPtr->item->history()->peer->asChannel();
Assert(channel != nullptr);
request.requestId = _session->api().request( request.requestId = _session->api().request(
MTPmessages_ViewSponsoredMessage( MTPmessages_ViewSponsoredMessage(
channel->input , entryPtr->item->history()->peer->input,
MTP_bytes(randomId)) MTP_bytes(randomId))
).done([=] { ).done([=] {
auto &request = _viewRequests[randomId]; auto &request = _viewRequests[randomId];
@ -489,14 +490,12 @@ void SponsoredMessages::clicked(
return; return;
} }
const auto randomId = entryPtr->sponsored.randomId; const auto randomId = entryPtr->sponsored.randomId;
const auto channel = entryPtr->item->history()->peer->asChannel();
Assert(channel != nullptr);
using Flag = MTPmessages_ClickSponsoredMessage::Flag; using Flag = MTPmessages_ClickSponsoredMessage::Flag;
_session->api().request(MTPmessages_ClickSponsoredMessage( _session->api().request(MTPmessages_ClickSponsoredMessage(
MTP_flags(Flag(0) MTP_flags(Flag(0)
| (isMedia ? Flag::f_media : Flag(0)) | (isMedia ? Flag::f_media : Flag(0))
| (isFullscreen ? Flag::f_fullscreen : Flag(0))), | (isFullscreen ? Flag::f_fullscreen : Flag(0))),
channel->input, entryPtr->item->history()->peer->input,
MTP_bytes(randomId) MTP_bytes(randomId)
)).send(); )).send();
} }
@ -526,10 +525,6 @@ auto SponsoredMessages::createReportCallback(const FullMsgId &fullId)
} }
const auto history = entry->item->history(); const auto history = entry->item->history();
const auto channel = history->peer->asChannel();
if (!channel) {
return;
}
const auto erase = [=] { const auto erase = [=] {
const auto it = _data.find(history); const auto it = _data.find(history);
@ -549,7 +544,7 @@ auto SponsoredMessages::createReportCallback(const FullMsgId &fullId)
state->requestId = _session->api().request( state->requestId = _session->api().request(
MTPmessages_ReportSponsoredMessage( MTPmessages_ReportSponsoredMessage(
channel->input, history->peer->input,
MTP_bytes(entry->sponsored.randomId), MTP_bytes(entry->sponsored.randomId),
MTP_bytes(optionId)) MTP_bytes(optionId))
).done([=]( ).done([=](