diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index ba112e3aa9..adff240df0 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -1661,6 +1661,9 @@ void ApiWrap::requestSelfParticipant(not_null channel) { } const auto finalize = [=](UserId inviter, TimeId inviteDate) { + if (inviter < 0) { + channel->markForbidden(); + } channel->inviter = inviter; channel->inviteDate = inviteDate; if (const auto history = _session->data().historyLoaded(channel)) { diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index 438c0382a5..23192a7861 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -267,6 +267,17 @@ void ChannelData::applyEditBanned(not_null user, const MTPChatBannedR Notify::peerUpdatedDelayed(this, flags); } +void ChannelData::markForbidden() { + owner().processChat(MTP_channelForbidden( + MTP_flags(isMegagroup() + ? MTPDchannelForbidden::Flag::f_megagroup + : MTPDchannelForbidden::Flag::f_broadcast), + MTP_int(bareId()), + MTP_long(access), + MTP_string(name), + MTPint())); +} + bool ChannelData::isGroupAdmin(not_null user) const { if (auto info = mgInfo.get()) { return info->admins.contains(peerToUser(user->id)); diff --git a/Telegram/SourceFiles/data/data_channel.h b/Telegram/SourceFiles/data/data_channel.h index def708ad4f..452b96a115 100644 --- a/Telegram/SourceFiles/data/data_channel.h +++ b/Telegram/SourceFiles/data/data_channel.h @@ -180,6 +180,8 @@ public: const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights); + void markForbidden(); + bool isGroupAdmin(not_null user) const; bool lastParticipantsCountOutdated() const { diff --git a/Telegram/SourceFiles/history/history.cpp b/Telegram/SourceFiles/history/history.cpp index 6fbfb14d51..fab66f5f4d 100644 --- a/Telegram/SourceFiles/history/history.cpp +++ b/Telegram/SourceFiles/history/history.cpp @@ -2454,7 +2454,7 @@ void History::dialogEntryApplied() { if (!chatListMessage()) { if (const auto channel = peer->asChannel()) { const auto inviter = channel->inviter; - if (inviter != 0 && channel->amIn()) { + if (inviter > 0 && channel->amIn()) { if (const auto from = owner().userLoaded(inviter)) { clear(ClearType::Unload); addNewerSlice(QVector());