diff --git a/config/config.json.default b/config/config.json.default
index 541f570a04784ef88e89bbb99cbb7529414ca6fd..9b70a96e9280ec59448ee9f300438bd81f5bec99 100644
--- a/config/config.json.default
+++ b/config/config.json.default
@@ -1,6 +1,7 @@
 {
     "locale": "de-DE",
     "commandPrefix": "!",
+    "maxMessageLength": "2000",
     "moderationChannelIds": [
         "0"
     ],
diff --git a/locale/de-DE.texts.json b/locale/de-DE.texts.json
index b10633ec9dbb084953669f51f95f10198565174b..74f5dd526d1c6a1c1f97b72b7b28954adfac6b09 100644
--- a/locale/de-DE.texts.json
+++ b/locale/de-DE.texts.json
@@ -28,6 +28,7 @@
     "informationUserExclusion": "Du möchtest irgendjemandem lieber nichts schenken, zum Beispiel, weil ihr eh gut befreundet seid? Dann darfst du hier bis zu drei Personen nennen (Discordname mit Tag, bspw. „Wichtelbot#6656“), die dir nicht mehr zugelost werden können. Wenn du niemanden ausschließen möchtest, schreibe einfach „-“.\n\nUnabhängig davon werde ich versuchen, dir kein Wichtelkind zuzuweisen, das du schon einmal bewichtelt hast.",
     "informationWishList": "Worüber freust du dich?\nDu kannst hier einen kleinen Text schreiben, was dir so gefällt oder ganz konkret eine Steam- oder Amazonwunschliste verlinken. Alles ist erlaubt, was deinem Wichtel dabei hilft, sich ein Bild zu machen, womit er dir eine Freude bereiten könnte.\n\nZusätzlich erhältst du später noch die Möglichkeit, Dinge auszuschließen, die du nicht magst und etwas ganz allgemein über dich zu erzählen.",
     "maybeResponse": "Ein Vielleicht gibts nicht! Die Weltherrschaft braucht eindeutige Ergebnisse!",
+    "messageTooLong": "Deine letzte Nachricht ist {var.messageLength} Zeichen lang. Erlaubt sind aber nur {var.maxLength} Zeichen. Kürze sie bitte und schicke mir dann den neuen Text.",
     "noCommandsAvailable": "Derzeit stehen keine besonderen Befehle zur Verfügung.",
     "notUnderstood": "Häää? Probiers nochmal.",
     "oldInformation": "Dies findet sich aktuell dazu in meiner Datenbank:\n>>> {var.informationValue}",
diff --git a/scripts/utility/config.ts b/scripts/utility/config.ts
index 690e94083c661572d29289506b88ef466c3a7ece..9bb55842e21c3bbd812e7ae9f6b9f5eeec3f1bd5 100644
--- a/scripts/utility/config.ts
+++ b/scripts/utility/config.ts
@@ -7,6 +7,7 @@ interface MainConfig
 {
     locale: string;
     commandPrefix: string;
+    maxMessageLength: number;
     moderationChannelIds: string[];
     allowedCountries: string[];
     currentEvent: WichtelEvent;
diff --git a/scripts/utility/localisation.ts b/scripts/utility/localisation.ts
index 9af55478f6d7a94745482fe3613317b803dc211b..779788d6d9b8c97aede0a392bb44e309ee4d9308 100644
--- a/scripts/utility/localisation.ts
+++ b/scripts/utility/localisation.ts
@@ -61,6 +61,7 @@ interface Texts
     informationUserExclusion: TokenString;
     informationWishList: TokenString;
     maybeResponse: TokenString;
+    messageTooLong: TokenString;
     noCommandsAvailable: TokenString;
     notUnderstood: TokenString;
     oldInformation: TokenString;
diff --git a/scripts/wichtelbot/message/messageHandler.ts b/scripts/wichtelbot/message/messageHandler.ts
index f7fa2aa9604bb4bfa8cd41942b067f54a149bcb2..05ec854bd401dde32f2579e8728a4d5724978712 100644
--- a/scripts/wichtelbot/message/messageHandler.ts
+++ b/scripts/wichtelbot/message/messageHandler.ts
@@ -213,6 +213,13 @@ export default class MessageHandler
             return;
         }
 
+        if (message.content.length > Config.main.maxMessageLength)
+        {
+            await this.generalModule.sendMessageTooLong(message);
+
+            return;
+        }
+
         if (message.channel.type == ChannelType.Server)
         {
             if (!message.content.startsWith(Config.main.commandPrefix))
@@ -255,8 +262,6 @@ export default class MessageHandler
                 //       Short: Instead of <"command parameters"> we use <stateA: "command", stateB: "parameters">.
                 message.hasParameters = false;
 
-                // FIXME: Catch all commands should check for the 2.000 character limit as Discord Nitro users can send more.
-
                 const commandCallResult = await this.tryToCallCommand(message, contact.state);
 
                 switch (commandCallResult)
diff --git a/scripts/wichtelbot/message/modules/generalModule.ts b/scripts/wichtelbot/message/modules/generalModule.ts
index 60aab5afe516fa2f8ef259aea0cd2aac10035fbb..eb367a8ce1cf7363420259dbb1f0f190cf0f18e0 100644
--- a/scripts/wichtelbot/message/modules/generalModule.ts
+++ b/scripts/wichtelbot/message/modules/generalModule.ts
@@ -194,4 +194,15 @@ export default class GeneralModule
             await message.reply(helpText);
         }
     }
