diff --git a/resources/langs/nheko_ar.ts b/resources/langs/nheko_ar.ts
index 0646418401afb27d525ad681c792c4f96cfe6d12..15f2c6364244336f3f150c199cf91865ed1432a2 100644
--- a/resources/langs/nheko_ar.ts
+++ b/resources/langs/nheko_ar.ts
@@ -218,17 +218,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -236,7 +236,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1335,7 +1335,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1579,7 +1579,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1589,7 +1589,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1900,7 +1900,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2114,12 +2114,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3155,7 +3161,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3248,12 +3254,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3335,13 +3341,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3371,7 +3377,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3764,7 +3776,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3844,13 +3856,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3876,7 +3888,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4224,7 +4236,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4289,7 +4301,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4328,7 +4340,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4537,7 +4549,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4577,7 +4589,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5486,7 +5498,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5555,7 +5567,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5563,7 +5575,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5603,10 +5615,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5666,19 +5686,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5688,7 +5720,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_ca.ts b/resources/langs/nheko_ca.ts
index 031c03c830ea80a5297513f941dadde27dd15f4f..0ed4895a233d601c27a8db282e767d9aeb1ac9cd 100644
--- a/resources/langs/nheko_ca.ts
+++ b/resources/langs/nheko_ca.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -237,7 +237,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4645,7 +4657,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts
index 715eb039b886b9c823c849c2341bdce49b568b35..070994d7e6baaa94b4dee5837f3a7ad41f065165 100644
--- a/resources/langs/nheko_cs.ts
+++ b/resources/langs/nheko_cs.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -238,7 +238,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1326,7 +1326,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1570,7 +1570,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1580,7 +1580,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1891,7 +1891,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2105,12 +2105,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3143,7 +3149,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3233,12 +3239,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3320,13 +3326,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3356,7 +3362,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3749,7 +3761,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3829,7 +3841,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3900,7 +3912,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3926,7 +3938,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4298,7 +4310,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4504,7 +4516,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4657,7 +4669,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5450,7 +5462,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5519,7 +5531,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5527,7 +5539,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5567,10 +5579,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5630,19 +5650,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5652,7 +5684,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts
index 7c754e245447b505f3c588f1b88315dda38a12ca..eb043ca2de4a026092c44d6ef51de01beb6f6add 100644
--- a/resources/langs/nheko_de.ts
+++ b/resources/langs/nheko_de.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Ganzer Bildschirm</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Nutzer konnte nicht eingeladen werden: %1</translation>
     </message>
@@ -1326,7 +1326,7 @@ Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen anne
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Account Packung</translation>
     </message>
@@ -1570,7 +1570,7 @@ Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen anne
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Alle Dateien (*)</translation>
     </message>
@@ -1580,7 +1580,7 @@ Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen anne
         <translation>Datei(en) auswählen</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Konnte Nutzer %1 nicht abfragen</translation>
     </message>
@@ -1895,7 +1895,7 @@ Beispiel: https://deinserver.example.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Bearbeiten</translation>
     </message>
@@ -2109,12 +2109,18 @@ Beispiel: https://deinserver.example.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 hat eine verschlüsselte Nachricht gesendet</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 hat geantwortet: %2</translation>
@@ -3146,7 +3152,7 @@ Beispiel: https://deinserver.example.com:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Raumeinstellungen</translation>
     </message>
@@ -3235,12 +3241,12 @@ Beispiel: https://deinserver.example.com:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Ändern</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Ändere die Liste an Räumen, die den Zutritt erlauben. Normalerweise ist das die offizielle Gruppe dieses Raumes.</translation>
     </message>
@@ -3322,13 +3328,13 @@ Beispiel: https://deinserver.example.com:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Konfigurieren</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Wähle aus, weche Events in diesem Raum angezeigt werden</translation>
     </message>
@@ -3358,7 +3364,13 @@ Beispiel: https://deinserver.example.com:8787</translation>
         <translation>Ende-zu-Ende Verschlüsselung</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Berechtigungen</translation>
     </message>
@@ -3753,7 +3765,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Teil eines Gesprächfadens</translation>
     </message>
@@ -3833,13 +3845,13 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Event konnte nicht verschlüsselt werden, senden wurde abgebrochen!</translation>
@@ -3865,7 +3877,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn
         <translation>Datei speichern</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4194,7 +4206,7 @@ Grund: %4</translation>
         <translation>%1 hat das Anklopfen zurückgezogen.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 hat die erlaubten Server in diesem Raum geändert.</translation>
     </message>
@@ -4259,7 +4271,7 @@ Grund: %4</translation>
         <translation>Du bist dem Raum beigetreten.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 hat diesen Raum nur eingeladenen Nutzern zugänglich gemacht.</translation>
     </message>
@@ -4298,7 +4310,7 @@ Grund: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>%1s Statusnachricht</translation>
     </message>
@@ -4503,7 +4515,7 @@ Grund: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Keine bekannten Wege zur Authentifizierung!</translation>
     </message>
@@ -4539,7 +4551,7 @@ Grund: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Gerät %1 abmelden</translation>
     </message>
@@ -5466,7 +5478,7 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Keinen verschlüsselten Chat mit diesem User gefunden. Erstelle einen verschlüsselten 1:1 Chat mit diesem Nutzer und versuche es erneut.</translation>
     </message>
@@ -5535,7 +5547,7 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Gestern</translation>
     </message>
@@ -5543,7 +5555,7 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Leute</translation>
     </message>
@@ -5583,10 +5595,18 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
         <translation>Flaggen</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Du hast eine Audiodatei gesendet</translation>
     </message>
@@ -5646,19 +5666,31 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
         <translation>%1 hat eine Benachrichtigung gesendet</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Du: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Du hast einen Effekt gesendet</translation>
     </message>
@@ -5668,7 +5700,12 @@ Diese Einstellung benötigt einen Neustart von Nheko.</translation>
         <translation>%1 hat einen Effekt gesendet</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Du hast eine verschlüsselte Nachricht gesendet</translation>
     </message>
diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts
index 4ab1bc024b7b7c1f4b73870c9c0d345661520e6f..83a043ceb85c6474717dc9c9dd7ef727c37dee66 100644
--- a/resources/langs/nheko_el.ts
+++ b/resources/langs/nheko_el.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -237,7 +237,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation type="unfinished">Όλα τα αρχεία (*)</translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,7 +4541,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Σημαίες</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts
index 17dceee07a84565560a1225cda6fa87d2d9b9b9d..5ea03de2a98663df509c8da774e063739801a242 100644
--- a/resources/langs/nheko_en.ts
+++ b/resources/langs/nheko_en.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Entire screen</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Failed to invite user: %1</translation>
     </message>
@@ -1328,7 +1328,7 @@ You may optionally provide a reason for others to accept your knock:</translatio
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Account Pack</translation>
     </message>
@@ -1572,7 +1572,7 @@ You may optionally provide a reason for others to accept your knock:</translatio
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation>Select file(s)</translation>
     </message>
@@ -1582,7 +1582,7 @@ You may optionally provide a reason for others to accept your knock:</translatio
         <translation>All Files (*)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Failed to fetch user %1</translation>
     </message>
@@ -1897,7 +1897,7 @@ Example: https://yourserver.example.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
@@ -2111,12 +2111,18 @@ Example: https://yourserver.example.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 sent an encrypted message</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 replied: %2</translation>
@@ -3148,7 +3154,7 @@ Example: https://yourserver.example.com:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Room Settings</translation>
     </message>
@@ -3237,12 +3243,12 @@ Example: https://yourserver.example.com:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Change</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Change the list of rooms users can join this room via. Usually this is the official community of this room.</translation>
     </message>
@@ -3324,13 +3330,13 @@ Example: https://yourserver.example.com:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Configure</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Select events to hide in this room</translation>
     </message>
@@ -3360,7 +3366,13 @@ Example: https://yourserver.example.com:8787</translation>
         <translation>End-to-End Encryption</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Permissions</translation>
     </message>
@@ -3755,7 +3767,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Part of a thread</translation>
     </message>
@@ -3835,13 +3847,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Message redaction failed: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Failed to encrypt event, sending aborted!</translation>
@@ -3867,7 +3879,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Save file</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4196,7 +4208,7 @@ Reason: %4</translation>
         <translation>%1 redacted their knock.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 changed which servers are allowed in this room.</translation>
     </message>
@@ -4261,7 +4273,7 @@ Reason: %4</translation>
         <translation>You joined this room.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 made this room require an invitation to join.</translation>
     </message>
@@ -4300,7 +4312,7 @@ Reason: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>%1&apos;s status message</translation>
     </message>
@@ -4505,7 +4517,7 @@ Reason: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>No available registration flows!</translation>
     </message>
@@ -4541,7 +4553,7 @@ Reason: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Sign out device %1</translation>
     </message>
@@ -5468,7 +5480,7 @@ This setting will take effect upon restart.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</translation>
     </message>
@@ -5537,7 +5549,7 @@ This setting will take effect upon restart.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Yesterday</translation>
     </message>
@@ -5545,7 +5557,7 @@ This setting will take effect upon restart.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>People</translation>
     </message>
@@ -5585,10 +5597,18 @@ This setting will take effect upon restart.</translation>
         <translation>Flags</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>You sent an audio clip</translation>
     </message>
@@ -5648,19 +5668,31 @@ This setting will take effect upon restart.</translation>
         <translation>%1 sent a notification</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>You: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>You sent a chat effect</translation>
     </message>
@@ -5670,7 +5702,12 @@ This setting will take effect upon restart.</translation>
         <translation>%1 sent a chat effect</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>You sent an encrypted message</translation>
     </message>
diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts
index 0eece2bfa34516aac500f2a741279bfb52b81711..d7c82c135800b11eb625678ad56559be04d170b8 100644
--- a/resources/langs/nheko_eo.ts
+++ b/resources/langs/nheko_eo.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Tuta ekrano</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Malsukcesis inviti uzanton: %1</translation>
     </message>
@@ -1329,7 +1329,7 @@ Vi povas aldoni noton, pri kial oni akceptu vian frapadon:</translation>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Pako de konto</translation>
     </message>
@@ -1573,7 +1573,7 @@ Vi povas aldoni noton, pri kial oni akceptu vian frapadon:</translation>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Ĉiuj dosieroj (*)</translation>
     </message>
