From 163bfbcc7a86f3faea373ae70aec9aa7b51b71eb Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 18 Mar 2022 16:07:14 +0300 Subject: [PATCH] Reuse AdministratorRights and RestrictedRights methods. --- td/telegram/DialogParticipant.cpp | 104 +++++------------------------- td/telegram/DialogParticipant.h | 10 +-- 2 files changed, 21 insertions(+), 93 deletions(-) diff --git a/td/telegram/DialogParticipant.cpp b/td/telegram/DialogParticipant.cpp index bea0a27a9..0679aef2c 100644 --- a/td/telegram/DialogParticipant.cpp +++ b/td/telegram/DialogParticipant.cpp @@ -101,17 +101,11 @@ DialogParticipantStatus DialogParticipantStatus::Administrator(bool is_anonymous bool can_delete_messages, bool can_invite_users, bool can_restrict_members, bool can_pin_messages, bool can_promote_members, bool can_manage_calls) { - uint32 flags = (static_cast(can_be_edited) * CAN_BE_EDITED) | - (static_cast(can_manage_dialog) * CAN_MANAGE_DIALOG) | - (static_cast(can_change_info) * CAN_CHANGE_INFO_AND_SETTINGS_ADMIN) | - (static_cast(can_post_messages) * CAN_POST_MESSAGES) | - (static_cast(can_edit_messages) * CAN_EDIT_MESSAGES) | - (static_cast(can_delete_messages) * CAN_DELETE_MESSAGES) | - (static_cast(can_invite_users) * CAN_INVITE_USERS_ADMIN) | - (static_cast(can_restrict_members) * CAN_RESTRICT_MEMBERS) | - (static_cast(can_pin_messages) * CAN_PIN_MESSAGES_ADMIN) | - (static_cast(can_promote_members) * CAN_PROMOTE_MEMBERS) | - (static_cast(can_manage_calls) * CAN_MANAGE_CALLS) | + uint32 flags = AdministratorRights(can_manage_dialog, can_change_info, can_post_messages, can_edit_messages, + can_delete_messages, can_invite_users, can_restrict_members, can_pin_messages, + can_promote_members, can_manage_calls) + .flags_ | + (static_cast(can_be_edited) * CAN_BE_EDITED) | (static_cast(is_anonymous) * IS_ANONYMOUS); if (flags == 0 || flags == CAN_BE_EDITED) { return Member(); @@ -128,17 +122,10 @@ DialogParticipantStatus DialogParticipantStatus::Restricted( bool is_member, int32 restricted_until_date, 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) { - uint32 flags = (static_cast(can_send_messages) * CAN_SEND_MESSAGES) | - (static_cast(can_send_media) * CAN_SEND_MEDIA) | - (static_cast(can_send_stickers) * CAN_SEND_STICKERS) | - (static_cast(can_send_animations) * CAN_SEND_ANIMATIONS) | - (static_cast(can_send_games) * CAN_SEND_GAMES) | - (static_cast(can_use_inline_bots) * CAN_USE_INLINE_BOTS) | - (static_cast(can_add_web_page_previews) * CAN_ADD_WEB_PAGE_PREVIEWS) | - (static_cast(can_send_polls) * CAN_SEND_POLLS) | - (static_cast(can_change_info_and_settings) * CAN_CHANGE_INFO_AND_SETTINGS_BANNED) | - (static_cast(can_invite_users) * CAN_INVITE_USERS_BANNED) | - (static_cast(can_pin_messages) * CAN_PIN_MESSAGES_BANNED) | + uint32 flags = RestrictedRights(can_send_messages, can_send_media, can_send_stickers, can_send_animations, + can_send_games, can_use_inline_bots, can_add_web_page_previews, can_send_polls, + can_change_info_and_settings, can_invite_users, can_pin_messages) + .flags_ | (static_cast(is_member) * IS_MEMBER); if (flags == (IS_MEMBER | ALL_PERMISSION_RIGHTS)) { return Member(); @@ -166,6 +153,10 @@ DialogParticipantStatus DialogParticipantStatus::ChannelAdministrator(bool is_cr } } +AdministratorRights DialogParticipantStatus::get_administrator_rights() const { + return AdministratorRights(flags_ & ALL_ADMINISTRATOR_RIGHTS); +} + RestrictedRights DialogParticipantStatus::get_restricted_rights() const { return RestrictedRights(can_send_messages(), can_send_media(), can_send_stickers(), can_send_animations(), can_send_games(), can_use_inline_bots(), can_add_web_page_previews(), can_send_polls(), @@ -360,37 +351,7 @@ StringBuilder &operator<<(StringBuilder &string_builder, const DialogParticipant } return string_builder; case DialogParticipantStatus::Type::Administrator: - string_builder << "Administrator: "; - if (status.can_manage_dialog()) { - string_builder << "(manage)"; - } - if (status.can_change_info_and_settings()) { - string_builder << "(change)"; - } - if (status.can_post_messages()) { - string_builder << "(post)"; - } - if (status.can_edit_messages()) { - string_builder << "(edit)"; - } - if (status.can_delete_messages()) { - string_builder << "(delete)"; - } - if (status.can_invite_users()) { - string_builder << "(invite)"; - } - if (status.can_restrict_members()) { - string_builder << "(restrict)"; - } - if (status.can_pin_messages()) { - string_builder << "(pin)"; - } - if (status.can_promote_members()) { - string_builder << "(promote)"; - } - if (status.can_manage_calls()) { - string_builder << "(voice chat)"; - } + string_builder << status.get_administrator_rights(); if (!status.rank_.empty()) { string_builder << " [" << status.rank_ << "]"; } @@ -401,7 +362,7 @@ StringBuilder &operator<<(StringBuilder &string_builder, const DialogParticipant case DialogParticipantStatus::Type::Member: return string_builder << "Member"; case DialogParticipantStatus::Type::Restricted: - string_builder << "Restricted "; + string_builder << status.get_restricted_rights(); if (status.until_date_ == 0) { string_builder << "forever "; } else { @@ -410,40 +371,7 @@ StringBuilder &operator<<(StringBuilder &string_builder, const DialogParticipant if (!status.is_member()) { string_builder << "non-"; } - string_builder << "member: "; - if (!status.can_send_messages()) { - string_builder << "(text)"; - } - if (!status.can_send_media()) { - string_builder << "(media)"; - } - if (!status.can_send_stickers()) { - string_builder << "(stickers)"; - } - if (!status.can_send_animations()) { - string_builder << "(animations)"; - } - if (!status.can_send_games()) { - string_builder << "(games)"; - } - if (!status.can_send_polls()) { - string_builder << "(polls)"; - } - if (!status.can_use_inline_bots()) { - string_builder << "(inline bots)"; - } - if (!status.can_add_web_page_previews()) { - string_builder << "(links)"; - } - if (!status.can_change_info_and_settings()) { - string_builder << "(change)"; - } - if (!status.can_invite_users()) { - string_builder << "(invite)"; - } - if (!status.can_pin_messages()) { - string_builder << "(pin)"; - } + string_builder << "member"; return string_builder; case DialogParticipantStatus::Type::Left: return string_builder << "Left"; diff --git a/td/telegram/DialogParticipant.h b/td/telegram/DialogParticipant.h index 4498c833f..9eb6a9cd0 100644 --- a/td/telegram/DialogParticipant.h +++ b/td/telegram/DialogParticipant.h @@ -34,15 +34,13 @@ class AdministratorRights { static constexpr uint32 CAN_MANAGE_CALLS = 1 << 9; static constexpr uint32 CAN_MANAGE_DIALOG = 1 << 10; - static constexpr uint32 ALL_ADMINISTRATOR_RIGHTS = CAN_CHANGE_INFO_AND_SETTINGS_ADMIN | CAN_POST_MESSAGES | - CAN_EDIT_MESSAGES | CAN_DELETE_MESSAGES | CAN_INVITE_USERS_ADMIN | - CAN_RESTRICT_MEMBERS | CAN_PIN_MESSAGES_ADMIN | - CAN_PROMOTE_MEMBERS | CAN_MANAGE_CALLS | CAN_MANAGE_DIALOG; - uint32 flags_; friend class DialogParticipantStatus; + explicit AdministratorRights(int32 flags) : flags_(flags) { + } + public: AdministratorRights(bool can_manage_dialog, bool can_change_info, bool can_post_messages, bool can_edit_messages, bool can_delete_messages, bool can_invite_users, bool can_restrict_members, bool can_pin_messages, @@ -293,6 +291,8 @@ class DialogParticipantStatus { // legacy rights static DialogParticipantStatus ChannelAdministrator(bool is_creator, bool is_megagroup); + AdministratorRights get_administrator_rights() const; + RestrictedRights get_restricted_rights() const; DialogParticipantStatus apply_restrictions(RestrictedRights default_restrictions, bool is_bot) const;