Remove multiple sponsored messages in a chat.
This commit is contained in:
parent
4e29d0e232
commit
ae1d1867f2
@ -836,9 +836,6 @@ messageCalendar total_count:int32 days:vector<messageCalendarDay> = MessageCalen
|
||||
//@content Content of the message. Currently, can be only of the type messageText
|
||||
sponsoredMessage id:int32 sponsor_chat_id:int53 link:InternalLinkType content:MessageContent = SponsoredMessage;
|
||||
|
||||
//@description Contains a list of sponsored messages @messages List of sponsored messages
|
||||
sponsoredMessages messages:vector<sponsoredMessage> = SponsoredMessages;
|
||||
|
||||
|
||||
//@class NotificationSettingsScope @description Describes the types of chats to which notification settings are relevant
|
||||
|
||||
@ -4360,8 +4357,8 @@ getChatScheduledMessages chat_id:int53 = Messages;
|
||||
//@limit The maximum number of messages to be returned; must be positive and can't be greater than 100. For optimal performance, the number of returned messages is chosen by TDLib and can be smaller than the specified limit
|
||||
getMessagePublicForwards chat_id:int53 message_id:int53 offset:string limit:int32 = FoundMessages;
|
||||
|
||||
//@description Returns sponsored messages to be shown in a chat; for channel chats only @chat_id Identifier of the chat
|
||||
getChatSponsoredMessages chat_id:int53 = SponsoredMessages;
|
||||
//@description Returns sponsored message to be shown in a chat; for channel chats only. Returns a 404 error if there is no sponsored message in the chat @chat_id Identifier of the chat
|
||||
getChatSponsoredMessage chat_id:int53 = SponsoredMessage;
|
||||
|
||||
//@description Informs TDLib that a sponsored message was viewed by the user @chat_id Identifier of the chat with the sponsored message @sponsored_message_id The identifier of the sponsored message being viewed
|
||||
viewSponsoredMessage chat_id:int53 sponsored_message_id:int32 = Ok;
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "td/utils/algorithm.h"
|
||||
#include "td/utils/buffer.h"
|
||||
#include "td/utils/logging.h"
|
||||
#include "td/utils/Random.h"
|
||||
#include "td/utils/SliceBuilder.h"
|
||||
#include "td/utils/Status.h"
|
||||
|
||||
@ -114,7 +115,7 @@ struct SponsoredMessageManager::SponsoredMessage {
|
||||
};
|
||||
|
||||
struct SponsoredMessageManager::DialogSponsoredMessages {
|
||||
vector<Promise<td_api::object_ptr<td_api::sponsoredMessages>>> promises;
|
||||
vector<Promise<td_api::object_ptr<td_api::sponsoredMessage>>> promises;
|
||||
vector<SponsoredMessage> messages;
|
||||
std::unordered_map<int32, string> message_random_ids;
|
||||
};
|
||||
@ -184,27 +185,25 @@ td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponso
|
||||
get_message_content_object(sponsored_message.content.get(), td_, dialog_id, 0, false, true, -1));
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::sponsoredMessages> SponsoredMessageManager::get_sponsored_messages_object(
|
||||
td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponsored_message_object(
|
||||
DialogId dialog_id, const DialogSponsoredMessages &sponsored_messages) const {
|
||||
return td_api::make_object<td_api::sponsoredMessages>(
|
||||
transform(sponsored_messages.messages, [this, dialog_id](const SponsoredMessage &sponsored_message) {
|
||||
return get_sponsored_message_object(dialog_id, sponsored_message);
|
||||
}));
|
||||
auto pos = Random::fast(0, static_cast<int>(sponsored_messages.messages.size()) - 1);
|
||||
return get_sponsored_message_object(dialog_id, sponsored_messages.messages[pos]);
|
||||
}
|
||||
|
||||
void SponsoredMessageManager::get_dialog_sponsored_messages(
|
||||
DialogId dialog_id, Promise<td_api::object_ptr<td_api::sponsoredMessages>> &&promise) {
|
||||
if (!td_->messages_manager_->have_dialog_force(dialog_id, "get_sponsored_messages")) {
|
||||
void SponsoredMessageManager::get_dialog_sponsored_message(
|
||||
DialogId dialog_id, Promise<td_api::object_ptr<td_api::sponsoredMessage>> &&promise) {
|
||||
if (!td_->messages_manager_->have_dialog_force(dialog_id, "get_dialog_sponsored_message")) {
|
||||
return promise.set_error(Status::Error(400, "Chat not found"));
|
||||
}
|
||||
if (dialog_id.get_type() != DialogType::Channel ||
|
||||
td_->contacts_manager_->get_channel_type(dialog_id.get_channel_id()) != ContactsManager::ChannelType::Broadcast) {
|
||||
return promise.set_value(td_api::make_object<td_api::sponsoredMessages>());
|
||||
return promise.set_value(nullptr);
|
||||
}
|
||||
|
||||
auto &messages = dialog_sponsored_messages_[dialog_id];
|
||||
if (messages != nullptr && messages->promises.empty()) {
|
||||
return promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
||||
return promise.set_value(get_sponsored_message_object(dialog_id, *messages));
|
||||
}
|
||||
|
||||
if (messages == nullptr) {
|
||||
@ -280,7 +279,7 @@ void SponsoredMessageManager::on_get_dialog_sponsored_messages(
|
||||
}
|
||||
|
||||
for (auto &promise : promises) {
|
||||
promise.set_value(get_sponsored_messages_object(dialog_id, *messages));
|
||||
promise.set_value(get_sponsored_message_object(dialog_id, *messages));
|
||||
}
|
||||
delete_cached_sponsored_messages_timeout_.set_timeout_in(dialog_id.get(), 300.0);
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ class SponsoredMessageManager final : public Actor {
|
||||
SponsoredMessageManager &operator=(SponsoredMessageManager &&) = delete;
|
||||
~SponsoredMessageManager() final;
|
||||
|
||||
void get_dialog_sponsored_messages(DialogId dialog_id,
|
||||
Promise<td_api::object_ptr<td_api::sponsoredMessages>> &&promise);
|
||||
void get_dialog_sponsored_message(DialogId dialog_id,
|
||||
Promise<td_api::object_ptr<td_api::sponsoredMessage>> &&promise);
|
||||
|
||||
void view_sponsored_message(DialogId dialog_id, int32 sponsored_message_id, Promise<Unit> &&promise);
|
||||
|
||||
@ -51,7 +51,7 @@ class SponsoredMessageManager final : public Actor {
|
||||
td_api::object_ptr<td_api::sponsoredMessage> get_sponsored_message_object(
|
||||
DialogId dialog_id, const SponsoredMessage &sponsored_message) const;
|
||||
|
||||
td_api::object_ptr<td_api::sponsoredMessages> get_sponsored_messages_object(
|
||||
td_api::object_ptr<td_api::sponsoredMessage> get_sponsored_message_object(
|
||||
DialogId dialog_id, const DialogSponsoredMessages &sponsored_messages) const;
|
||||
|
||||
void on_get_dialog_sponsored_messages(
|
||||
|
@ -4703,10 +4703,10 @@ void Td::on_request(uint64 id, const td_api::getMessages &request) {
|
||||
CREATE_REQUEST(GetMessagesRequest, request.chat_id_, request.message_ids_);
|
||||
}
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::getChatSponsoredMessages &request) {
|
||||
void Td::on_request(uint64 id, const td_api::getChatSponsoredMessage &request) {
|
||||
CHECK_IS_USER();
|
||||
CREATE_REQUEST_PROMISE();
|
||||
sponsored_message_manager_->get_dialog_sponsored_messages(DialogId(request.chat_id_), std::move(promise));
|
||||
sponsored_message_manager_->get_dialog_sponsored_message(DialogId(request.chat_id_), std::move(promise));
|
||||
}
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::viewSponsoredMessage &request) {
|
||||
|
@ -525,7 +525,7 @@ class Td final : public Actor {
|
||||
|
||||
void on_request(uint64 id, const td_api::getMessages &request);
|
||||
|
||||
void on_request(uint64 id, const td_api::getChatSponsoredMessages &request);
|
||||
void on_request(uint64 id, const td_api::getChatSponsoredMessage &request);
|
||||
|
||||
void on_request(uint64 id, const td_api::viewSponsoredMessage &request);
|
||||
|
||||
|
@ -2671,7 +2671,7 @@ class CliClient final : public Actor {
|
||||
get_args(args, chat_id, message_ids);
|
||||
send_request(td_api::make_object<td_api::getMessages>(as_chat_id(chat_id), as_message_ids(message_ids)));
|
||||
} else if (op == "gsm") {
|
||||
send_request(td_api::make_object<td_api::getChatSponsoredMessages>(as_chat_id(args)));
|
||||
send_request(td_api::make_object<td_api::getChatSponsoredMessage>(as_chat_id(args)));
|
||||
} else if (op == "vsm") {
|
||||
string chat_id;
|
||||
string sponsored_message_id;
|
||||
|
Loading…
x
Reference in New Issue
Block a user