@@ -1583,7 +1583,7 @@ Vi povas aldoni noton, pri kial oni akceptu vian frapadon:</translation>
         <translation>Elekti dosiero(j)n</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Malsukcesis preni uzanton %1</translation>
     </message>
@@ -1899,7 +1899,7 @@ Ekzemplo: https://yourserver.example.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Redakti</translation>
     </message>
@@ -2113,12 +2113,18 @@ Ekzemplo: https://yourserver.example.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 sendis ĉifritan mesaĝon</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 respondis: %2</translation>
@@ -3152,7 +3158,7 @@ forigi la enhavon, se necese.</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Agordoj de ĉambro</translation>
     </message>
@@ -3241,12 +3247,12 @@ forigi la enhavon, se necese.</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Ŝanĝi</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Ŝanĝi liston de ĉambroj, tra kiuj oni povos aliĝi al ĉi tiu. Ordinare tio estas la oficiala aro de ĉi tiu ĉambro.</translation>
     </message>
@@ -3328,13 +3334,13 @@ forigi la enhavon, se necese.</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Agordi</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Elekti kaŝotajn okazojn en ĉi tiu ĉambro</translation>
     </message>
@@ -3364,7 +3370,13 @@ forigi la enhavon, se necese.</translation>
         <translation>Tutvoja ĉifrado</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Permesoj</translation>
     </message>
@@ -3760,7 +3772,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Parto de fadeno</translation>
     </message>
@@ -3840,13 +3852,13 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Malsukcesis redaktado de mesaĝo: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Malsukcesis ĉifri okazon; sendado nuliĝis!</translation>
@@ -3872,7 +3884,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos
         <translation>Konservi dosieron</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4202,7 +4214,7 @@ Kialo: %4</translation>
         <translation>%1 forigis sian frapon.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 ŝanĝis, kiuj serviloj estas permesitaj en la ĉambro.</translation>
     </message>
@@ -4267,7 +4279,7 @@ Kialo: %4</translation>
         <translation>Vi aliĝis ĉi tiun ĉambron.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 necesigis inviton por aliĝo al ĉi tiu ĉambro.</translation>
     </message>
@@ -4306,7 +4318,7 @@ Kialo: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>Statmesaĝo de %1</translation>
     </message>
@@ -4511,7 +4523,7 @@ Kialo: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Neniuj disponeblaj manieroj de registriĝo!</translation>
     </message>
@@ -4547,7 +4559,7 @@ Kialo: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>AdiaÅ­igi aparaton %1</translation>
     </message>
@@ -5476,7 +5488,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Neniu ĉifrita privata babilo kun ĉi tiu uzanto troviĝis. Kreu ĉifritan privatan babilon kun ĉi tiu uzanto kaj reprovu.</translation>
     </message>
@@ -5546,7 +5558,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>HieraÅ­</translation>
     </message>
@@ -5554,7 +5566,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Homoj</translation>
     </message>
@@ -5594,10 +5606,18 @@ This setting will take effect upon restart.</source>
         <translation>Flagoj</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Vi sendis sonmesaĝon</translation>
     </message>
@@ -5657,19 +5677,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 sendis sciigon</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Vi: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Vi sendis babilejan efekton</translation>
     </message>
@@ -5679,7 +5711,12 @@ This setting will take effect upon restart.</source>
         <translation>%1 sendis babilejan efekton</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Vi sendis ĉifritan mesaĝon</translation>
     </message>
diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts
index ea4e932b9d23fc0f663fb63adab5878da4ed0fd4..cd492feebb1bfea0bef8d3f9b979b0c236548a66 100644
--- a/resources/langs/nheko_es.ts
+++ b/resources/langs/nheko_es.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Pantalla completa</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>No se pudo invitar al usuario: %1</translation>
     </message>
@@ -1330,7 +1330,7 @@ Opcionalmente puedes dar una razón para que otros acepten tu toc:</translation>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Pack de cuenta</translation>
     </message>
@@ -1577,7 +1577,7 @@ Opcionalmente puedes dar una razón para que otros acepten tu toc:</translation>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Todos los archivos (*)</translation>
     </message>
@@ -1587,7 +1587,7 @@ Opcionalmente puedes dar una razón para que otros acepten tu toc:</translation>
         <translation>Seleccionar archivo(s)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1902,7 +1902,7 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Editar</translation>
     </message>
@@ -2117,12 +2117,18 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 envió un mensaje cifrado</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 respondió %2</translation>
@@ -3154,7 +3160,7 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Ajustes de la sala</translation>
     </message>
@@ -3243,12 +3249,12 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Cambiar</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Cambia la lista de salas a través de las cuales los usuarios pueden unirse a esta sala. Normalmente se trata de la comunidad oficial de esta sala.</translation>
     </message>
@@ -3330,13 +3336,13 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Configurar</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Seleccionar eventos para ocultar en esta sala</translation>
     </message>
@@ -3366,7 +3372,13 @@ Ejemplo: https://suservidor.ejemplo.com:8787</translation>
         <translation>Cifrado de extremo a extremo</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Permiso</translation>
     </message>
@@ -3761,7 +3773,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Parte de un hilo</translation>
     </message>
@@ -3841,13 +3853,13 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Error en la redacción del mensaje: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Error al cifrar el evento, ¡abortando el envío!</translation>
@@ -3873,7 +3885,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q
         <translation>Guardar archivo</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4207,7 +4219,7 @@ Motivo: %4</translation>
         <translation>%1 redactó su toc.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 changed which servers are allowed in this room.</translation>
     </message>
@@ -4272,7 +4284,7 @@ Motivo: %4</translation>
         <translation>Te has unido a esta sala.</translation>
     </message>
     <message>
-        <location line="+1672"/>
+        <location line="+1677"/>
         <source>%2 revoked the invite to %1.</source>
         <translation>%2 revocó la invitación a %1.</translation>
     </message>
@@ -4306,7 +4318,7 @@ Motivo: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>mensaje de estado de %1</translation>
     </message>
@@ -4511,7 +4523,7 @@ Motivo: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>¡No hay flujos de registro disponibles!</translation>
     </message>
@@ -4547,7 +4559,7 @@ Motivo: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Cerrar sesión en el dispositivo %1</translation>
     </message>
@@ -5473,7 +5485,7 @@ Esta configuración tendrá efecto al reiniciar.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>No se han encontrado chats privados cifrados con este usuario. Crea un chat privado cifrado con este usuario e intenta de nuevo.</translation>
     </message>
@@ -5542,7 +5554,7 @@ Esta configuración tendrá efecto al reiniciar.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Ayer</translation>
     </message>
@@ -5550,7 +5562,7 @@ Esta configuración tendrá efecto al reiniciar.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Personas</translation>
     </message>
@@ -5590,10 +5602,18 @@ Esta configuración tendrá efecto al reiniciar.</translation>
         <translation>Banderas</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Enviaste un clip de audio</translation>
     </message>
@@ -5653,19 +5673,31 @@ Esta configuración tendrá efecto al reiniciar.</translation>
         <translation>%1 envió una notificación</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Tú: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Has enviado un efecto de chat</translation>
     </message>
@@ -5675,7 +5707,12 @@ Esta configuración tendrá efecto al reiniciar.</translation>
         <translation>%1 envió un efecto de chat</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Enviaste un mensaje cifrado</translation>
     </message>
diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts
index bcb98b8d9095d333042303e622faa4cb8dbe8940..113e9b3308a81069fe8350afd3c2e57eb0cca237 100644
--- a/resources/langs/nheko_et.ts
+++ b/resources/langs/nheko_et.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Terve ekraan</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Kutse saatmine kasutajale ei õnnestunud: %1</translation>
     </message>
@@ -1328,7 +1328,7 @@ Kui soovid, siis võid lisada ka selgituse, miks peaks sinu koputusele reageerim
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Kontopakk</translation>
     </message>
@@ -1572,12 +1572,12 @@ Kui soovid, siis võid lisada ka selgituse, miks peaks sinu koputusele reageerim
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Kõik failid (*)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Kasutaja %1 andmete laadimine ei õnnestunud</translation>
     </message>
@@ -1587,7 +1587,7 @@ Kui soovid, siis võid lisada ka selgituse, miks peaks sinu koputusele reageerim
         <translation>„%1“ üleslaadimine ei õnnestunud</translation>
     </message>
     <message>
-        <location line="-955"/>
+        <location line="-965"/>
         <source>Select file(s)</source>
         <translation>Vali fail(id)</translation>
     </message>
@@ -1832,7 +1832,7 @@ Näide: https://sinuserver.domeen.com:8787</translation>
 <context>
     <name>MediaUpload</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+801"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+811"/>
         <location line="+35"/>
         <source>Failed to upload media. Please try again.</source>
         <translation>Meediafailide üleslaadimine ei õnnestunud. Palun proovi uuesti.</translation>
@@ -1897,7 +1897,7 @@ Näide: https://sinuserver.domeen.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Muuda</translation>
     </message>
@@ -2111,12 +2111,18 @@ Näide: https://sinuserver.domeen.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 saatis krüptitud sõnumi</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 vastas: %2</translation>
@@ -3148,7 +3154,7 @@ Näide: https://sinuserver.domeen.com:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Jututoa seadistused</translation>
     </message>
@@ -3237,12 +3243,12 @@ Näide: https://sinuserver.domeen.com:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Muuda</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Muuda jututube, mille kaudu on võimalik selle jututoaga liituda. Tavaliselt on selleks näiteks selle jututoa põhiline kogukond.</translation>
     </message>
@@ -3324,13 +3330,13 @@ Näide: https://sinuserver.domeen.com:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Seadista</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Vali sündmused, mida siin jututoas peita</translation>
     </message>
@@ -3360,7 +3366,13 @@ Näide: https://sinuserver.domeen.com:8787</translation>
         <translation>Läbiv krüptimine</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Õigused</translation>
     </message>
@@ -3755,7 +3767,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Osa jutulõngast</translation>
     </message>
@@ -3835,13 +3847,13 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Sõnumi ümbersõnastamine ebaõnnestus: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Sündmuse krüptimine ei õnnestunud, katkestame saatmise!</translation>
@@ -3867,7 +3879,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui
         <translation>Salvesta fail</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4196,7 +4208,7 @@ Põhjus: %4</translation>
         <translation>%1 muutis oma koputust jututoa uksele.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 muutis serverid, mis on selles jututoas lubatud.</translation>
     </message>
