Skip unsupported sponsored messages.

This commit is contained in:
levlam 2023-06-02 13:01:32 +03:00
parent 75e00df016
commit 4580cfc23b

View File

@ -165,23 +165,30 @@ td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponso
case DialogType::User: { case DialogType::User: {
auto user_id = sponsored_message.sponsor_dialog_id.get_user_id(); auto user_id = sponsored_message.sponsor_dialog_id.get_user_id();
if (!td_->contacts_manager_->is_user_bot(user_id)) { if (!td_->contacts_manager_->is_user_bot(user_id)) {
break; LOG(ERROR) << "Sponsor " << user_id << " is not a bot";
return nullptr;
} }
auto bot_username = td_->contacts_manager_->get_user_first_username(user_id); auto bot_username = td_->contacts_manager_->get_user_first_username(user_id);
if (bot_username.empty()) { if (bot_username.empty()) {
break; LOG(ERROR) << "Sponsor " << user_id << " has no username";
return nullptr;
} }
link = td_api::make_object<td_api::internalLinkTypeBotStart>(bot_username, sponsored_message.start_param, false); link = td_api::make_object<td_api::internalLinkTypeBotStart>(bot_username, sponsored_message.start_param, false);
break; break;
} }
case DialogType::Channel: case DialogType::Channel: {
if (sponsored_message.server_message_id.is_valid()) {
auto channel_id = sponsored_message.sponsor_dialog_id.get_channel_id(); auto channel_id = sponsored_message.sponsor_dialog_id.get_channel_id();
if (!td_->contacts_manager_->is_broadcast_channel(channel_id)) {
LOG(ERROR) << "Sponsor " << channel_id << " is not a channel";
return nullptr;
}
if (sponsored_message.server_message_id.is_valid()) {
link = td_api::make_object<td_api::internalLinkTypeMessage>( link = td_api::make_object<td_api::internalLinkTypeMessage>(
PSTRING() << LinkManager::get_t_me_url() << "c/" << channel_id.get() << '/' PSTRING() << LinkManager::get_t_me_url() << "c/" << channel_id.get() << '/'
<< sponsored_message.server_message_id.get()); << sponsored_message.server_message_id.get());
} }
break; break;
}
case DialogType::None: { case DialogType::None: {
CHECK(!sponsored_message.invite_hash.empty()); CHECK(!sponsored_message.invite_hash.empty());
auto invite_link = LinkManager::get_dialog_invite_link(sponsored_message.invite_hash, false); auto invite_link = LinkManager::get_dialog_invite_link(sponsored_message.invite_hash, false);
@ -190,6 +197,11 @@ td_api::object_ptr<td_api::sponsoredMessage> SponsoredMessageManager::get_sponso
LOG(ERROR) << "Failed to get invite link info for " << invite_link; LOG(ERROR) << "Failed to get invite link info for " << invite_link;
return nullptr; return nullptr;
} }
if (chat_invite_link_info->type_->get_id() != td_api::chatTypeSupergroup::ID ||
!static_cast<const td_api::chatTypeSupergroup *>(chat_invite_link_info->type_.get())->is_channel_) {
LOG(ERROR) << "Receive sponsor chat of a wrong type " << to_string(chat_invite_link_info->type_);
return nullptr;
}
link = td_api::make_object<td_api::internalLinkTypeChatInvite>( link = td_api::make_object<td_api::internalLinkTypeChatInvite>(
LinkManager::get_dialog_invite_link(sponsored_message.invite_hash, true)); LinkManager::get_dialog_invite_link(sponsored_message.invite_hash, true));
} }
@ -209,6 +221,7 @@ td_api::object_ptr<td_api::sponsoredMessages> SponsoredMessageManager::get_spons
auto messages = transform(sponsored_messages.messages, [this, dialog_id](const SponsoredMessage &message) { auto messages = transform(sponsored_messages.messages, [this, dialog_id](const SponsoredMessage &message) {
return get_sponsored_message_object(dialog_id, message); return get_sponsored_message_object(dialog_id, message);
}); });
td::remove_if(messages, [](const auto &message) { return message == nullptr; });
return td_api::make_object<td_api::sponsoredMessages>(std::move(messages), sponsored_messages.messages_between); return td_api::make_object<td_api::sponsoredMessages>(std::move(messages), sponsored_messages.messages_between);
} }