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

View File

@ -1877,7 +1877,9 @@ Status DialogManager::can_pin_messages(DialogId dialog_id) const {
} }
bool DialogManager::can_use_premium_custom_emoji_in_dialog(DialogId dialog_id) const { bool DialogManager::can_use_premium_custom_emoji_in_dialog(DialogId dialog_id) const {
if (!td_->auth_manager_->is_bot()) { if (td_->auth_manager_->is_bot()) {
return true;
}
if (dialog_id == get_my_dialog_id() || td_->option_manager_->get_option_boolean("is_premium")) { if (dialog_id == get_my_dialog_id() || td_->option_manager_->get_option_boolean("is_premium")) {
return true; return true;
} }
@ -1887,9 +1889,6 @@ bool DialogManager::can_use_premium_custom_emoji_in_dialog(DialogId dialog_id) c
} }
return false; return false;
} }
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);
}
bool DialogManager::is_dialog_removed_from_dialog_list(DialogId dialog_id) const { bool DialogManager::is_dialog_removed_from_dialog_list(DialogId dialog_id) const {
switch (dialog_id.get_type()) { switch (dialog_id.get_type()) {

View File

@ -2893,7 +2893,7 @@ static Result<InputMessageContent> create_input_message_content(
if (!story_id.is_server()) { if (!story_id.is_server()) {
return Status::Error(400, "Story can't be forwarded"); 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"); return Status::Error(400, "Can't access the story");
} }
content = make_unique<MessageStory>(story_full_id, false); content = make_unique<MessageStory>(story_full_id, false);