+
+    public async sendMessageTooLong (message: Message): Promise<void>
+    {
+        const parameters = new KeyValuePairList();
+        parameters.addPair('messageLength', `${message.content.length}`);
+        parameters.addPair('maxLength', `${Config.main.maxMessageLength}`);
+
+        const answer = Localisation.texts.messageTooLong.process(message.author, parameters);
+
+        await message.reply(answer);
+    }
 }
diff --git a/tests/tests/wichtelbot.message.handler.ts b/tests/tests/wichtelbot.message.handler.ts
index 462c217f2d464ab79db4a5b88e400685f1ec29f8..a380c0d912fdce089d692585f99a3b839e2212df 100644
--- a/tests/tests/wichtelbot.message.handler.ts
+++ b/tests/tests/wichtelbot.message.handler.ts
@@ -5,6 +5,7 @@ import { assert } from 'chai';
 import Config from '../../scripts/utility/config';
 import ConfigTestUtility from '../utility/config';
 import Database from '../../scripts/wichtelbot/database';
+import { KeyValuePairList } from '../../scripts/utility/keyValuePair';
 import Localisation from '../../scripts/utility/localisation';
 import MessageHandler from '../../scripts/wichtelbot/message/messageHandler';
 
@@ -132,5 +133,32 @@ describe('message handler',
                 assert.strictEqual(called, true);
             }
         );
+
+        it('answers with messageTooLong if message is too long.',
+            async function ()
+            {
+                let called = false;
+                let author: User;
+
+                const resultCallback = async (text: string): Promise<void> => // eslint-disable-line @typescript-eslint/require-await
+                {
+                    const parameters = new KeyValuePairList();
+                    parameters.addPair('messageLength', `${message.content.length}`);
+                    parameters.addPair('maxLength', `${Config.main.maxMessageLength}`);
+
+                    assert.strictEqual(text, Localisation.texts.messageTooLong.process(author, parameters));
+                    called = true;
+                };
+
+                const message = new TestMessageWithFixedAuthor(resultCallback, resultCallback, resultCallback, ChannelType.Personal);
+                author = message.author;
+
+                message.content = 'a'.repeat(Config.main.maxMessageLength + 1);
+
+                await messageHandler.process(message);
+
+                assert.strictEqual(called, true);
+            }
+        );
     }
 );