@@ -4261,7 +4273,7 @@ Põhjus: %4</translation>
         <translation>Sa liitusid jututoaga.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 seadistas, et see jututuba vajab liitumiseks kutset.</translation>
     </message>
@@ -4300,7 +4312,7 @@ Põhjus: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>Kasutaja %1 olekusõnum</translation>
     </message>
@@ -4505,7 +4517,7 @@ Põhjus: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Registreerimiseks vajalikku töövoogu ei leidu!</translation>
     </message>
@@ -4541,7 +4553,7 @@ Põhjus: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Logi %1 seade võrgust välja</translation>
     </message>
@@ -5468,7 +5480,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Ühtegi krüptitud vestlust selle kasutajaga ei leidunud. Palun loo temaga krüptitud vestlus ja proovi uuesti.</translation>
     </message>
@@ -5537,7 +5549,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Eile</translation>
     </message>
@@ -5545,7 +5557,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Inimesed</translation>
     </message>
@@ -5585,10 +5597,18 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
         <translation>Lipud</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Sa saatsid helifaili</translation>
     </message>
@@ -5648,19 +5668,31 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
         <translation>%1 saatis teavituse</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Sina: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Sa saatsid vestlusmulje</translation>
     </message>
@@ -5670,7 +5702,12 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
         <translation>%1 saatis vestlusmulje</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Sa saatsid krüptitud sõnumi</translation>
     </message>
diff --git a/resources/langs/nheko_fa.ts b/resources/langs/nheko_fa.ts
index 9dd860b4d2d5c3dce0f55c8e375c764e3f21a824..ba3660e1ef0cc846d9b6436ec39b1e768f2411e2 100644
--- a/resources/langs/nheko_fa.ts
+++ b/resources/langs/nheko_fa.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1320,7 +1320,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1564,7 +1564,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1574,7 +1574,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1885,7 +1885,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2099,12 +2099,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3135,7 +3141,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3223,12 +3229,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,13 +3316,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3346,7 +3352,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3739,7 +3751,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3819,13 +3831,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3851,7 +3863,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4174,7 +4186,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4239,7 +4251,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4278,7 +4290,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4482,7 +4494,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,7 +4529,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5426,7 +5438,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5495,7 +5507,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5503,7 +5515,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5543,10 +5555,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5606,19 +5626,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5628,7 +5660,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts
index 7e54a6e8ea9b3a0fd051f4efbb6f410334c0ea64..bd97c3468f1940255a669f0b48bd8e6b65bd6192 100644
--- a/resources/langs/nheko_fi.ts
+++ b/resources/langs/nheko_fi.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Koko näyttö</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Käyttäjän %1 kutsuminen epäonnistui</translation>
     </message>
@@ -1328,7 +1328,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi:</translation>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1572,12 +1572,12 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi:</translation>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Kaikki Tiedostot (*)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1587,7 +1587,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi:</translation>
         <translation>Tiedoston &quot;%1&quot; lähetys epäonnistui</translation>
     </message>
     <message>
-        <location line="-955"/>
+        <location line="-965"/>
         <source>Select file(s)</source>
         <translation>Valitse tiedosto(t)</translation>
     </message>
@@ -1828,7 +1828,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MediaUpload</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+801"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+811"/>
         <location line="+35"/>
         <source>Failed to upload media. Please try again.</source>
         <translation>Mediaa ei onnistuttu lähettämään. Yritä uudelleen.</translation>
@@ -1893,7 +1893,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Muokkaa</translation>
     </message>
@@ -2107,12 +2107,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 lähetti salatun viestin</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 vastasi: %2</translation>
@@ -3144,7 +3150,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished">Huoneen asetukset</translation>
     </message>
@@ -3233,12 +3239,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished">Muuta</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished">Muuta listaa huoneista, joiden kautta tähän huoneeseen voi liittyä. Se on yleensä tämän huoneen virallinen yhteisö.</translation>
     </message>
@@ -3320,13 +3326,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished">Määritä</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished">Valitse huoneesta piilotettavat tapahtumat</translation>
     </message>
@@ -3356,7 +3362,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Päästä-päähän-salaus</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished">Oikeudet</translation>
     </message>
@@ -3751,7 +3763,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished">Osa viestiketjua</translation>
     </message>
@@ -3831,13 +3843,13 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Viestin muokkaus epäonnistui: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Tapahtuman salaus epäonnistui, lähetys keskeytetään!</translation>
@@ -3863,7 +3875,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s
         <translation>Tallenna tiedosto</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4192,7 +4204,7 @@ Syy: %4</translation>
         <translation>%1 perui koputuksensa.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished">%1 muutti tähän huoneeseen sallittuja palvelimia.</translation>
     </message>
@@ -4257,7 +4269,7 @@ Syy: %4</translation>
         <translation>Liityit tähän huoneeseen.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 teki tämän huoneen vaatimaan kutsun liittymiseen.</translation>
     </message>
@@ -4296,7 +4308,7 @@ Syy: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished">Käyttäjän %1 tilaviesti</translation>
     </message>
@@ -4501,7 +4513,7 @@ Syy: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Rekisteröitymistapoja ei ole saatavilla!</translation>
     </message>
@@ -4537,7 +4549,7 @@ Syy: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Kirjaudu ulos laitteelta %1</translation>
     </message>
@@ -5460,7 +5472,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Salattua keskustelua ei löydetty tälle käyttäjälle. Luo salattu yksityiskeskustelu tämän käyttäjän kanssa ja yritä uudestaan.</translation>
     </message>
@@ -5529,7 +5541,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Eilen</translation>
     </message>
@@ -5537,7 +5549,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Ihmiset</translation>
     </message>
@@ -5577,10 +5589,18 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
         <translation>Liput</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Lähetit äänileikkeen</translation>
     </message>
@@ -5640,19 +5660,31 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
         <translation>%1 lähetti ilmoituksen</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Sinä: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5662,7 +5694,12 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Lähetit salatun viestin</translation>
     </message>
diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts
index 1bfa2f795ccb4560d900e58db0a91be98524f7e8..2dec73254a63325606ff47b58dbc891876460793 100644
--- a/resources/langs/nheko_fr.ts
+++ b/resources/langs/nheko_fr.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Tout l&apos;écran</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Échec lors de l&apos;invitation de %1</translation>
     </message>
@@ -1328,7 +1328,7 @@ Eventuellement, vous pouvez fournir une explication de votre demande aux autres
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Paquet de compte</translation>
     </message>
@@ -1572,7 +1572,7 @@ Eventuellement, vous pouvez fournir une explication de votre demande aux autres
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Tous les types de fichiers (*)</translation>
     </message>
@@ -1582,7 +1582,7 @@ Eventuellement, vous pouvez fournir une explication de votre demande aux autres
         <translation>Choisir fichier(s)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>La récupération de l&apos;utilisateur %1 a échoué</translation>
     </message>
@@ -1898,7 +1898,7 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Modifier</translation>
     </message>
@@ -2112,12 +2112,18 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 a envoyé un message chiffré</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 a répondu : %2</translation>
@@ -3149,7 +3155,7 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Configuration du salon</translation>
     </message>
@@ -3238,12 +3244,12 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Modifier</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Changer la liste des salons que les utilisateurs peuvent emprunter pour rejoindre ce salon. En général, il s&apos;agit de la communauté officielle de ce salon.</translation>
     </message>
@@ -3325,13 +3331,13 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Configurer</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Sélectionner les évènements à cacher dans ce salon</translation>
     </message>
@@ -3361,7 +3367,13 @@ Exemple&#xa0;: https://serveur.domaine.extension:8787</translation>
         <translation>Chiffrement bout en bout</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Permissions</translation>
     </message>
@@ -3756,7 +3768,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l&apos;autre appareil. Si
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Partie d&apos;un fil</translation>
     </message>
@@ -3836,13 +3848,13 @@ Si vous choisissez de vérifier, vous aurez besoin de l&apos;autre appareil. Si
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Échec de la suppression du message&#xa0;: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Échec du chiffrement de l&apos;évènement, envoi abandonné&#x202f;!</translation>
@@ -3868,7 +3880,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l&apos;autre appareil. Si
         <translation>Enregistrer le fichier</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4202,7 +4214,7 @@ Raison : %4</translation>
         <translation>%1 a arrêté de toquer.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 a changé quels serveurs sont autorisés dans ce salon.</translation>
     </message>
@@ -4267,7 +4279,7 @@ Raison : %4</translation>
         <translation>Vous avez rejoint ce salon.</translation>
     </message>
     <message>
-        <location line="+1630"/>
+        <location line="+1635"/>
         <source>%1 invited %2.</source>
         <translation>%1 a invité %2.</translation>
     </message>
@@ -4301,7 +4313,7 @@ Raison : %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>Message de statut de %1</translation>
     </message>
@@ -4506,7 +4518,7 @@ Raison : %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Aucun mécanisme de création de compte disponible !</translation>
     </message>
@@ -4542,7 +4554,7 @@ Raison : %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Déconnecter l&apos;appareil %1</translation>
     </message>
@@ -5467,7 +5479,7 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Aucune discussion privée chiffrée trouvée avec cet utilisateur. Créez-en une et réessayez.</translation>
     </message>
@@ -5536,7 +5548,7 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Hier</translation>
     </message>
@@ -5544,7 +5556,7 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Personnes</translation>
     </message>
@@ -5584,10 +5596,18 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
         <translation>Drapeaux</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Vous avez envoyé un message audio</translation>
     </message>
@@ -5647,19 +5667,31 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
         <translation>%1 a envoyé une notification</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Vous&#xa0;: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1&#xa0;: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Vous avez envoyé un effet dans la discussion</translation>
     </message>
@@ -5669,7 +5701,12 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
         <translation>%1 a envoyé un effet dans la discussion</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Vous avez envoyé un message chiffré</translation>
     </message>
diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts
index 6a12b68dcd05b0632831d83f930ad4a8ef0d39db..4cf3def63e91324f109cbc85dfa7f6ea0e3349b3 100644
--- a/resources/langs/nheko_hu.ts
+++ b/resources/langs/nheko_hu.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Az egész képernyő</translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Nem sikerült meghívni a felhasználót: %1</translation>
     </message>
@@ -1320,7 +1320,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1564,7 +1564,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Minden fájl (*)</translation>
     </message>
@@ -1574,7 +1574,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1885,7 +1885,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Szerkesztés</translation>
     </message>
@@ -2099,12 +2099,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 küldött egy titkosított üzenetet</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 válasza: %2</translation>
@@ -3135,7 +3141,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished">Szobabeállítások</translation>
     </message>
@@ -3223,12 +3229,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,13 +3316,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3346,7 +3352,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Végponttól végpontig titkosítás</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3739,7 +3751,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3819,13 +3831,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Az üzenet visszavonása nem sikerült: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Nem sikerült titkosítani az eseményt, küldés megszakítva!</translation>
@@ -3851,7 +3863,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Fájl mentése</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4179,7 +4191,7 @@ Reason: %4</source>
         <translation>%1 visszavonta a kopogását.</translation>
     </message>
     <message>
-        <location line="-1677"/>
+        <location line="-1682"/>
         <source>You joined this room.</source>
         <translation>Csatlakoztál ehhez a szobához.</translation>
     </message>
@@ -4244,7 +4256,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+2228"/>
+        <location line="+2233"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4278,7 +4290,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4482,7 +4494,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,7 +4529,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5434,7 +5446,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished">Nem található titkosított privát csevegés ezzel a felhasználóval. Hozz létre egy titkosított privát csevegést vele, és próbáld újra!</translation>
     </message>
@@ -5503,7 +5515,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Tegnap</translation>
     </message>
@@ -5511,7 +5523,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Emberek</translation>
     </message>
@@ -5551,10 +5563,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Zászlók</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Küldtél egy hangfájlt</translation>
     </message>
@@ -5614,19 +5634,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 küldött egy értesítést</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Te: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5636,7 +5668,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Küldtél egy titkosított üzenetet</translation>
     </message>
diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts
index 50f25fe96e75502b60f8fb48ee0850cb6285b963..717b8c85bc68fa2be628713999596cf25cd8d1d5 100644
--- a/resources/langs/nheko_id.ts
+++ b/resources/langs/nheko_id.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Semua layar</translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Gagal mengundang pengguna: %1</translation>
     </message>
@@ -1324,7 +1324,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:</transla
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Paket Akun</translation>
     </message>
@@ -1568,12 +1568,12 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:</transla
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Semua File (*)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Gagal mendapatkan pengguna %1</translation>
     </message>
@@ -1583,7 +1583,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:</transla
         <translation>Pengunggahan &apos;%1&apos; gagal</translation>
     </message>
     <message>
-        <location line="-955"/>
+        <location line="-965"/>
         <source>Select file(s)</source>
         <translation>Pilih berkas</translation>
     </message>
@@ -1828,7 +1828,7 @@ Contoh: https://serveranda.contoh.id:8787</translation>
 <context>
     <name>MediaUpload</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+801"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+811"/>
         <location line="+35"/>
         <source>Failed to upload media. Please try again.</source>
         <translation>Gagal untuk mengunggah media. Silakan coba lagi.</translation>
@@ -1893,7 +1893,7 @@ Contoh: https://serveranda.contoh.id:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Sunting</translation>
     </message>
@@ -2107,12 +2107,18 @@ Contoh: https://serveranda.contoh.id:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 mengirim pesan terenkripsi</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 membalas: %2</translation>
@@ -3143,7 +3149,7 @@ Contoh: https://serveranda.contoh.id:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Pengaturan Ruangan</translation>
     </message>
@@ -3231,12 +3237,12 @@ Contoh: https://serveranda.contoh.id:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Ubah</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Ubah daftar ruangan yang bisa digabung dari ruangan mana. Biasanya ini adalah komunitas resmi dari ruangan ini.</translation>
     </message>
@@ -3318,13 +3324,13 @@ Contoh: https://serveranda.contoh.id:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Konfigurasi</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Pilih peristiwa untuk disembunyikan di ruangan ini</translation>
     </message>
@@ -3354,7 +3360,13 @@ Contoh: https://serveranda.contoh.id:8787</translation>
         <translation>Enkripsi Ujung ke Ujung</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Izin</translation>
     </message>
@@ -3749,7 +3761,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia.
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Bagian dari sebuah utas</translation>
     </message>
@@ -3829,13 +3841,13 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia.
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Reaksi pesan gagal: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Gagal mendekripsikan peristiwa, pengiriman dihentikan!</translation>
@@ -3861,7 +3873,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia.
         <translation>Simpan file</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4185,7 +4197,7 @@ Alasan: %4</translation>
         <translation>%1 menolak ketukannya.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 mengubah server mana yang diizinkan di ruangan ini.</translation>
     </message>
@@ -4250,7 +4262,7 @@ Alasan: %4</translation>
         <translation>Kamu bergabung ruangan ini.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 membuat ruangan ini membutuhkan undangan untuk bergabung.</translation>
     </message>
@@ -4289,7 +4301,7 @@ Alasan: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>Pesan status %1</translation>
     </message>
@@ -4493,7 +4505,7 @@ Alasan: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Tidak ada alur pendaftaran yang tersedia!</translation>
     </message>
@@ -4528,7 +4540,7 @@ Alasan: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Keluarkan perangkat %1</translation>
     </message>
@@ -5455,7 +5467,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Tidak ada chat privat terenkripsi ditemukan dengan pengguna ini. Buat sebuah chat privat terenkripsi dengan pengguna ini dan coba lagi.</translation>
     </message>
@@ -5524,7 +5536,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Kemarin</translation>
     </message>
@@ -5532,7 +5544,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Orang</translation>
     </message>
@@ -5572,10 +5584,18 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
         <translation>Bendera</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Kamu mengirim klip audio</translation>
     </message>
@@ -5635,19 +5655,31 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
         <translation>%1 mengirim sebuah pemberitahuan</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Kamu: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Kamu mengirim efek pesan</translation>
     </message>
@@ -5657,7 +5689,12 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</translation>
         <translation>%1 mengirim efek pesan</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Kamu mengirim sebuah pesan terenkripsi</translation>
     </message>
diff --git a/resources/langs/nheko_ie.ts b/resources/langs/nheko_ie.ts
index eba701eff7eef7ea20cff6cca2ea3e517e20da38..ae280fcf4367a4df14f56264e4ae2f79887d6a3f 100644
--- a/resources/langs/nheko_ie.ts
+++ b/resources/langs/nheko_ie.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -237,7 +237,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4645,7 +4657,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts
index 1e44a733de246d82d9e15a4105257ed63eea40de..61a3520cbc5e9f856e6544419b4fd67df26517ec 100644
--- a/resources/langs/nheko_it.ts
+++ b/resources/langs/nheko_it.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Schermo intero</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Impossibile invitare l&apos;utente: %1</translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Tutti i File (*)</translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Modifica</translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished">%1 ha inviato un messaggio criptato</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>Risposta di %1: %2</translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Crittografia End-to-End</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,13 +3836,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Oscuramento del messaggio fallito: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3856,7 +3868,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Salva file</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4189,7 +4201,7 @@ Reason: %4</source>
         <translation>%1 ha oscurato la sua bussata.</translation>
     </message>
     <message>
-        <location line="-1677"/>
+        <location line="-1682"/>
         <source>You joined this room.</source>
         <translation>Sei entrato in questa stanza.</translation>
     </message>
@@ -4254,7 +4266,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+2228"/>
+        <location line="+2233"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,7 +4541,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Ieri</translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Membri</translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Bandiere</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Hai inviato una clip audio</translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 ha inviato una notifica</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Tu: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Hai inviato un messaggio criptato</translation>
     </message>
diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts
index 4267dad8af8047806caaa2bfde25f1bf94865d1f..2d853b1a27cb9b82b9ffb211d8173217d755c8cb 100644
--- a/resources/langs/nheko_ja.ts
+++ b/resources/langs/nheko_ja.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>全画面</translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>ユーザーを招待できませんでした: %1</translation>
     </message>
@@ -1320,7 +1320,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1564,7 +1564,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation type="unfinished">全てのファイル (*)</translation>
     </message>
@@ -1574,7 +1574,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1885,7 +1885,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2099,12 +2099,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished">%1が暗号化されたメッセージを送信しました</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3135,7 +3141,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3223,12 +3229,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,13 +3316,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3346,7 +3352,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">エンドツーエンド暗号化</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3739,7 +3751,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3819,13 +3831,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>メッセージを編集できませんでした: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3851,7 +3863,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>ファイルを保存</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4174,7 +4186,7 @@ Reason: %4</source>
         <translation>%1は退室しました。</translation>
     </message>
     <message>
-        <location line="-2281"/>
+        <location line="-2286"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4239,7 +4251,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+1672"/>
+        <location line="+1677"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4278,7 +4290,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4482,7 +4494,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,7 +4529,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5426,7 +5438,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5495,7 +5507,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>昨日</translation>
     </message>
@@ -5503,7 +5515,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5543,10 +5555,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">æ——</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>音声データを送信しました</translation>
     </message>
@@ -5606,19 +5626,31 @@ This setting will take effect upon restart.</source>
         <translation>%1が通知を送信しました</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>あなた: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5628,7 +5660,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>暗号化されたメッセージを送信しました</translation>
     </message>
diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts
index 608ad3d7e45246ce18fc0dcd5c1985d31bc257e4..e533e03c974f6a2e4f87fd437dc7cd8048e86240 100644
--- a/resources/langs/nheko_ml.ts
+++ b/resources/langs/nheko_ml.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>മുഴുവൻ സ്ക്രീൻ</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>ഉപയോക്താവിനെ ക്ഷണിക്കുന്നതിൽ പരാജയപ്പെട്ടു: %1</translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>എല്ലാ ഫയലുകളും (*)</translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>തിരുത്തുക</translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,7 +4541,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">ആളുകൾ</translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">പതാകകൾ</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished">%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts
index 69a166f4b2db856526048955f8e888d22a7d135a..c9f9bfe75ef30c55c48119d24c68d1707838896e 100644
--- a/resources/langs/nheko_nl.ts
+++ b/resources/langs/nheko_nl.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Gehele scherm</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Gebruiker uitnodigen mislukt: %1</translation>
     </message>
@@ -1328,7 +1328,7 @@ Je kan optioneel hier een reden invoeren dat je aanklopt:</translation>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>Gebruikersgebonden afbeeldingspakket</translation>
     </message>
@@ -1572,7 +1572,7 @@ Je kan optioneel hier een reden invoeren dat je aanklopt:</translation>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Alle bestanden (*)</translation>
     </message>
@@ -1582,7 +1582,7 @@ Je kan optioneel hier een reden invoeren dat je aanklopt:</translation>
         <translation>Selecteer bestand(en)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Ophalen van gebruiker %1 mislukt</translation>
     </message>
@@ -1898,7 +1898,7 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Bewerken</translation>
     </message>
@@ -2112,12 +2112,18 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 stuurde een versleuteld bericht</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 antwoordde: %2</translation>
@@ -3149,7 +3155,7 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Kamerinstellingen</translation>
     </message>
@@ -3238,12 +3244,12 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Bewerken</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>Verander de lijst van kamers waarlangs gebruikers kunnen binnentreden. Meestal is dit de officiële groep van deze kamer.</translation>
     </message>
@@ -3325,13 +3331,13 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Instellen</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Selecteer gebeurtenissen die verborgen dienen te worden in deze kamer</translation>
     </message>
@@ -3361,7 +3367,13 @@ Voorbeeld: https://jouwserver.example.com:8787</translation>
         <translation>Eind-tot-eind versleuteling</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Toestemmingen</translation>
     </message>
@@ -3756,7 +3768,7 @@ Als je &quot;verifieer&quot; kiest, moet je het andere apparaat bij de hand hebb
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Deel van een gespreksdraad</translation>
     </message>
@@ -3836,13 +3848,13 @@ Als je &quot;verifieer&quot; kiest, moet je het andere apparaat bij de hand hebb
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Bericht intrekken mislukt: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Kon evenement niet versleutelen, versturen geannuleerd!</translation>
@@ -3868,7 +3880,7 @@ Als je &quot;verifieer&quot; kiest, moet je het andere apparaat bij de hand hebb
         <translation>Bestand opslaan</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4197,7 +4209,7 @@ Reden: %4</translation>
         <translation>%1 heeft het aankloppen ingetrokken.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 heeft veranderd welke servers de kamer in mogen.</translation>
     </message>
@@ -4262,7 +4274,7 @@ Reden: %4</translation>
         <translation>Je neemt nu deel aan deze kamer.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 heeft deze kamer zodanig ingesteld dat een uitnodiging vereist is om te mogen betreden.</translation>
     </message>
@@ -4301,7 +4313,7 @@ Reden: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>%1&apos;s statusbericht</translation>
     </message>
@@ -4506,7 +4518,7 @@ Reden: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Geen beschikbare registratiestromen!</translation>
     </message>
@@ -4542,7 +4554,7 @@ Reden: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Meld apparaat %1 af</translation>
     </message>
@@ -5469,7 +5481,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Geen versleutelde chat gevonden met deze gebruiker. Maak een versleutelde chat aan met deze gebruiker en probeer het opnieuw.</translation>
     </message>
@@ -5538,7 +5550,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Gisteren</translation>
     </message>
@@ -5546,7 +5558,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Mensen</translation>
     </message>
@@ -5586,10 +5598,18 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
         <translation>Vlaggen</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Je verstuurde een audio clip</translation>
     </message>
@@ -5649,19 +5669,31 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
         <translation>%1 verstuurde een notificatie</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Jij: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>Je hebt een chateffect verstuurd</translation>
     </message>
@@ -5671,7 +5703,12 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
         <translation>%1 heeft een chateffect gestuurd</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Je hebt een versleuteld bericht verstuurd</translation>
     </message>
diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts
index 863a2791e96b3e2de77bcae4aedd8d8d1f42b572..d936c0eeaef2ba0b77b880634cc6d86534d75fc6 100644
--- a/resources/langs/nheko_pl.ts
+++ b/resources/langs/nheko_pl.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Cały ekran</translation>
     </message>
@@ -233,7 +233,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Nie udało się zaprosić użytkownika: %1</translation>
     </message>
@@ -1332,7 +1332,7 @@ Opcjonalnie możesz podać powód, dla którego inni mieliby cię przyjąć:</tr
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1576,7 +1576,7 @@ Opcjonalnie możesz podać powód, dla którego inni mieliby cię przyjąć:</tr
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Wszystkie pliki (*)</translation>
     </message>
@@ -1586,7 +1586,7 @@ Opcjonalnie możesz podać powód, dla którego inni mieliby cię przyjąć:</tr
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1897,7 +1897,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Edytuj</translation>
     </message>
@@ -2111,12 +2111,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 wysłał(a) zaszyfrowaną wiadomość</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translatorcomment>Format wiadomości w powiadomieniu. %1 to nadawca, %2 to wiadomość.</translatorcomment>
@@ -3150,7 +3156,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>Ustawienia pokoju</translation>
     </message>
@@ -3240,12 +3246,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>Zmień</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3327,13 +3333,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>Konfiguruj</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>Wybierz zdarzenia do ukrywania w tym pokoju</translation>
     </message>
@@ -3363,7 +3369,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation>Szyfrowanie end-to-end</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>Uprawnienia</translation>
     </message>
@@ -3758,7 +3770,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>Część wątku</translation>
     </message>
@@ -3838,13 +3850,13 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Cenzurowanie wiadomości nie powiodło się: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Szyfrowanie event-u nie powiodło się, wysyłanie anulowane!</translation>
@@ -3870,7 +3882,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego
         <translation>Zapisz plik</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4209,7 +4221,7 @@ Powód: %4</translation>
         <translation>Użytkownik %1 ocenzurował własne pukanie.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4274,7 +4286,7 @@ Powód: %4</translation>
         <translation>Dołączyłeś(-aś) do tego pokoju.</translation>
     </message>
     <message>
-        <location line="+1630"/>
+        <location line="+1635"/>
         <source>%1 invited %2.</source>
         <translation>%1 zaprosił(a) %2.</translation>
     </message>
@@ -4308,7 +4320,7 @@ Powód: %4</translation>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4514,7 +4526,7 @@ Powód: %4</translation>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Nie są dostępne żadne sposoby rejestracji!</translation>
     </message>
@@ -4551,7 +4563,7 @@ Powód: %4</translation>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Wyloguj urzÄ…dzenie %1</translation>
     </message>
@@ -5472,7 +5484,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Nie znaleziono zaszyfrowanego prywatnego czatu z tym użytkownikiem. Utwórz nowy zaszyfrowany prywatny czat z tym użytkownikiem i spróbuj ponownie.</translation>
     </message>
@@ -5541,7 +5553,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Wczoraj</translation>
     </message>
@@ -5549,7 +5561,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>Ludzie</translation>
     </message>
@@ -5589,10 +5601,18 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
         <translation>Flagi</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Wysłałeś(aś) klip audio</translation>
     </message>
@@ -5652,19 +5672,31 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
         <translation>%1 wysłał(a) powiadomienie</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Ty: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5674,7 +5706,12 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Wysłałeś(aś) zaszyfrowaną wiadomość</translation>
     </message>
diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts
index 7e7fa5d0024f8ee11f63568bd74d945ed882be38..ffe1729baf0076f2a425b4d3ddd1b6be441e727b 100644
--- a/resources/langs/nheko_pt_BR.ts
+++ b/resources/langs/nheko_pt_BR.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Tela Inteira</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Falha ao convidar usuário: %1</translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4645,7 +4657,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Pessoas</translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Bandeiras</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts
index 2fe5a77353fe72b488c0920e0cdbbdf0a60e056f..0a2d1ae39ea020afef73d9d2479967bdb46cc917 100644
--- a/resources/langs/nheko_pt_PT.ts
+++ b/resources/langs/nheko_pt_PT.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Ecrã inteiro</translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Falha ao convidar utilizador: %1</translation>
     </message>
@@ -1325,7 +1325,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished">Pacote de conta</translation>
     </message>
@@ -1569,7 +1569,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Todos os ficheiros (*)</translation>
     </message>
@@ -1579,7 +1579,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation>Selecionar ficheiro(s)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>Falha ao pedir utilizador %1</translation>
     </message>
@@ -1890,7 +1890,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Editar</translation>
     </message>
@@ -2104,12 +2104,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 enviou uma mensagem encriptada</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 respondeu: %2</translation>
@@ -3141,7 +3147,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished">Definições de sala</translation>
     </message>
@@ -3230,12 +3236,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished">Alterar</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3317,13 +3323,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3353,7 +3359,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Encriptação ponta-a-ponta</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3748,7 +3760,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3828,13 +3840,13 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Falha ao eliminar mensagem: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Falha ao encriptar evento, envio abortado!</translation>
@@ -3860,7 +3872,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e
         <translation>Guardar ficheiro</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4183,7 +4195,7 @@ Reason: %4</source>
         <translation>%1 eliminou a sua &quot;batida à porta&quot;.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4248,7 +4260,7 @@ Reason: %4</source>
         <translation>Entrou na sala.</translation>
     </message>
     <message>
-        <location line="+1641"/>
+        <location line="+1646"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation>%1 alterou o seu avatar e também o seu nome de exibição para %2.</translation>
     </message>
@@ -4292,7 +4304,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4497,7 +4509,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Nenhum processo de registo disponível!</translation>
     </message>
@@ -4533,7 +4545,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Terminar sessão no dispositivo %1</translation>
     </message>
@@ -5448,7 +5460,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Não foi encontrada nenhuma conversa privada e encriptada com este utilizador. Crie uma e tente novamente.</translation>
     </message>
@@ -5517,7 +5529,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Ontem</translation>
     </message>
@@ -5525,7 +5537,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Pessoas</translation>
     </message>
@@ -5565,10 +5577,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Bandeiras</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Enviou uma mensagem áudio</translation>
     </message>
@@ -5628,19 +5648,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 enviou uma notificação</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Você: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5650,7 +5682,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Enviou uma mensagem encriptada</translation>
     </message>
diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts
index e5ee0500420c2159e74dbbaed2e6a1644cdc75a6..35c0025df75785e26472145db96a139aed95b116 100644
--- a/resources/langs/nheko_ro.ts
+++ b/resources/langs/nheko_ro.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -233,7 +233,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Nu s-a putut invita utilizatorul: %1</translation>
     </message>
@@ -1326,7 +1326,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1570,7 +1570,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation type="unfinished">Toate fișierele (*)</translation>
     </message>
@@ -1580,7 +1580,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1891,7 +1891,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2105,12 +2105,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished">%1 a trimis un mesaj criptat</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3143,7 +3149,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3233,12 +3239,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3320,13 +3326,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3356,7 +3362,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Criptare Capăt-la-Capăt</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3749,7 +3761,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3829,13 +3841,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Redactare mesaj eșuată: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3861,7 +3873,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Salvați fișier</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4199,7 +4211,7 @@ Reason: %4</source>
         <translation>%1 și-a redactat ciocănitul.</translation>
     </message>
     <message>
-        <location line="-1677"/>
+        <location line="-1682"/>
         <source>You joined this room.</source>
         <translation>Te-ai alăturat camerei.</translation>
     </message>
@@ -4264,7 +4276,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+2228"/>
+        <location line="+2233"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4298,7 +4310,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4504,7 +4516,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4541,7 +4553,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5450,7 +5462,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5519,7 +5531,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Ieri</translation>
     </message>
@@ -5527,7 +5539,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5567,10 +5579,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Steaguri</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Ai trimis un clip audio</translation>
     </message>
@@ -5630,19 +5650,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 a trimis o notificare</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Tu: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5652,7 +5684,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Ai trimis un mesaj criptat</translation>
     </message>
diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts
index aea7e013ce7a1da1bbafc730a4f409253dd73ce2..71460f6a200ce4a9a66a5d3848c48639543670d9 100644
--- a/resources/langs/nheko_ru.ts
+++ b/resources/langs/nheko_ru.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Весь экран</translation>
     </message>
@@ -233,7 +233,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Не удалось пригласить пользователя: %1</translation>
     </message>
@@ -1326,7 +1326,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1570,7 +1570,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Все файлы (*)</translation>
     </message>
@@ -1580,7 +1580,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1891,7 +1891,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
@@ -2105,12 +2105,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 отправил зашифрованное сообщение</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3143,7 +3149,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished">Настройки комнаты</translation>
     </message>
@@ -3233,12 +3239,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3320,13 +3326,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3356,7 +3362,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Оконечное шифрование</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished">Права доступа</translation>
     </message>
@@ -3749,7 +3761,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3829,13 +3841,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Ошибка редактирования сообщения: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Не удалось зашифровать сообщение, отправка отменена!</translation>
@@ -3861,7 +3873,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Сохранить файл</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4199,7 +4211,7 @@ Reason: %4</source>
         <translation>%1 отредактировал его &quot;стук&quot;.</translation>
     </message>
     <message>
-        <location line="-1677"/>
+        <location line="-1682"/>
         <source>You joined this room.</source>
         <translation>Вы присоединились к комнате.</translation>
     </message>
@@ -4264,7 +4276,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+2228"/>
+        <location line="+2233"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4298,7 +4310,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4504,7 +4516,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4541,7 +4553,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5454,7 +5466,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished">Не найдено личного чата с этим пользователем. Создайте зашифрованный личный чат с этим пользователем и попытайтесь еще раз.</translation>
     </message>
@@ -5523,7 +5535,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Вчера</translation>
     </message>
@@ -5531,7 +5543,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Люди</translation>
     </message>
@@ -5571,10 +5583,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Флаги</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Вы отправили аудиозапись</translation>
     </message>
@@ -5634,19 +5654,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 отправил уведомление</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Ð’Ñ‹: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5656,7 +5688,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Вы отправили зашифрованное сообщение</translation>
     </message>
diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts
index ef1409842a16c41eeedb9004d659598ea76c4ba0..33970c4517753ef59049ef6cdcb2f90f5bcb91bd 100644
--- a/resources/langs/nheko_si.ts
+++ b/resources/langs/nheko_si.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -237,7 +237,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,7 +3836,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3895,7 +3907,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3921,7 +3933,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4645,7 +4657,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5438,7 +5450,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5515,7 +5527,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5555,10 +5567,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5618,19 +5638,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5640,7 +5672,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_sr_Latn.ts b/resources/langs/nheko_sr_Latn.ts
index 2c4b22e314c3bb4a685a7b3f3d7c4768f7c546c9..0a2ad94366012b7c0c22304d10e8e971716aa47a 100644
--- a/resources/langs/nheko_sr_Latn.ts
+++ b/resources/langs/nheko_sr_Latn.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -238,7 +238,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1326,7 +1326,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1570,7 +1570,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1580,7 +1580,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1891,7 +1891,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2105,12 +2105,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3143,7 +3149,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3233,12 +3239,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3320,13 +3326,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3356,7 +3362,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3749,7 +3761,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3829,7 +3841,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3900,7 +3912,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3926,7 +3938,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4298,7 +4310,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4504,7 +4516,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4657,7 +4669,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5450,7 +5462,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5519,7 +5531,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5527,7 +5539,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5567,10 +5579,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5630,19 +5650,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5652,7 +5684,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts
index 9e57fba0dd9f5472d061fe680e24c97a04fe274e..61209952ec1a773672a1536ec9e8e9121de64dfd 100644
--- a/resources/langs/nheko_sv.ts
+++ b/resources/langs/nheko_sv.ts
@@ -214,17 +214,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -232,7 +232,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Kunde inte bjuda in användare: %1</translation>
     </message>
@@ -1323,7 +1323,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1567,7 +1567,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Alla Filer (*)</translation>
     </message>
@@ -1577,7 +1577,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1888,7 +1888,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2102,12 +2102,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished">%1 skickade ett krypterat meddelande</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3228,12 +3234,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3315,13 +3321,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3351,7 +3357,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Totalsträckskryptering</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3744,7 +3756,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3824,13 +3836,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Kunde inte maskera meddelande: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Kunde inte kryptera event, sändning avbruten!</translation>
@@ -3856,7 +3868,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Spara fil</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4189,7 +4201,7 @@ Reason: %4</source>
         <translation>%1 maskerade sin knackning.</translation>
     </message>
     <message>
-        <location line="-1677"/>
+        <location line="-1682"/>
         <source>You joined this room.</source>
         <translation>Du gick med i detta rum.</translation>
     </message>
@@ -4254,7 +4266,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+2228"/>
+        <location line="+2233"/>
         <source>%2 revoked the invite to %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4288,7 +4300,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,7 +4541,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5442,7 +5454,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished">Ingen krypterad privat chatt med denna användare kunde hittas. Skapa en krypterad privat chatt med användaren och försök igen.</translation>
     </message>
@@ -5511,7 +5523,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Igår</translation>
     </message>
@@ -5519,7 +5531,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Personer</translation>
     </message>
@@ -5559,10 +5571,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Flaggor</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Du skickade ett ljudklipp</translation>
     </message>
@@ -5622,19 +5642,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 skickade en notis</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Du: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5644,7 +5676,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Du skickade ett krypterat meddelande</translation>
     </message>
diff --git a/resources/langs/nheko_tr.ts b/resources/langs/nheko_tr.ts
index bf44770c82794bf79bd4826425ac0e44208b3802..6606fabc7fbe6fe540967adf799753199ca2067c 100644
--- a/resources/langs/nheko_tr.ts
+++ b/resources/langs/nheko_tr.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Bütün ekran</translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Kullanıcı davet edilemedi: %1</translation>
     </message>
@@ -1324,7 +1324,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1568,7 +1568,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1578,7 +1578,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1889,7 +1889,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2103,12 +2103,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3139,7 +3145,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3227,12 +3233,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3314,13 +3320,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3350,7 +3356,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3743,7 +3755,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3823,7 +3835,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3894,7 +3906,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3920,7 +3932,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4282,7 +4294,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4486,7 +4498,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4637,7 +4649,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5430,7 +5442,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5499,7 +5511,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5507,7 +5519,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">İnsanlar</translation>
     </message>
@@ -5547,10 +5559,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Bayraklar</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5610,19 +5630,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5632,7 +5664,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_uk.ts b/resources/langs/nheko_uk.ts
index 8160248c62f5b9c4a325f77e46ac417585f39675..58907eb9a535d67dfda435b57ff2dd2d4c1602ac 100644
--- a/resources/langs/nheko_uk.ts
+++ b/resources/langs/nheko_uk.ts
@@ -215,17 +215,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>Весь екран</translation>
     </message>
@@ -233,7 +233,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>Не вдалося запросити користувача: %1</translation>
     </message>
@@ -1329,7 +1329,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1573,7 +1573,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>Усі файли (*)</translation>
     </message>
@@ -1583,7 +1583,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1894,7 +1894,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>Змінити</translation>
     </message>
@@ -2108,12 +2108,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 надіслав зашифроване повідомлення</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 відповів: %2</translation>
@@ -3146,7 +3152,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished">Налаштування кімнати</translation>
     </message>
@@ -3236,12 +3242,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished">Змінити</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished">Змінити список кімнат, через які користувачі можуть приєднатися до цієї кімнати. Зазвичай це офіційна спільнота цієї кімнати.</translation>
     </message>
@@ -3323,13 +3329,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished">Налаштувати</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished">Вибрати події, які потрібно приховати в цій кімнаті</translation>
     </message>
@@ -3359,7 +3365,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished">Наскрізне шифрування</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished">Дозволи</translation>
     </message>
@@ -3754,7 +3766,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished">Частина нитки розмови</translation>
     </message>
@@ -3834,13 +3846,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>Помилка редагування повідомлення: %1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>Не вдалося зашифрувати подію, надсилання перервано!</translation>
@@ -3866,7 +3878,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>Зберегти файл</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4200,7 +4212,7 @@ Reason: %4</source>
         <translation>%1 відредагував свій стукіт.</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4265,7 +4277,7 @@ Reason: %4</source>
         <translation>Ви приєдналися до цієї кімнати.</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 зробив так, щоб ця кімната потребувала запрошення, щоб приєднатися.</translation>
     </message>
