diff -ur a/Telegram/SourceFiles/history/view/history_view_reply.cpp b/Telegram/SourceFiles/history/view/history_view_reply.cpp
--- a/Telegram/SourceFiles/history/view/history_view_reply.cpp	2023-11-07 08:54:22.057455500 +0600
+++ b/Telegram/SourceFiles/history/view/history_view_reply.cpp	2023-11-09 19:43:28.914523641 +0600
@@ -592,9 +592,12 @@
 				+ std::min(_text.maxWidth(), st::maxSignatureSize)),
 			st::normalFont->height);
 	_maxWidth = std::max(nameMaxWidth, optimalTextSize.width());
-	if (!data->displaying()) {
+	auto blocked = message
+		&& message->from()->isUser()
+		&& message->from()->asUser()->isBlocked();
+	if (!data->displaying() || blocked) {
 		const auto unavailable = data->unavailable();
-		_stateText = ((fields.messageId || fields.storyId) && !unavailable)
+		_stateText = (((fields.messageId && (!blocked)) || fields.storyId) && !unavailable)
 			? tr::lng_profile_loading(tr::now)
 			: fields.storyId
 			? tr::lng_deleted_story(tr::now)
@@ -783,12 +786,15 @@
 		+ st::historyReplyPadding.top()
 		+ (st::msgServiceNameFont->height * (_nameTwoLines ? 2 : 1));
 	if (w > st::historyReplyPadding.left()) {
-		if (_displaying) {
+		const auto data = view->data()->Get<HistoryMessageReply>();
+		const auto message = data
+			? data->resolvedMessage.get()
+			: nullptr;
+		auto blocked = message
+			&& message->from()->isUser()
+			&& message->from()->asUser()->isBlocked();
+		if (_displaying && (!blocked)) {
 			if (hasPreview) {
-				const auto data = view->data()->Get<HistoryMessageReply>();
-				const auto message = data
-					? data->resolvedMessage.get()
-					: nullptr;
 				const auto media = message ? message->media() : nullptr;
 				const auto image = media
 					? media->replyPreview()
diff -ur a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp
--- a/Telegram/SourceFiles/history/history_widget.cpp	2023-11-01 02:41:23.623049094 +0600
+++ b/Telegram/SourceFiles/history/history_widget.cpp	2023-11-01 02:51:20.558082883 +0600
@@ -947,6 +947,21 @@
 		}
 	}, lifetime());
 
+	session().changes().peerUpdates(
+		Data::PeerUpdate::Flag::IsBlocked
+	) | rpl::on_next([=] {
+		crl::on_main(this, [=] {
+			if (_history) {
+				_history->forceFullResize();
+				if (_migrated) {
+					_migrated->forceFullResize();
+				}
+				updateHistoryGeometry();
+				update();
+			}
+		});
+	}, lifetime());
+
 	_topBar->membersShowAreaActive(
 	) | rpl::on_next([=](bool active) {
 		setMembersShowAreaActive(active);
diff -ur a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp
--- a/Telegram/SourceFiles/history/view/history_view_element.cpp	2023-11-01 02:41:23.626382456 +0600
+++ b/Telegram/SourceFiles/history/view/history_view_element.cpp	2023-11-01 02:52:47.375481677 +0600
@@ -1006,6 +1006,10 @@
 }
 
 bool Element::isHidden() const {
+	if (data()->from()->isUser()
+		&& data()->from()->asUser()->isBlocked()) {
+		return true;
+	}
 	return isHiddenByGroup();
 }
 
diff -ur a/Telegram/SourceFiles/main/main_session.cpp b/Telegram/SourceFiles/main/main_session.cpp
--- a/Telegram/SourceFiles/main/main_session.cpp	2023-11-01 02:41:23.646382625 +0600
+++ b/Telegram/SourceFiles/main/main_session.cpp	2023-11-01 02:56:34.480730048 +0600
@@ -11,6 +11,7 @@
 #include "api/api_updates.h"
 #include "api/api_send_progress.h"
 #include "api/api_user_privacy.h"
+#include "api/api_blocked_peers.h"
 #include "main/main_account.h"
 #include "main/main_domain.h"
 #include "main/main_session_settings.h"
@@ -87,6 +88,43 @@
 	return MTP::ConfigFields().internalLinksDomain;
 }
 
+void InitializeBlockedPeers(not_null<Main::Session*> session) {
+       const auto offset = std::make_shared<int>(0);
+       const auto allLoaded = std::make_shared<bool>(false);
+       const auto applySlice = [=](
+                       const Api::BlockedPeers::Slice &slice,
+                       auto self) -> void {
+               if (slice.list.empty()) {
+                       *allLoaded = true;
+               }
+
+               *offset += slice.list.size();
+               for (const auto &item : slice.list) {
+                       if (const auto peer = session->data().peerLoaded(item.id)) {
+                               peer->setIsBlocked(true);
+                       }
+               }
+               if (*offset >= slice.total) {
+                       *allLoaded = true;
+               }
+
+               if (!*allLoaded) {
+                       session->api().blockedPeers().request(
+                               *offset,
+                               [=](const Api::BlockedPeers::Slice &slice) {
+                                       self(slice, self);
+                               });
+               }
+       };
+
+       session->api().blockedPeers().slice(
+       ) | rpl::take(
+               1
+       ) | rpl::on_next([=](const Api::BlockedPeers::Slice &result) {
+               applySlice(result, applySlice);
+       }, session->lifetime());
+}
+
 } // namespace
 
 Session::Session(
@@ -198,6 +236,7 @@
 	_api->requestNotifySettings(MTP_inputNotifyChats());
 	_api->requestNotifySettings(MTP_inputNotifyBroadcasts());
 
+	InitializeBlockedPeers(this);
 	Core::App().downloadManager().trackSession(this);
 }
 

