Show custom ranks, allow toggling on.

This commit is contained in:
John Preston
2026-02-10 16:39:56 +04:00
parent 62d32a1bdf
commit 7969795a01
18 changed files with 270 additions and 50 deletions
+37 -1
View File
@@ -67,6 +67,10 @@ bool ChatData::allowsForwarding() const {
return !(flags() & Flag::NoForwards);
}
bool ChatData::customRanksEnabled() const {
return flags() & Flag::CustomRanksEnabled;
}
bool ChatData::canEditInformation() const {
return amIn() && !amRestricted(ChatRestriction::ChangeInfo);
}
@@ -437,6 +441,25 @@ void ApplyChatUpdate(
session->changes().peerUpdated(chat, UpdateFlag::Admins);
}
void ApplyChatUpdate(
not_null<ChatData*> chat,
const MTPDupdateChatParticipantRank &update) {
if (chat->applyUpdateVersion(update.vversion().v)
!= ChatData::UpdateStatus::Good) {
return;
}
const auto rank = qs(update.vrank().v);
const auto userId = UserId(update.vuser_id().v);
if (rank.isEmpty()) {
chat->memberRanks.remove(userId);
} else {
chat->memberRanks[userId] = rank;
}
chat->session().changes().peerUpdated(
chat,
Data::PeerUpdate::Flag::Members);
}
void ApplyChatUpdate(
not_null<ChatData*> chat,
const MTPDupdateChatDefaultBannedRights &update) {
@@ -532,6 +555,7 @@ void ApplyChatUpdate(
chat->participants.clear();
chat->invitedByMe.clear();
chat->admins.clear();
chat->memberRanks.clear();
chat->setAdminRights(ChatAdminRights());
const auto selfUserId = session->userId();
for (const auto &participant : list) {
@@ -558,13 +582,25 @@ void ApplyChatUpdate(
participant.match([&](const MTPDchatParticipantCreator &data) {
chat->creator = userId;
const auto rank = qs(data.vrank().value_or_empty());
if (!rank.isEmpty()) {
chat->memberRanks[userId] = rank;
}
}, [&](const MTPDchatParticipantAdmin &data) {
chat->admins.emplace(user);
if (user->isSelf()) {
chat->setAdminRights(
chat->defaultAdminRights(user).flags);
}
}, [](const MTPDchatParticipant &) {
const auto rank = qs(data.vrank().value_or_empty());
if (!rank.isEmpty()) {
chat->memberRanks[userId] = rank;
}
}, [&](const MTPDchatParticipant &data) {
const auto rank = qs(data.vrank().value_or_empty());
if (!rank.isEmpty()) {
chat->memberRanks[userId] = rank;
}
});
}
if (chat->participants.empty()) {