@@ -4304,7 +4316,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4510,7 +4522,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>Немає доступних потоків реєстрації!</translation>
     </message>
@@ -4547,7 +4559,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>Вийти з пристрою %1</translation>
     </message>
@@ -5470,7 +5482,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Зашифрований приватний чат з цим користувачем не знайдено. Створіть зашифрований приватний чат з цим користувачем і спробуйте ще раз.</translation>
     </message>
@@ -5539,7 +5551,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>Вчора</translation>
     </message>
@@ -5547,7 +5559,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished">Люди</translation>
     </message>
@@ -5587,10 +5599,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished">Прапори</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>Ви надіслали аудіозапис</translation>
     </message>
@@ -5650,19 +5670,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 надіслав сповіщення</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>Ви: %1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5672,7 +5704,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>Ви надіслали зашифроване повідомлення</translation>
     </message>
diff --git a/resources/langs/nheko_vi.ts b/resources/langs/nheko_vi.ts
index b708da9886a772479ac45bfcfd8e38db517e3355..c4bd4a30557b5d0a7990635c3e185dafb565ef1a 100644
--- a/resources/langs/nheko_vi.ts
+++ b/resources/langs/nheko_vi.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -236,7 +236,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1320,7 +1320,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1564,7 +1564,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1574,7 +1574,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1885,7 +1885,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2099,12 +2099,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3135,7 +3141,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3223,12 +3229,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,13 +3316,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3346,7 +3352,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3739,7 +3751,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3819,7 +3831,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+712"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+715"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3890,7 +3902,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3916,7 +3928,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4278,7 +4290,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4482,7 +4494,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4633,7 +4645,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5426,7 +5438,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5495,7 +5507,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5503,7 +5515,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5543,10 +5555,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5606,19 +5626,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5628,7 +5660,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts
index 6c341cf95b47c093a26c9150d0f0a28c6260df9d..a6c5f184a0acc5996eabed55c28daba97fea41d7 100644
--- a/resources/langs/nheko_zh_CN.ts
+++ b/resources/langs/nheko_zh_CN.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation>X11</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation>PipeWire</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation>整个屏幕</translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation>未能邀请用户:%1</translation>
     </message>
@@ -1324,7 +1324,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation>和账户关联的表情包</translation>
     </message>
@@ -1568,12 +1568,12 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>All Files (*)</source>
         <translation>所有文件 (*)</translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation>无法获取用户 %1</translation>
     </message>
@@ -1583,7 +1583,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation>上传 “%1” 失败</translation>
     </message>
     <message>
-        <location line="-955"/>
+        <location line="-965"/>
         <source>Select file(s)</source>
         <translation>选择文件</translation>
     </message>
@@ -1828,7 +1828,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MediaUpload</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+801"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+811"/>
         <location line="+35"/>
         <source>Failed to upload media. Please try again.</source>
         <translation>未能上传媒体。请再试一次。</translation>
@@ -1893,7 +1893,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation>编辑</translation>
     </message>
@@ -2107,12 +2107,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation>%1 发送了一条加密消息</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation>%1 回复:%2</translation>
@@ -3143,7 +3149,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation>聊天室设置</translation>
     </message>
@@ -3231,12 +3237,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation>更改</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation>更改用户可以加入此聊天室的聊天室列表。通常这是此聊天室的官方社区。</translation>
     </message>
@@ -3318,13 +3324,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation>配置</translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation>选择在此聊天室中要隐藏的事件</translation>
     </message>
@@ -3354,7 +3360,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation>端到端加密</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation>权限</translation>
     </message>
@@ -3749,7 +3761,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation>消息列的一部分</translation>
     </message>
@@ -3829,13 +3841,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation>删除消息失败:%1</translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation>未能加密事件,发送中止!</translation>
@@ -3861,7 +3873,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation>保存文件</translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -4185,7 +4197,7 @@ Reason: %4</source>
         <translation>%1 删除了其加入请求。</translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation>%1 更改了允许在此聊天室使用的服务器。</translation>
     </message>
@@ -4250,7 +4262,7 @@ Reason: %4</source>
         <translation>你已加入此聊天室。</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation>%1 使此聊天室需要邀请才能加入。</translation>
     </message>
@@ -4289,7 +4301,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation>%1 的状态消息</translation>
     </message>
@@ -4493,7 +4505,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation>没有可用的注册流程!</translation>
     </message>
@@ -4528,7 +4540,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation>退出设备 %1</translation>
     </message>
@@ -5455,7 +5467,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>未找到与该用户的加密私人聊天。创建与该用户的加密私人聊天,然后重试。</translation>
     </message>
@@ -5524,7 +5536,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation>昨天</translation>
     </message>
@@ -5532,7 +5544,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation>人物</translation>
     </message>
@@ -5572,10 +5584,18 @@ This setting will take effect upon restart.</source>
         <translation>旗帜</translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation>你发送了一个音频片段</translation>
     </message>
@@ -5635,19 +5655,31 @@ This setting will take effect upon restart.</source>
         <translation>%1 发送了一个通知</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation>你:%1</translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation>%1:%2</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation>你发送了一个聊天特效</translation>
     </message>
@@ -5657,7 +5689,12 @@ This setting will take effect upon restart.</source>
         <translation>%1 发送了一个聊天特效</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation>你发送了一条加密消息</translation>
     </message>
diff --git a/resources/langs/nheko_zh_Hant.ts b/resources/langs/nheko_zh_Hant.ts
index edee9730b162f3230baf5aa99fab78d562cb9b3d..e61a40416fec35ed49c153ec0a8462f85fe22108 100644
--- a/resources/langs/nheko_zh_Hant.ts
+++ b/resources/langs/nheko_zh_Hant.ts
@@ -213,17 +213,17 @@
 <context>
     <name>CallManager</name>
     <message>
-        <location filename="../../src/voip/CallManager.cpp" line="+882"/>
+        <location filename="../../src/voip/CallManager.cpp" line="+895"/>
         <source>X11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+6"/>
         <source>PipeWire</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+19"/>
         <source>Entire screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -231,7 +231,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+116"/>
+        <location filename="../../src/ChatPage.cpp" line="+118"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1320,7 +1320,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>GridImagePackModel</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="+310"/>
+        <location filename="../../src/GridImagePackModel.cpp" line="+285"/>
         <source>Account Pack</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1564,7 +1564,7 @@ You may optionally provide a reason for others to accept your knock:</source>
 <context>
     <name>InputBar</name>
     <message>
-        <location filename="../../src/timeline/InputBar.cpp" line="+423"/>
+        <location filename="../../src/timeline/InputBar.cpp" line="+424"/>
         <source>Select file(s)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1574,7 +1574,7 @@ You may optionally provide a reason for others to accept your knock:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+615"/>
+        <location line="+625"/>
         <source>Failed to fetch user %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1885,7 +1885,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>MessageView</name>
     <message>
-        <location filename="../qml/MessageView.qml" line="+203"/>
+        <location filename="../qml/MessageView.qml" line="+216"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2099,12 +2099,18 @@ Example: https://yourserver.example.com:8787</source>
     <name>NotificationsManager</name>
     <message>
         <location filename="../../src/notifications/Manager.cpp" line="+22"/>
-        <location filename="../../src/notifications/ManagerMac.cpp" line="+83"/>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="+90"/>
         <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+12"/>
+        <source>%1 replied with a spoiler.</source>
+        <comment>Format a reply in a notification. %1 is the sender.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
         <source>%1 replied: %2</source>
         <comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
         <translation type="unfinished"></translation>
@@ -3135,7 +3141,7 @@ Example: https://yourserver.example.com:8787</source>
 <context>
     <name>RoomSettingsDialog</name>
     <message>
-        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+26"/>
+        <location filename="../qml/dialogs/RoomSettingsDialog.qml" line="+27"/>
         <source>Room Settings</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3223,12 +3229,12 @@ Example: https://yourserver.example.com:8787</source>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+242"/>
+        <location line="+245"/>
         <source>Change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-244"/>
         <source>Change the list of rooms users can join this room via. Usually this is the official community of this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,13 +3316,13 @@ Example: https://yourserver.example.com:8787</source>
     <message>
         <location line="+11"/>
         <location line="+18"/>
-        <location line="+60"/>
+        <location line="+63"/>
         <location line="+12"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-89"/>
+        <location line="-92"/>
         <source>Select events to hide in this room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3346,7 +3352,13 @@ Example: https://yourserver.example.com:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location line="+1"/>
+        <source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
+                                Please take note that it can&apos;t be disabled afterwards.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3739,7 +3751,7 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineDefaultMessageStyle</name>
     <message>
-        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+157"/>
+        <location filename="../qml/TimelineDefaultMessageStyle.qml" line="+161"/>
         <source>Part of a thread</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3819,13 +3831,13 @@ If you choose verify, you need to have the other device available. If you choose
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+1593"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1596"/>
         <location line="+17"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+121"/>
+        <location line="+122"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
         <translation type="unfinished"></translation>
@@ -3851,7 +3863,7 @@ If you choose verify, you need to have the other device available. If you choose
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+340"/>
+        <location line="+344"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -4174,7 +4186,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-2293"/>
+        <location line="-2298"/>
         <source>%1 changed which servers are allowed in this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4239,7 +4251,7 @@ Reason: %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1017"/>
         <source>%1 made this room require an invitation to join.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4278,7 +4290,7 @@ Reason: %4</source>
 <context>
     <name>TimelineSectionHeader</name>
     <message>
-        <location filename="../qml/TimelineSectionHeader.qml" line="+138"/>
+        <location filename="../qml/TimelineSectionHeader.qml" line="+134"/>
         <source>%1&apos;s status message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4482,7 +4494,7 @@ Reason: %4</source>
 <context>
     <name>UIA</name>
     <message>
-        <location filename="../../src/ui/UIA.cpp" line="+57"/>
+        <location filename="../../src/ui/UIA.cpp" line="+58"/>
         <source>No available registration flows!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,7 +4529,7 @@ Reason: %4</source>
 <context>
     <name>UserProfile</name>
     <message>
