Support giveaway channels in *ChannelFromMessage.

This commit is contained in:
levlam 2023-10-27 00:34:33 +03:00
parent 11c20c0417
commit 9260d38618
6 changed files with 25 additions and 2 deletions

View File

@ -65,6 +65,12 @@ Result<GiveawayParameters> GiveawayParameters::get_giveaway_parameters(
parameters->winners_selection_date_, vector<string>(parameters->country_codes_));
}
vector<ChannelId> GiveawayParameters::get_channel_ids() const {
auto result = additional_channel_ids_;
result.push_back(boosted_channel_id_);
return result;
}
void GiveawayParameters::add_dependencies(Dependencies &dependencies) const {
dependencies.add_dialog_and_dependencies(DialogId(boosted_channel_id_));
for (auto channel_id : additional_channel_ids_) {

View File

@ -63,6 +63,8 @@ class GiveawayParameters {
return DialogId(boosted_channel_id_);
}
vector<ChannelId> get_channel_ids() const;
void add_dependencies(Dependencies &dependencies) const;
telegram_api::object_ptr<telegram_api::inputStorePaymentPremiumGiveaway> get_input_store_payment_premium_giveaway(

View File

@ -3759,6 +3759,18 @@ vector<UserId> get_message_content_min_user_ids(const Td *td, const MessageConte
UNREACHABLE();
break;
}
// not supported server-side
// return get_user_ids(get_message_content_text(message_content));
return {};
}
vector<ChannelId> get_message_content_min_channel_ids(const Td *td, const MessageContent *message_content) {
switch (message_content->get_type()) {
case MessageContentType::Giveaway: {
const auto *content = static_cast<const MessageGiveaway *>(message_content);
return content->giveaway_parameters.get_channel_ids();
}
}
return {};
}

View File

@ -157,6 +157,8 @@ std::pair<InputGroupCallId, bool> get_message_content_group_call_info(const Mess
vector<UserId> get_message_content_min_user_ids(const Td *td, const MessageContent *message_content);
vector<ChannelId> get_message_content_min_channel_ids(const Td *td, const MessageContent *message_content);
vector<UserId> get_message_content_added_user_ids(const MessageContent *content);
UserId get_message_content_deleted_user_id(const MessageContent *content);

View File

@ -13148,7 +13148,7 @@ vector<UserId> MessagesManager::get_message_user_ids(const Message *m) const {
return user_ids;
}
vector<ChannelId> MessagesManager::get_message_channel_ids(const Message *m) {
vector<ChannelId> MessagesManager::get_message_channel_ids(const Message *m) const {
vector<ChannelId> channel_ids;
if (m->sender_dialog_id.is_valid() && m->sender_dialog_id.get_type() == DialogType::Channel) {
channel_ids.push_back(m->sender_dialog_id.get_channel_id());
@ -13160,6 +13160,7 @@ vector<ChannelId> MessagesManager::get_message_channel_ids(const Message *m) {
m->forward_info->from_dialog_id.get_type() == DialogType::Channel) {
channel_ids.push_back(m->forward_info->from_dialog_id.get_channel_id());
}
append(channel_ids, get_message_content_min_channel_ids(td_, m->content.get()));
return channel_ids;
}

View File

@ -1723,7 +1723,7 @@ class MessagesManager final : public Actor {
vector<UserId> get_message_user_ids(const Message *m) const;
static vector<ChannelId> get_message_channel_ids(const Message *m);
vector<ChannelId> get_message_channel_ids(const Message *m) const;
static bool is_dialog_inited(const Dialog *d);