Improve custom emoji checks and business messages processing.

This commit is contained in:
levlam 2024-03-29 15:52:03 +03:00
parent b741472942
commit 25f87a39ac
4 changed files with 16 additions and 19 deletions

View File

@ -652,14 +652,14 @@ MessageInputReplyTo BusinessConnectionManager::create_business_message_input_rep
}
Result<InputMessageContent> BusinessConnectionManager::process_input_message_content(
DialogId dialog_id, td_api::object_ptr<td_api::InputMessageContent> &&input_message_content) {
td_api::object_ptr<td_api::InputMessageContent> &&input_message_content) {
if (input_message_content == nullptr) {
return Status::Error(400, "Can't send message without content");
}
if (input_message_content->get_id() == td_api::inputMessageForwarded::ID) {
return Status::Error(400, "Can't forward messages as business");
}
return get_input_message_content(dialog_id, std::move(input_message_content), td_, true);
return get_input_message_content(DialogId(), std::move(input_message_content), td_, true);
}
unique_ptr<BusinessConnectionManager::PendingMessage> BusinessConnectionManager::create_business_message_to_send(
@ -691,8 +691,7 @@ void BusinessConnectionManager::send_message(BusinessConnectionId business_conne
td_api::object_ptr<td_api::InputMessageContent> &&input_message_content,
Promise<td_api::object_ptr<td_api::businessMessage>> &&promise) {
TRY_STATUS_PROMISE(promise, check_business_connection(business_connection_id, dialog_id));
TRY_RESULT_PROMISE(promise, input_content,
process_input_message_content(dialog_id, std::move(input_message_content)));
TRY_RESULT_PROMISE(promise, input_content, process_input_message_content(std::move(input_message_content)));
auto input_reply_to = create_business_message_input_reply_to(std::move(reply_to));
TRY_RESULT_PROMISE(promise, message_reply_markup,
get_reply_markup(std::move(reply_markup), DialogType::User, true, false));
@ -993,8 +992,7 @@ void BusinessConnectionManager::send_message_album(
vector<InputMessageContent> message_contents;
std::unordered_set<MessageContentType, MessageContentTypeHash> message_content_types;
for (auto &input_message_content : input_message_contents) {
TRY_RESULT_PROMISE(promise, message_content,
process_input_message_content(dialog_id, std::move(input_message_content)));
TRY_RESULT_PROMISE(promise, message_content, process_input_message_content(std::move(input_message_content)));
auto message_content_type = message_content.content->get_type();
if (!is_allowed_media_group_content(message_content_type)) {
return promise.set_error(Status::Error(400, "Invalid message content type"));

View File

@ -111,7 +111,7 @@ class BusinessConnectionManager final : public Actor {
td_api::object_ptr<td_api::InputMessageReplyTo> &&reply_to);
Result<InputMessageContent> process_input_message_content(
DialogId dialog_id, td_api::object_ptr<td_api::InputMessageContent> &&input_message_content);
td_api::object_ptr<td_api::InputMessageContent> &&input_message_content);
unique_ptr<PendingMessage> create_business_message_to_send(BusinessConnectionId business_connection_id,
DialogId dialog_id, MessageInputReplyTo &&input_reply_to,

View File

@ -1877,18 +1877,17 @@ Status DialogManager::can_pin_messages(DialogId dialog_id) const {
}
bool DialogManager::can_use_premium_custom_emoji_in_dialog(DialogId dialog_id) const {
if (!td_->auth_manager_->is_bot()) {
if (dialog_id == get_my_dialog_id() || td_->option_manager_->get_option_boolean("is_premium")) {
return true;
}
if (dialog_id.get_type() == DialogType::Channel &&
td_->contacts_manager_->can_use_premium_custom_emoji_in_channel(dialog_id.get_channel_id())) {
return true;
}
return false;
if (td_->auth_manager_->is_bot()) {
return true;
}
auto user_id = td_->contacts_manager_->get_my_id();
return !td_->contacts_manager_->have_user(user_id) || td_->contacts_manager_->has_user_fragment_username(user_id);
if (dialog_id == get_my_dialog_id() || td_->option_manager_->get_option_boolean("is_premium")) {
return true;
}
if (dialog_id.get_type() == DialogType::Channel &&
td_->contacts_manager_->can_use_premium_custom_emoji_in_channel(dialog_id.get_channel_id())) {
return true;
}
return false;
}
bool DialogManager::is_dialog_removed_from_dialog_list(DialogId dialog_id) const {

View File

@ -2893,7 +2893,7 @@ static Result<InputMessageContent> create_input_message_content(
if (!story_id.is_server()) {
return Status::Error(400, "Story can't be forwarded");
}
if (td->dialog_manager_->get_input_peer(dialog_id, AccessRights::Read) == nullptr) {
if (td->dialog_manager_->get_input_peer(story_sender_dialog_id, AccessRights::Read) == nullptr) {
return Status::Error(400, "Can't access the story");
}
content = make_unique<MessageStory>(story_full_id, false);