-        <location filename="../../src/ui/UserProfile.cpp" line="+217"/>
+        <location filename="../../src/ui/UserProfile.cpp" line="+218"/>
         <source>Sign out device %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5426,7 +5438,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>VerificationManager</name>
     <message>
-        <location filename="../../src/encryption/VerificationManager.cpp" line="+140"/>
+        <location filename="../../src/encryption/VerificationManager.cpp" line="+143"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5495,7 +5507,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+341"/>
+        <location filename="../../src/Utils.cpp" line="+374"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5503,7 +5515,7 @@ This setting will take effect upon restart.</source>
 <context>
     <name>emoji-catagory</name>
     <message>
-        <location filename="../../src/GridImagePackModel.cpp" line="-290"/>
+        <location filename="../../src/emoji/Emoji.cpp" line="+13"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5543,10 +5555,18 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>macosNotification</name>
+    <message>
+        <location filename="../../src/notifications/ManagerMac.cpp" line="-12"/>
+        <source>Message contains spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="-271"/>
+        <location filename="../../src/Utils.cpp" line="-303"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5606,19 +5626,31 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
-        <location line="+16"/>
+        <location line="+6"/>
+        <location line="+26"/>
+        <source>You sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <location line="+26"/>
+        <source>%1 sent a spoiler.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+26"/>
         <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-14"/>
-        <location line="+17"/>
+        <location line="-24"/>
+        <location line="+27"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location line="-21"/>
         <source>You sent a chat effect</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5628,7 +5660,12 @@ This setting will take effect upon restart.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+23"/>
+        <source>* %1 spoils something.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/src/Utils.cpp b/src/Utils.cpp
index b4d454726be72409dcb9b252420e35d803cad5a4..8b8a11dcf8c98166bdc8327d5b50a282949e44f9 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -45,9 +45,10 @@
 namespace {
 template<class T>
 QString
-messageDescription(const QString &username = QString(),
-                   const QString &body     = QString(),
-                   const bool isLocal      = false)
+messageDescription(const QString &username,
+                   const QString &body,
+                   const bool isLocal,
+                   bool containsSpoiler)
 {
     using Audio         = mtx::events::RoomEvent<mtx::events::msg::Audio>;
     using Emote         = mtx::events::RoomEvent<mtx::events::msg::Emote>;
@@ -105,6 +106,16 @@ messageDescription(const QString &username = QString(),
                                                "%1 sent a notification")
               .arg(username);
     } else if (std::is_same<T, Text>::value || std::is_same<T, Unknown>::value) {
+        if (containsSpoiler) {
+            if (isLocal)
+                return QCoreApplication::translate("message-description sent:",
+                                                   "You sent a spoiler.");
+            else
+                return QCoreApplication::translate("message-description sent:",
+                                                   "%1 sent a spoiler.")
+                  .arg(username);
+        }
+
         if (isLocal)
             return QCoreApplication::translate("message-description sent:", "You: %1").arg(body);
         else
@@ -121,6 +132,16 @@ messageDescription(const QString &username = QString(),
                                                    "%1 sent a chat effect")
                   .arg(username);
         } else {
+            if (containsSpoiler) {
+                if (isLocal)
+                    return QCoreApplication::translate("message-description sent:",
+                                                       "You sent a spoiler.");
+                else
+                    return QCoreApplication::translate("message-description sent:",
+                                                       "%1 sent a spoiler.")
+                      .arg(username);
+            }
+
             if (isLocal)
                 return QCoreApplication::translate("message-description sent:", "You: %1")
                   .arg(body);
@@ -129,6 +150,12 @@ messageDescription(const QString &username = QString(),
                   .arg(username, body);
         }
     } else if (std::is_same<T, Emote>::value) {
+        if (containsSpoiler) {
+            return QCoreApplication::translate("message-description sent:",
+                                               "* %1 spoils something.")
+              .arg(username);
+        }
+
         return QStringLiteral("* %1 %2").arg(username, body);
     } else if (std::is_same<T, Encrypted>::value) {
         if (isLocal)
@@ -178,16 +205,22 @@ createDescriptionInfo(const Event &event, const QString &localUser, const QStrin
     const auto username = displayName;
     const auto ts       = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
     auto body           = mtx::accessors::body(event);
-    if (mtx::accessors::relations(event).reply_to())
-        body = utils::stripReplyFromBody(body);
-
-    return DescInfo{
-      QString::fromStdString(msg.event_id),
-      sender,
-      messageDescription<T>(username, QString::fromStdString(body), sender == localUser),
-      utils::descriptiveTime(ts),
-      msg.origin_server_ts,
-      ts};
+    auto formatted_body = mtx::accessors::formatted_body(event);
+    if (mtx::accessors::relations(event).reply_to()) {
+        body           = utils::stripReplyFromBody(body);
+        formatted_body = utils::stripReplyFromFormattedBody(formatted_body);
+    }
+
+    // Simplistic heuristic
+    bool containsSpoiler = formatted_body.find("<span data-mx-spoiler") != formatted_body.npos;
+
+    return DescInfo{QString::fromStdString(msg.event_id),
+                    sender,
+                    messageDescription<T>(
+                      username, QString::fromStdString(body), sender == localUser, containsSpoiler),
+                    utils::descriptiveTime(ts),
+                    msg.origin_server_ts,
+                    ts};
 }
 
 std::string
@@ -402,7 +435,7 @@ utils::getMessageDescription(const mtx::events::collections::TimelineEvents &eve
         DescInfo info;
         info.userid = sender;
         info.body   = QStringLiteral(" %1").arg(
-          messageDescription<Encrypted>(username, QLatin1String(""), sender == localUser));
+          messageDescription<Encrypted>(username, QLatin1String(""), sender == localUser, false));
         info.timestamp       = msg->origin_server_ts;
         info.descriptiveTime = utils::descriptiveTime(ts);
         info.event_id        = QString::fromStdString(msg->event_id);
diff --git a/src/notifications/Manager.cpp b/src/notifications/Manager.cpp
index 895beaf7876518998b7ca5741491b0e97d239df3..d15eea5198f243312d86f7fda0e38c30f65a245e 100644
--- a/src/notifications/Manager.cpp
+++ b/src/notifications/Manager.cpp
@@ -22,14 +22,31 @@ NotificationsManager::getMessageTemplate(const mtx::responses::Notification &not
         return tr("%1 sent an encrypted message").arg(sender);
     }
 
-    if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) {
-        return QStringLiteral("* %1 %2").arg(sender);
-    } else if (utils::isReply(notification.event)) {
-        return tr("%1 replied: %2",
-                  "Format a reply in a notification. %1 is the sender, %2 the message")
-          .arg(sender);
+    bool containsSpoiler =
+      mtx::accessors::formatted_body(notification.event).find("<span data-mx-spoiler") !=
+      std::string::npos;
+
+    if (containsSpoiler) {
+        // Because we skip the %2 here, this might cause a warning in some cases.
+        if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) {
+            return QStringLiteral("* %1 spoils something.").arg(sender);
+        } else if (utils::isReply(notification.event)) {
+            return tr("%1 replied with a spoiler.",
+                      "Format a reply in a notification. %1 is the sender.")
+              .arg(sender);
+        } else {
+            return QStringLiteral("%1 sent a spoiler.").arg(sender);
+        }
     } else {
-        return QStringLiteral("%1: %2").arg(sender);
+        if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) {
+            return QStringLiteral("* %1 %2").arg(sender);
+        } else if (utils::isReply(notification.event)) {
+            return tr("%1 replied: %2",
+                      "Format a reply in a notification. %1 is the sender, %2 the message")
+              .arg(sender);
+        } else {
+            return QStringLiteral("%1: %2").arg(sender);
+        }
     }
 }
 
diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp
index 11a7c1a180c7b534a3357c48594355168b28ae7f..75ba1886730092ae924f0c1dc62439a535381a9e 100644
--- a/src/notifications/ManagerLinux.cpp
+++ b/src/notifications/ManagerLinux.cpp
@@ -107,7 +107,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
     QString template_ = getMessageTemplate(notification);
     // TODO: decrypt this message if the decryption setting is on in the UserSettings
     if (std::holds_alternative<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
-          notification.event)) {
+          notification.event) ||
+        !template_.contains("%2")) {
         postNotif(template_);
         return;
     }
@@ -115,7 +116,7 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
     if (hasMarkup_) {
         if (hasImages_ &&
             (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image ||
-             mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image)) {
+             mtx::accessors::event_type(notification.event) == mtx::events::EventType::Sticker)) {
             MxcImageProvider::download(
               QString::fromStdString(mtx::accessors::url(notification.event))
                 .remove(QStringLiteral("mxc://")),
diff --git a/src/notifications/ManagerMac.cpp b/src/notifications/ManagerMac.cpp
index 627e931575a719e9ff71475a9924266b474b4515..ee5639e40f6c3439dd4bde5983f622e3fceb6371 100644
--- a/src/notifications/ManagerMac.cpp
+++ b/src/notifications/ManagerMac.cpp
@@ -4,6 +4,7 @@
 
 #include "Manager.h"
 
+#include <QCoreApplication>
 #include <QRegularExpression>
 #include <QTextDocumentFragment>
 
@@ -19,7 +20,13 @@
 static QString
 formatNotification(const mtx::responses::Notification &notification)
 {
-    return utils::stripReplyFallbacks(notification.event, {}, {}).quoted_body;
+    auto fallbacks = utils::stripReplyFallbacks(notification.event, {}, {});
+
+    bool containsSpoiler = fallbacks.quoted_formatted_body.contains("<span data-mx-spoiler");
+    if (containsSpoiler)
+        return QCoreApplication::translate("macosNotification", "Message contains spoiler.");
+    else
+        return fallbacks.quoted_body;
 }
 
 NotificationsManager::NotificationsManager(QObject *parent)
diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp
index f1d3797b815ee83045bbd6e5cf4ee4c086904c31..a69afa4e8a0519ddbb877f931ba4c3bd0ebade1f 100644
--- a/src/notifications/ManagerWin.cpp
+++ b/src/notifications/ManagerWin.cpp
@@ -70,7 +70,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
     auto formatNotification = [this, notification] {
         const auto template_ = getMessageTemplate(notification);
         if (std::holds_alternative<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
-              notification.event)) {
+              notification.event) ||
+            !template_.contains("%2")) {
             return template_;
         }