|
|
|
@ -2272,14 +2272,13 @@ class Client::JsonPoll final : public td::Jsonable {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
object("is_closed", td::JsonBool(poll_->is_closed_));
|
|
|
|
object("is_closed", td::JsonBool(poll_->is_closed_));
|
|
|
|
object("is_anonymous", td::JsonBool(poll_->is_anonymous_));
|
|
|
|
object("is_anonymous", td::JsonBool(poll_->is_anonymous_));
|
|
|
|
|
|
|
|
object("allows_multiple_answers", td::JsonBool(poll_->allows_multiple_answers_));
|
|
|
|
switch (poll_->type_->get_id()) {
|
|
|
|
switch (poll_->type_->get_id()) {
|
|
|
|
case td_api::pollTypeQuiz::ID: {
|
|
|
|
case td_api::pollTypeQuiz::ID: {
|
|
|
|
object("type", "quiz");
|
|
|
|
object("type", "quiz");
|
|
|
|
object("allows_multiple_answers", td::JsonFalse());
|
|
|
|
|
|
|
|
auto quiz = static_cast<const td_api::pollTypeQuiz *>(poll_->type_.get());
|
|
|
|
auto quiz = static_cast<const td_api::pollTypeQuiz *>(poll_->type_.get());
|
|
|
|
int32 correct_option_id = quiz->correct_option_id_;
|
|
|
|
if (quiz->correct_option_ids_.size() == 1u) {
|
|
|
|
if (correct_option_id != -1) {
|
|
|
|
object("correct_option_id", quiz->correct_option_ids_[0]);
|
|
|
|
object("correct_option_id", correct_option_id);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
auto *explanation = quiz->explanation_.get();
|
|
|
|
auto *explanation = quiz->explanation_.get();
|
|
|
|
if (!explanation->text_.empty()) {
|
|
|
|
if (!explanation->text_.empty()) {
|
|
|
|
@ -2290,8 +2289,6 @@ class Client::JsonPoll final : public td::Jsonable {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case td_api::pollTypeRegular::ID:
|
|
|
|
case td_api::pollTypeRegular::ID:
|
|
|
|
object("type", "regular");
|
|
|
|
object("type", "regular");
|
|
|
|
object("allows_multiple_answers",
|
|
|
|
|
|
|
|
td::JsonBool(static_cast<const td_api::pollTypeRegular *>(poll_->type_.get())->allow_multiple_answers_));
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
UNREACHABLE();
|
|
|
|
UNREACHABLE();
|
|
|
|
@ -2326,7 +2323,7 @@ class Client::JsonPollAnswer final : public td::Jsonable {
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
UNREACHABLE();
|
|
|
|
UNREACHABLE();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
object("option_ids", td::json_array(poll_answer_->option_ids_, [](int32 option_id) { return option_id; }));
|
|
|
|
object("option_ids", td::json_array(poll_answer_->option_positions_, [](int32 option_id) { return option_id; }));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
@ -4474,6 +4471,12 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case td_api::messageChatHasProtectedContentDisableRequested::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentDisableRequested::ID:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case td_api::messagePollOptionAdded::ID:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case td_api::messagePollOptionDeleted::ID:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case td_api::messageManagedBotCreated::ID:
|
|
|
|
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
UNREACHABLE();
|
|
|
|
UNREACHABLE();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -9181,10 +9184,11 @@ td_api::object_ptr<td_api::InputMessageReplyTo> Client::get_input_message_reply_
|
|
|
|
if (reply_parameters.reply_in_chat_id != 0) {
|
|
|
|
if (reply_parameters.reply_in_chat_id != 0) {
|
|
|
|
return make_object<td_api::inputMessageReplyToExternalMessage>(
|
|
|
|
return make_object<td_api::inputMessageReplyToExternalMessage>(
|
|
|
|
reply_parameters.reply_in_chat_id, reply_parameters.reply_to_message_id, std::move(reply_parameters.quote),
|
|
|
|
reply_parameters.reply_in_chat_id, reply_parameters.reply_to_message_id, std::move(reply_parameters.quote),
|
|
|
|
reply_parameters.checklist_task_id);
|
|
|
|
reply_parameters.checklist_task_id, td::string());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return make_object<td_api::inputMessageReplyToMessage>(
|
|
|
|
return make_object<td_api::inputMessageReplyToMessage>(reply_parameters.reply_to_message_id,
|
|
|
|
reply_parameters.reply_to_message_id, std::move(reply_parameters.quote), reply_parameters.checklist_task_id);
|
|
|
|
std::move(reply_parameters.quote),
|
|
|
|
|
|
|
|
reply_parameters.checklist_task_id, td::string());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -9192,8 +9196,9 @@ td_api::object_ptr<td_api::InputMessageReplyTo> Client::get_input_message_reply_
|
|
|
|
td_api::object_ptr<td_api::InputMessageReplyTo> Client::get_input_message_reply_to(
|
|
|
|
td_api::object_ptr<td_api::InputMessageReplyTo> Client::get_input_message_reply_to(
|
|
|
|
InputReplyParameters &&reply_parameters) {
|
|
|
|
InputReplyParameters &&reply_parameters) {
|
|
|
|
if (reply_parameters.reply_in_chat_id.empty() && reply_parameters.reply_to_message_id > 0) {
|
|
|
|
if (reply_parameters.reply_in_chat_id.empty() && reply_parameters.reply_to_message_id > 0) {
|
|
|
|
return make_object<td_api::inputMessageReplyToMessage>(
|
|
|
|
return make_object<td_api::inputMessageReplyToMessage>(reply_parameters.reply_to_message_id,
|
|
|
|
reply_parameters.reply_to_message_id, std::move(reply_parameters.quote), reply_parameters.checklist_task_id);
|
|
|
|
std::move(reply_parameters.quote),
|
|
|
|
|
|
|
|
reply_parameters.checklist_task_id, td::string());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -10304,8 +10309,9 @@ td::Result<td_api::object_ptr<td_api::InputInlineQueryResult>> Client::get_inlin
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (input_message_content == nullptr) {
|
|
|
|
if (input_message_content == nullptr) {
|
|
|
|
input_message_content = make_object<td_api::inputMessagePhoto>(
|
|
|
|
input_message_content =
|
|
|
|
nullptr, nullptr, td::vector<int32>(), 0, 0, std::move(caption), show_caption_above_media, nullptr, false);
|
|
|
|
make_object<td_api::inputMessagePhoto>(nullptr, nullptr, nullptr, td::vector<int32>(), 0, 0,
|
|
|
|
|
|
|
|
std::move(caption), show_caption_above_media, nullptr, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return make_object<td_api::inputInlineQueryResultPhoto>(id, title, description, thumbnail_url, photo_url,
|
|
|
|
return make_object<td_api::inputInlineQueryResultPhoto>(id, title, description, thumbnail_url, photo_url,
|
|
|
|
photo_width, photo_height, std::move(reply_markup),
|
|
|
|
photo_width, photo_height, std::move(reply_markup),
|
|
|
|
@ -11488,7 +11494,7 @@ td::Result<td_api::object_ptr<td_api::InputMessageContent>> Client::get_input_me
|
|
|
|
|
|
|
|
|
|
|
|
TRY_RESULT(type, object.get_required_string_field("type"));
|
|
|
|
TRY_RESULT(type, object.get_required_string_field("type"));
|
|
|
|
if (type == "photo") {
|
|
|
|
if (type == "photo") {
|
|
|
|
return make_object<td_api::inputMessagePhoto>(std::move(input_file), nullptr, td::vector<int32>(), 0, 0,
|
|
|
|
return make_object<td_api::inputMessagePhoto>(std::move(input_file), nullptr, nullptr, td::vector<int32>(), 0, 0,
|
|
|
|
std::move(caption), show_caption_above_media, nullptr, has_spoiler);
|
|
|
|
std::move(caption), show_caption_above_media, nullptr, has_spoiler);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (type == "video") {
|
|
|
|
if (type == "video") {
|
|
|
|
@ -11619,7 +11625,7 @@ td::Result<td_api::object_ptr<td_api::inputPaidMedia>> Client::get_input_paid_me
|
|
|
|
object_ptr<td_api::InputPaidMediaType> media_type;
|
|
|
|
object_ptr<td_api::InputPaidMediaType> media_type;
|
|
|
|
TRY_RESULT(type, object.get_required_string_field("type"));
|
|
|
|
TRY_RESULT(type, object.get_required_string_field("type"));
|
|
|
|
if (type == "photo") {
|
|
|
|
if (type == "photo") {
|
|
|
|
media_type = make_object<td_api::inputPaidMediaTypePhoto>();
|
|
|
|
media_type = make_object<td_api::inputPaidMediaTypePhoto>(nullptr);
|
|
|
|
} else if (type == "video") {
|
|
|
|
} else if (type == "video") {
|
|
|
|
TRY_RESULT(duration, object.get_optional_int_field("duration"));
|
|
|
|
TRY_RESULT(duration, object.get_optional_int_field("duration"));
|
|
|
|
TRY_RESULT(supports_streaming, object.get_optional_bool_field("supports_streaming"));
|
|
|
|
TRY_RESULT(supports_streaming, object.get_optional_bool_field("supports_streaming"));
|
|
|
|
@ -11764,7 +11770,7 @@ td::Result<td_api::object_ptr<td_api::inputMessageInvoice>> Client::get_input_me
|
|
|
|
std::move(paid_media_caption));
|
|
|
|
std::move(paid_media_caption));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
td::Result<td::vector<td_api::object_ptr<td_api::formattedText>>> Client::get_poll_options(const Query *query) {
|
|
|
|
td::Result<td::vector<td_api::object_ptr<td_api::inputPollOption>>> Client::get_input_poll_options(const Query *query) {
|
|
|
|
auto input_options = query->arg("options");
|
|
|
|
auto input_options = query->arg("options");
|
|
|
|
LOG(INFO) << "Parsing JSON object: " << input_options;
|
|
|
|
LOG(INFO) << "Parsing JSON object: " << input_options;
|
|
|
|
auto r_value = json_decode(input_options);
|
|
|
|
auto r_value = json_decode(input_options);
|
|
|
|
@ -11778,7 +11784,7 @@ td::Result<td::vector<td_api::object_ptr<td_api::formattedText>>> Client::get_po
|
|
|
|
return td::Status::Error(400, "Expected an Array of String as options");
|
|
|
|
return td::Status::Error(400, "Expected an Array of String as options");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
td::vector<object_ptr<td_api::formattedText>> options;
|
|
|
|
td::vector<object_ptr<td_api::inputPollOption>> options;
|
|
|
|
for (auto &input_option : value.get_array()) {
|
|
|
|
for (auto &input_option : value.get_array()) {
|
|
|
|
if (input_option.type() != td::JsonValue::Type::String) {
|
|
|
|
if (input_option.type() != td::JsonValue::Type::String) {
|
|
|
|
if (input_option.type() == td::JsonValue::Type::Object) {
|
|
|
|
if (input_option.type() == td::JsonValue::Type::Object) {
|
|
|
|
@ -11787,13 +11793,14 @@ td::Result<td::vector<td_api::object_ptr<td_api::formattedText>>> Client::get_po
|
|
|
|
TRY_RESULT(parse_mode, object.get_optional_string_field("text_parse_mode"));
|
|
|
|
TRY_RESULT(parse_mode, object.get_optional_string_field("text_parse_mode"));
|
|
|
|
TRY_RESULT(option_text,
|
|
|
|
TRY_RESULT(option_text,
|
|
|
|
get_formatted_text(std::move(text), std::move(parse_mode), object.extract_field("text_entities")));
|
|
|
|
get_formatted_text(std::move(text), std::move(parse_mode), object.extract_field("text_entities")));
|
|
|
|
options.push_back(std::move(option_text));
|
|
|
|
options.push_back(make_object<td_api::inputPollOption>(std::move(option_text)));
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return td::Status::Error(400, "Expected an option to be of type String");
|
|
|
|
return td::Status::Error(400, "Expected an option to be of type String");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
options.push_back(make_object<td_api::formattedText>(input_option.get_string().str(), td::Auto()));
|
|
|
|
options.push_back(make_object<td_api::inputPollOption>(
|
|
|
|
|
|
|
|
make_object<td_api::formattedText>(input_option.get_string().str(), td::Auto())));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return std::move(options);
|
|
|
|
return std::move(options);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -12613,8 +12620,8 @@ td::Status Client::process_send_photo_query(PromisedQueryPtr &query) {
|
|
|
|
auto show_caption_above_media = to_bool(query->arg("show_caption_above_media"));
|
|
|
|
auto show_caption_above_media = to_bool(query->arg("show_caption_above_media"));
|
|
|
|
auto has_spoiler = to_bool(query->arg("has_spoiler"));
|
|
|
|
auto has_spoiler = to_bool(query->arg("has_spoiler"));
|
|
|
|
do_send_message(
|
|
|
|
do_send_message(
|
|
|
|
make_object<td_api::inputMessagePhoto>(std::move(photo), nullptr, td::vector<int32>(), 0, 0, std::move(caption),
|
|
|
|
make_object<td_api::inputMessagePhoto>(std::move(photo), nullptr, nullptr, td::vector<int32>(), 0, 0,
|
|
|
|
show_caption_above_media, nullptr, has_spoiler),
|
|
|
|
std::move(caption), show_caption_above_media, nullptr, has_spoiler),
|
|
|
|
std::move(query));
|
|
|
|
std::move(query));
|
|
|
|
return td::Status::OK();
|
|
|
|
return td::Status::OK();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -12760,30 +12767,32 @@ td::Status Client::process_send_contact_query(PromisedQueryPtr &query) {
|
|
|
|
td::Status Client::process_send_poll_query(PromisedQueryPtr &query) {
|
|
|
|
td::Status Client::process_send_poll_query(PromisedQueryPtr &query) {
|
|
|
|
TRY_RESULT(question, get_formatted_text(query->arg("question").str(), query->arg("question_parse_mode").str(),
|
|
|
|
TRY_RESULT(question, get_formatted_text(query->arg("question").str(), query->arg("question_parse_mode").str(),
|
|
|
|
get_input_entities(query.get(), "question_entities")));
|
|
|
|
get_input_entities(query.get(), "question_entities")));
|
|
|
|
TRY_RESULT(options, get_poll_options(query.get()));
|
|
|
|
TRY_RESULT(options, get_input_poll_options(query.get()));
|
|
|
|
bool is_anonymous = true;
|
|
|
|
bool is_anonymous = true;
|
|
|
|
if (query->has_arg("is_anonymous")) {
|
|
|
|
if (query->has_arg("is_anonymous")) {
|
|
|
|
is_anonymous = to_bool(query->arg("is_anonymous"));
|
|
|
|
is_anonymous = to_bool(query->arg("is_anonymous"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
object_ptr<td_api::PollType> poll_type;
|
|
|
|
auto allows_multiple_answers = to_bool(query->arg("allows_multiple_answers"));
|
|
|
|
|
|
|
|
object_ptr<td_api::InputPollType> poll_type;
|
|
|
|
auto type = query->arg("type");
|
|
|
|
auto type = query->arg("type");
|
|
|
|
if (type == "quiz") {
|
|
|
|
if (type == "quiz") {
|
|
|
|
TRY_RESULT(explanation,
|
|
|
|
TRY_RESULT(explanation,
|
|
|
|
get_formatted_text(query->arg("explanation").str(), query->arg("explanation_parse_mode").str(),
|
|
|
|
get_formatted_text(query->arg("explanation").str(), query->arg("explanation_parse_mode").str(),
|
|
|
|
get_input_entities(query.get(), "explanation_entities")));
|
|
|
|
get_input_entities(query.get(), "explanation_entities")));
|
|
|
|
|
|
|
|
|
|
|
|
poll_type = make_object<td_api::pollTypeQuiz>(get_integer_arg(query.get(), "correct_option_id", -1),
|
|
|
|
poll_type = make_object<td_api::inputPollTypeQuiz>(
|
|
|
|
std::move(explanation));
|
|
|
|
td::vector<int32>{get_integer_arg(query.get(), "correct_option_id", -1)}, std::move(explanation));
|
|
|
|
} else if (type.empty() || type == "regular") {
|
|
|
|
} else if (type.empty() || type == "regular") {
|
|
|
|
poll_type = make_object<td_api::pollTypeRegular>(to_bool(query->arg("allows_multiple_answers")));
|
|
|
|
poll_type = make_object<td_api::inputPollTypeRegular>(false);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return td::Status::Error(400, "Unsupported poll type specified");
|
|
|
|
return td::Status::Error(400, "Unsupported poll type specified");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int32 open_period = get_integer_arg(query.get(), "open_period", 0, 0, 10 * 60);
|
|
|
|
int32 open_period = get_integer_arg(query.get(), "open_period", 0, 0, 10 * 60);
|
|
|
|
int32 close_date = get_integer_arg(query.get(), "close_date", 0);
|
|
|
|
int32 close_date = get_integer_arg(query.get(), "close_date", 0);
|
|
|
|
auto is_closed = to_bool(query->arg("is_closed"));
|
|
|
|
auto is_closed = to_bool(query->arg("is_closed"));
|
|
|
|
do_send_message(make_object<td_api::inputMessagePoll>(std::move(question), std::move(options), is_anonymous,
|
|
|
|
do_send_message(make_object<td_api::inputMessagePoll>(std::move(question), std::move(options), nullptr, is_anonymous,
|
|
|
|
|
|
|
|
allows_multiple_answers, type != "quiz", false, false,
|
|
|
|
std::move(poll_type), open_period, close_date, is_closed),
|
|
|
|
std::move(poll_type), open_period, close_date, is_closed),
|
|
|
|
std::move(query));
|
|
|
|
std::move(query));
|
|
|
|
return td::Status::OK();
|
|
|
|
return td::Status::OK();
|
|
|
|
@ -16771,6 +16780,8 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
|
|
|
|
case td_api::messageSuggestedPostDeclined::ID:
|
|
|
|
case td_api::messageSuggestedPostDeclined::ID:
|
|
|
|
case td_api::messageSuggestedPostPaid::ID:
|
|
|
|
case td_api::messageSuggestedPostPaid::ID:
|
|
|
|
case td_api::messageSuggestedPostRefunded::ID:
|
|
|
|
case td_api::messageSuggestedPostRefunded::ID:
|
|
|
|
|
|
|
|
case td_api::messagePollOptionAdded::ID:
|
|
|
|
|
|
|
|
case td_api::messagePollOptionDeleted::ID:
|
|
|
|
// don't skip
|
|
|
|
// don't skip
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
@ -16873,6 +16884,9 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
|
|
|
|
case td_api::messageUpgradedGiftPurchaseOfferRejected::ID:
|
|
|
|
case td_api::messageUpgradedGiftPurchaseOfferRejected::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentToggled::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentToggled::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentDisableRequested::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentDisableRequested::ID:
|
|
|
|
|
|
|
|
case td_api::messagePollOptionAdded::ID:
|
|
|
|
|
|
|
|
case td_api::messagePollOptionDeleted::ID:
|
|
|
|
|
|
|
|
case td_api::messageManagedBotCreated::ID:
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
@ -16962,6 +16976,10 @@ td::int64 Client::get_same_chat_reply_to_message_id(const object_ptr<td_api::mes
|
|
|
|
case td_api::messageChatHasProtectedContentToggled::ID:
|
|
|
|
case td_api::messageChatHasProtectedContentToggled::ID:
|
|
|
|
return static_cast<const td_api::messageChatHasProtectedContentToggled *>(message->content_.get())
|
|
|
|
return static_cast<const td_api::messageChatHasProtectedContentToggled *>(message->content_.get())
|
|
|
|
->request_message_id_;
|
|
|
|
->request_message_id_;
|
|
|
|
|
|
|
|
case td_api::messagePollOptionAdded::ID:
|
|
|
|
|
|
|
|
return static_cast<const td_api::messagePollOptionAdded *>(message->content_.get())->poll_message_id_;
|
|
|
|
|
|
|
|
case td_api::messagePollOptionDeleted::ID:
|
|
|
|
|
|
|
|
return static_cast<const td_api::messagePollOptionDeleted *>(message->content_.get())->poll_message_id_;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
return static_cast<int64>(0);
|
|
|
|
return static_cast<int64>(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -17468,7 +17486,10 @@ void Client::init_message(MessageInfo *message_info, object_ptr<td_api::message>
|
|
|
|
message_info->topic_id = std::move(message->topic_id_);
|
|
|
|
message_info->topic_id = std::move(message->topic_id_);
|
|
|
|
message_info->author_signature = std::move(message->author_signature_);
|
|
|
|
message_info->author_signature = std::move(message->author_signature_);
|
|
|
|
message_info->sender_boost_count = message->sender_boost_count_;
|
|
|
|
message_info->sender_boost_count = message->sender_boost_count_;
|
|
|
|
|
|
|
|
if (message_info->sender_tag != message->sender_tag_) {
|
|
|
|
message_info->sender_tag = std::move(message->sender_tag_);
|
|
|
|
message_info->sender_tag = std::move(message->sender_tag_);
|
|
|
|
|
|
|
|
message_info->is_content_changed = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
message_info->paid_message_star_count = message->paid_message_star_count_;
|
|
|
|
message_info->paid_message_star_count = message->paid_message_star_count_;
|
|
|
|
message_info->effect_id = message->effect_id_;
|
|
|
|
message_info->effect_id = message->effect_id_;
|
|
|
|
message_info->is_paid_post = message->is_paid_star_suggested_post_ || message->is_paid_ton_suggested_post_;
|
|
|
|
message_info->is_paid_post = message->is_paid_star_suggested_post_ || message->is_paid_ton_suggested_post_;
|
|
|
|
|