diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 845ad845d..c80c3e977 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -15737,8 +15737,7 @@ void ContactsManager::on_chat_update(telegram_api::chat &chat, const char *sourc c->need_save_to_database = true; } on_update_chat_status(c, chat_id, std::move(status)); - on_update_chat_default_permissions(c, chat_id, get_restricted_rights(std::move(chat.default_banned_rights_)), - chat.version_); + on_update_chat_default_permissions(c, chat_id, RestrictedRights(chat.default_banned_rights_), chat.version_); on_update_chat_photo(c, chat_id, std::move(chat.photo_)); on_update_chat_active(c, chat_id, is_active); on_update_chat_noforwards(c, chat_id, chat.noforwards_); @@ -15874,8 +15873,7 @@ void ContactsManager::on_chat_update(telegram_api::channel &channel, const char on_update_channel_title(c, channel_id, std::move(channel.title_)); on_update_channel_username(c, channel_id, std::move(channel.username_)); on_update_channel_photo(c, channel_id, std::move(channel.photo_)); - on_update_channel_default_permissions(c, channel_id, - get_restricted_rights(std::move(channel.default_banned_rights_))); + on_update_channel_default_permissions(c, channel_id, RestrictedRights(channel.default_banned_rights_)); on_update_channel_has_location(c, channel_id, channel.has_geo_); on_update_channel_noforwards(c, channel_id, channel.noforwards_); @@ -15941,8 +15939,7 @@ void ContactsManager::on_chat_update(telegram_api::channel &channel, const char on_update_channel_photo(c, channel_id, std::move(channel.photo_)); on_update_channel_status(c, channel_id, std::move(status)); on_update_channel_username(c, channel_id, std::move(channel.username_)); // uses status, must be called after - on_update_channel_default_permissions(c, channel_id, - get_restricted_rights(std::move(channel.default_banned_rights_))); + on_update_channel_default_permissions(c, channel_id, RestrictedRights(channel.default_banned_rights_)); on_update_channel_has_location(c, channel_id, channel.has_geo_); on_update_channel_noforwards(c, channel_id, channel.noforwards_); @@ -16035,7 +16032,7 @@ void ContactsManager::on_chat_update(telegram_api::channelForbidden &channel, co on_update_channel_status(c, channel_id, DialogParticipantStatus::Banned(unban_date)); // on_update_channel_username(c, channel_id, ""); // don't know if channel username is empty, so don't update it tl_object_ptr banned_rights; // == nullptr - on_update_channel_default_permissions(c, channel_id, get_restricted_rights(std::move(banned_rights))); + on_update_channel_default_permissions(c, channel_id, RestrictedRights(banned_rights)); // on_update_channel_has_location(c, channel_id, false); on_update_channel_noforwards(c, channel_id, false); td_->messages_manager_->on_update_dialog_group_call(DialogId(channel_id), false, false, "receive channelForbidden"); diff --git a/td/telegram/DialogEventLog.cpp b/td/telegram/DialogEventLog.cpp index 76bfd6491..1b6773f91 100644 --- a/td/telegram/DialogEventLog.cpp +++ b/td/telegram/DialogEventLog.cpp @@ -136,8 +136,8 @@ static td_api::object_ptr get_chat_event_action_object( } case telegram_api::channelAdminLogEventActionDefaultBannedRights::ID: { auto action = move_tl_object_as(action_ptr); - auto old_permissions = get_restricted_rights(std::move(action->prev_banned_rights_)); - auto new_permissions = get_restricted_rights(std::move(action->new_banned_rights_)); + auto old_permissions = RestrictedRights(action->prev_banned_rights_); + auto new_permissions = RestrictedRights(action->new_banned_rights_); return td_api::make_object(old_permissions.get_chat_permissions_object(), new_permissions.get_chat_permissions_object()); } diff --git a/td/telegram/DialogParticipant.cpp b/td/telegram/DialogParticipant.cpp index a8091c436..9b990e8bd 100644 --- a/td/telegram/DialogParticipant.cpp +++ b/td/telegram/DialogParticipant.cpp @@ -157,6 +157,40 @@ StringBuilder &operator<<(StringBuilder &string_builder, const AdministratorRigh return string_builder; } +RestrictedRights::RestrictedRights(const tl_object_ptr &rights) { + if (rights == nullptr) { + flags_ = 0; + return; + } + if (rights->view_messages_) { + LOG(ERROR) << "Can't view messages in banned rights " << to_string(rights); + } + LOG_IF(ERROR, rights->until_date_ != std::numeric_limits::max()) + << "Have until date " << rights->until_date_ << " in restricted rights"; + + *this = RestrictedRights(!rights->send_messages_, !rights->send_media_, !rights->send_stickers_, + !rights->send_gifs_, !rights->send_games_, !rights->send_inline_, + !rights->embed_links_, !rights->send_polls_, !rights->change_info_, + !rights->invite_users_, !rights->pin_messages_); +} + +RestrictedRights::RestrictedRights(const td_api::object_ptr &rights) { + if (rights == nullptr) { + flags_ = 0; + return; + } + + bool can_send_polls = rights->can_send_polls_; + bool can_send_media = rights->can_send_media_messages_; + bool can_send_messages = rights->can_send_messages_ || can_send_media || can_send_polls || + rights->can_send_other_messages_ || rights->can_add_web_page_previews_; + *this = + RestrictedRights(can_send_messages, can_send_media, rights->can_send_other_messages_, + rights->can_send_other_messages_, rights->can_send_other_messages_, + rights->can_send_other_messages_, rights->can_add_web_page_previews_, can_send_polls, + rights->can_change_info_, rights->can_invite_users_, rights->can_pin_messages_); +} + RestrictedRights::RestrictedRights(bool can_send_messages, bool can_send_media, bool can_send_stickers, bool can_send_animations, bool can_send_games, bool can_use_inline_bots, bool can_add_web_page_previews, bool can_send_polls, @@ -370,8 +404,7 @@ DialogParticipantStatus::DialogParticipantStatus(bool is_member, auto until_date = fix_until_date(banned_rights->until_date_); banned_rights->until_date_ = std::numeric_limits::max(); - uint32 flags = - ::td::get_restricted_rights(std::move(banned_rights)).flags_ | (static_cast(is_member) * IS_MEMBER); + uint32 flags = RestrictedRights(banned_rights).flags_ | (static_cast(is_member) * IS_MEMBER); *this = DialogParticipantStatus(Type::Restricted, flags, until_date, string()); } @@ -551,7 +584,7 @@ DialogParticipantStatus get_dialog_participant_status(const tl_object_ptr(status.get()); - return DialogParticipantStatus::Restricted(::td::get_restricted_rights(st->permissions_), st->is_member_, + return DialogParticipantStatus::Restricted(RestrictedRights(st->permissions_), st->is_member_, st->restricted_until_date_); } case td_api::chatMemberStatusLeft::ID: @@ -566,38 +599,6 @@ DialogParticipantStatus get_dialog_participant_status(const tl_object_ptr &&banned_rights) { - if (banned_rights == nullptr) { - return RestrictedRights(false, false, false, false, false, false, false, false, false, false, false); - } - if (banned_rights->view_messages_) { - LOG(ERROR) << "Can't view messages in banned rights " << to_string(banned_rights); - } - LOG_IF(ERROR, banned_rights->until_date_ != std::numeric_limits::max()) - << "Have until date " << banned_rights->until_date_ << " in restricted rights"; - - return RestrictedRights(!banned_rights->send_messages_, !banned_rights->send_media_, !banned_rights->send_stickers_, - !banned_rights->send_gifs_, !banned_rights->send_games_, !banned_rights->send_inline_, - !banned_rights->embed_links_, !banned_rights->send_polls_, !banned_rights->change_info_, - !banned_rights->invite_users_, !banned_rights->pin_messages_); -} - -RestrictedRights get_restricted_rights(const td_api::object_ptr &permissions) { - if (permissions == nullptr) { - return RestrictedRights(false, false, false, false, false, false, false, false, false, false, false); - } - - bool can_send_polls = permissions->can_send_polls_; - bool can_send_media = permissions->can_send_media_messages_; - bool can_send_messages = permissions->can_send_messages_ || can_send_media || can_send_polls || - permissions->can_send_other_messages_ || permissions->can_add_web_page_previews_; - return RestrictedRights(can_send_messages, can_send_media, permissions->can_send_other_messages_, - permissions->can_send_other_messages_, permissions->can_send_other_messages_, - permissions->can_send_other_messages_, permissions->can_add_web_page_previews_, - can_send_polls, permissions->can_change_info_, permissions->can_invite_users_, - permissions->can_pin_messages_); -} - DialogParticipant::DialogParticipant(DialogId dialog_id, UserId inviter_user_id, int32 joined_date, DialogParticipantStatus status) : dialog_id_(dialog_id), inviter_user_id_(inviter_user_id), joined_date_(joined_date), status_(std::move(status)) { diff --git a/td/telegram/DialogParticipant.h b/td/telegram/DialogParticipant.h index 37ac4e758..4086385a4 100644 --- a/td/telegram/DialogParticipant.h +++ b/td/telegram/DialogParticipant.h @@ -161,6 +161,10 @@ class RestrictedRights { } public: + explicit RestrictedRights(const tl_object_ptr &rights); + + explicit RestrictedRights(const td_api::object_ptr &rights); + RestrictedRights(bool can_send_messages, bool can_send_media, bool can_send_stickers, bool can_send_animations, bool can_send_games, bool can_use_inline_bots, bool can_add_web_page_previews, bool can_send_polls, bool can_change_info_and_settings, bool can_invite_users, bool can_pin_messages); @@ -550,8 +554,4 @@ struct DialogParticipants { DialogParticipantStatus get_dialog_participant_status(const tl_object_ptr &status); -RestrictedRights get_restricted_rights(tl_object_ptr &&banned_rights); - -RestrictedRights get_restricted_rights(const td_api::object_ptr &permissions); - } // namespace td diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 991fd34a4..0860f1158 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -33790,7 +33790,7 @@ void MessagesManager::set_dialog_permissions(DialogId dialog_id, UNREACHABLE(); } - auto new_permissions = get_restricted_rights(permissions); + RestrictedRights new_permissions(permissions); // TODO this can be wrong if there were previous change permissions requests if (get_dialog_default_permissions(dialog_id) == new_permissions) { diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index c169ebd33..f2a7d8cdb 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -2986,7 +2986,7 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { DialogId dialog_id(update->peer_); - RestrictedRights permissions = get_restricted_rights(std::move(update->default_banned_rights_)); + RestrictedRights permissions(update->default_banned_rights_); auto version = update->version_; switch (dialog_id.get_type()) { case DialogType::Chat: