summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2024-05-16 12:53:34 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2024-05-16 13:12:37 +0200
commit61509792706bf39860ee52bd92ca04f74af112bd (patch)
tree97c11f9e53d6331accd8195a6eb4a943a680765f
parentWindows screenshare/video call support, general call improvements (#1725) (diff)
downloadnheko-61509792706bf39860ee52bd92ca04f74af112bd.tar.xz
Don't show spoilers in sidebar or notifications if possible
fixes #1247
-rw-r--r--resources/langs/nheko_ar.ts107
-rw-r--r--resources/langs/nheko_ca.ts103
-rw-r--r--resources/langs/nheko_cs.ts103
-rw-r--r--resources/langs/nheko_de.ts107
-rw-r--r--resources/langs/nheko_el.ts103
-rw-r--r--resources/langs/nheko_en.ts107
-rw-r--r--resources/langs/nheko_eo.ts107
-rw-r--r--resources/langs/nheko_es.ts107
-rw-r--r--resources/langs/nheko_et.ts111
-rw-r--r--resources/langs/nheko_fa.ts107
-rw-r--r--resources/langs/nheko_fi.ts111
-rw-r--r--resources/langs/nheko_fr.ts107
-rw-r--r--resources/langs/nheko_hu.ts107
-rw-r--r--resources/langs/nheko_id.ts111
-rw-r--r--resources/langs/nheko_ie.ts103
-rw-r--r--resources/langs/nheko_it.ts107
-rw-r--r--resources/langs/nheko_ja.ts107
-rw-r--r--resources/langs/nheko_ml.ts103
-rw-r--r--resources/langs/nheko_nl.ts107
-rw-r--r--resources/langs/nheko_pl.ts107
-rw-r--r--resources/langs/nheko_pt_BR.ts103
-rw-r--r--resources/langs/nheko_pt_PT.ts107
-rw-r--r--resources/langs/nheko_ro.ts107
-rw-r--r--resources/langs/nheko_ru.ts107
-rw-r--r--resources/langs/nheko_si.ts103
-rw-r--r--resources/langs/nheko_sr_Latn.ts103
-rw-r--r--resources/langs/nheko_sv.ts107
-rw-r--r--resources/langs/nheko_tr.ts103
-rw-r--r--resources/langs/nheko_uk.ts107
-rw-r--r--resources/langs/nheko_vi.ts103
-rw-r--r--resources/langs/nheko_zh_CN.ts111
-rw-r--r--resources/langs/nheko_zh_Hant.ts107
-rw-r--r--src/Utils.cpp61
-rw-r--r--src/notifications/Manager.cpp31
-rw-r--r--src/notifications/ManagerLinux.cpp5
-rw-r--r--src/notifications/ManagerMac.cpp9
-rw-r--r--src/notifications/ManagerWin.cpp3
37 files changed, 2376 insertions, 1133 deletions
diff --git a/resources/langs/nheko_ar.ts b/resources/langs/nheko_ar.ts
index 06464184..15f2c636 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>
@@ -5604,9 +5616,17 @@ This setting will take effect upon restart.</source>
     </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 031c03c8..0ed4895a 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 715eb039..070994d7 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>
@@ -5568,9 +5580,17 @@ This setting will take effect upon restart.</source>
     </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 7c754e24..eb043ca2 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>
@@ -5584,9 +5596,17 @@ Diese Einstellung benötigt einen Neustart von Nheko.</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 4ab1bc02..83a043ce 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 17dceee0..5ea03de2 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>
@@ -5586,9 +5598,17 @@ This setting will take effect upon restart.</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 0eece2bf..d7c82c13 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>
@@ -5595,9 +5607,17 @@ This setting will take effect upon restart.</source>
     </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 ea4e932b..cd492fee 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>
@@ -5591,9 +5603,17 @@ Esta configuración tendrá efecto al reiniciar.</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 bcb98b8d..113e9b33 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>
@@ -5586,9 +5598,17 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.</transl
     </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 9dd860b4..ba3660e1 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>
@@ -5544,9 +5556,17 @@ This setting will take effect upon restart.</source>
     </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 7e54a6e8..bd97c346 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>
@@ -5578,9 +5590,17 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen.</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 1bfa2f79..2dec7325 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>
@@ -5585,9 +5597,17 @@ Cette fonctionnalité prendra effet au prochain redémarrage de l&apos;applicati
     </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 6a12b68d..4cf3def6 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>
@@ -5552,9 +5564,17 @@ This setting will take effect upon restart.</source>
     </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 50f25fe9..717b8c85 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>
@@ -5573,9 +5585,17 @@ Pengaturan ini akan ditetapkan saat dimulai ulang.</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 eba701ef..ae280fcf 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 1e44a733..61a3520c 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 4267dad8..2d853b1a 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>
@@ -5544,9 +5556,17 @@ This setting will take effect upon restart.</source>
     </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 608ad3d7..e533e03c 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 69a166f4..c9f9bfe7 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>
@@ -5587,9 +5599,17 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.</translati
     </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 863a2791..d936c0ee 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>
@@ -5590,9 +5602,17 @@ To ustawienie wejdzie w życie po restarcie aplikacji.</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 7e7fa5d0..ffe1729b 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 2fe5a773..0a2d1ae3 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>
@@ -5566,9 +5578,17 @@ This setting will take effect upon restart.</source>
     </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 e5ee0500..35c0025d 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>
@@ -5568,9 +5580,17 @@ This setting will take effect upon restart.</source>
     </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 aea7e013..71460f6a 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>
@@ -5572,9 +5584,17 @@ This setting will take effect upon restart.</source>
     </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 ef140984..33970c45 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>
@@ -5556,9 +5568,17 @@ This setting will take effect upon restart.</source>
     </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 2c4b22e3..0a2ad943 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>
@@ -5568,9 +5580,17 @@ This setting will take effect upon restart.</source>
     </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 9e57fba0..61209952 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>
@@ -5560,9 +5572,17 @@ This setting will take effect upon restart.</source>
     </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 bf44770c..6606fabc 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>
@@ -5548,9 +5560,17 @@ This setting will take effect upon restart.</source>
     </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 8160248c..58907eb9 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>
@@ -5588,9 +5600,17 @@ This setting will take effect upon restart.</source>
     </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 b708da98..c4bd4a30 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>
@@ -5544,9 +5556,17 @@ This setting will take effect upon restart.</source>
     </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 6c341cf9..a6c5f184 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>
@@ -5573,9 +5585,17 @@ This setting will take effect upon restart.</source>
     </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 edee9730..e61a4041 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>
@@ -5544,9 +5556,17 @@ This setting will take effect upon restart.</source>
     </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 b4d45472..8b8a11dc 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 895beaf7..d15eea51 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 11a7c1a1..75ba1886 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 627e9315..ee5639e4 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 f1d3797b..a69afa4e 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_;
         }