diff --git a/Telegram/SourceFiles/api/api_premium.cpp b/Telegram/SourceFiles/api/api_premium.cpp index fc48c21c50..5119f3908c 100644 --- a/Telegram/SourceFiles/api/api_premium.cpp +++ b/Telegram/SourceFiles/api/api_premium.cpp @@ -424,7 +424,7 @@ void Premium::requestPremiumRequiredSlice() { constexpr auto hasPrem = Flag::HasRequirePremiumToWrite; constexpr auto hasStars = Flag::HasStarsPerMessage; user->setStarsPerMessage(stars); - user->setFlags((user->flags() & ~(me | hasPrem | hasStars)) + user->setFlags((user->flags() & ~me) | known | (requirePremium ? (me | hasPrem) : Flag()) | (stars ? hasStars : Flag())); diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index 708ada2682..50bb186787 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -1267,7 +1267,7 @@ void ApplyChannelUpdate( | Flag::CanViewCreditsRevenue | Flag::StargiftsAvailable | Flag::PaidMessagesAvailable - | Flag::HasStarsPerMessage + | (channel->starsPerMessage() ? Flag::HasStarsPerMessage : Flag()) | Flag::StarsPerMessageKnown; channel->setFlags((channel->flags() & ~mask) | (update.is_can_set_username() ? Flag::CanSetUsername : Flag()) diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 6ce89d88c3..ec2569bf55 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -545,6 +545,14 @@ not_null Session::processUser(const MTPUser &data) { const auto canShareThisContact = result->canShareThisContactFast(); + const auto hasRequirePremiumToWrite + = data.is_contact_require_premium(); + const auto hasStarsPerMessage + = data.vsend_paid_messages_stars().has_value(); + if (!hasStarsPerMessage) { + result->setStarsPerMessage(0); + } + using Flag = UserDataFlag; const auto flagsMask = Flag::Deleted | Flag::Verified @@ -556,19 +564,15 @@ not_null Session::processUser(const MTPUser &data) { | Flag::HasRequirePremiumToWrite | Flag::HasStarsPerMessage | Flag::MessageMoneyRestrictionsKnown + | (!hasRequirePremiumToWrite + ? Flag::RequiresPremiumToWrite + : Flag()) | (!minimal ? Flag::Contact | Flag::MutualContact | Flag::DiscardMinPhoto | Flag::StoriesHidden : Flag()); - const auto hasRequirePremiumToWrite - = data.is_contact_require_premium(); - const auto hasStarsPerMessage - = data.vsend_paid_messages_stars().has_value(); - if (!hasStarsPerMessage) { - result->setStarsPerMessage(0); - } const auto storiesState = minimal ? std::optional() : data.is_stories_unavailable() diff --git a/Telegram/SourceFiles/data/data_user.cpp b/Telegram/SourceFiles/data/data_user.cpp index 7d4f70a433..b3e979708c 100644 --- a/Telegram/SourceFiles/data/data_user.cpp +++ b/Telegram/SourceFiles/data/data_user.cpp @@ -719,7 +719,10 @@ void ApplyUserUpdate(not_null user, const MTPDuserFull &update) { | Flag::CanPinMessages | Flag::VoiceMessagesForbidden | Flag::ReadDatesPrivate - | Flag::HasStarsPerMessage + | (update.is_contact_require_premium() + ? Flag::HasRequirePremiumToWrite + : Flag()) + | (user->starsPerMessage() ? Flag::HasStarsPerMessage : Flag()) | Flag::MessageMoneyRestrictionsKnown | Flag::RequiresPremiumToWrite; user->setFlags((user->flags() & ~mask) @@ -736,7 +739,7 @@ void ApplyUserUpdate(not_null user, const MTPDuserFull &update) { | (user->starsPerMessage() ? Flag::HasStarsPerMessage : Flag()) | Flag::MessageMoneyRestrictionsKnown | (update.is_contact_require_premium() - ? Flag::RequiresPremiumToWrite + ? (Flag::RequiresPremiumToWrite | Flag::HasRequirePremiumToWrite) : Flag())); user->setIsBlocked(update.is_blocked()); user->setCallsStatus(update.is_phone_calls_private()