diff --git a/mn.py b/mn.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c97b757d82439d46affc20b53e6c9a8734a71c2
--- /dev/null
+++ b/mn.py
@@ -0,0 +1,90 @@
+import socket
+import sys
+import json
+import keyboard
+
+# Liste pour stocker les touches pressées pour former un message
+buffer = []
+
+# Nom d'utilisateur et destination du message
+user = ""
+destination = ""
+
+# Socket du client
+client_socket = None
+
+# Fonction appelée lorsqu'une touche est pressée
+def on_key_event(e):
+    # Si Ctrl+M est pressé, on demande à l'utilisateur d'entrer le message.
+    if e.name == 'm' and e.event_type == 'down' and keyboard.is_pressed('ctrl'):
+        clear_buffer()
+        print("Enter your message: ")
+        keyboard.hook(capture_keys)
+
+# Fonction pour capturer les touches pressées et les ajouter au buffer
+def capture_keys(e):
+    # Si Enter est pressé, on arrête de capturer les touches et on affiche le message
+    if e.name == 'enter' and e.event_type == 'down':
+        keyboard.unhook(capture_keys)
+        send_message()
+    else:
+        # Sinon, on ajoute la touche au buffer
+        if e.name == 'backspace':
+            remove_last_key()
+        else:
+            add_key_to_buffer(e)
+
+# Fonction pour démarrer le client
+def start_client():
+    global client_socket
+    global user
+    global destination
+    user = input("Enter your username: ")  # Demande le nom d'utilisateur
+    destination = input("Enter the destination username: ")  # Demande la destination du message
+    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Crée un socket
+    server_address = ('localhost', int(sys.argv[1])) if len(sys.argv) > 1 else ('localhost', 12345)
+    try:
+        client_socket.connect(server_address)  # Connecte au serveur
+        client_socket.settimeout(1)  # Définit une limite de temps pour la réception de données
+        print("Connected to server")
+        setup_keyboard_shortcuts()
+        receive_messages()
+    except ConnectionRefusedError:
+        print("Connection refused. Please make sure the server is running.")
+
+# Fonction pour envoyer le message
+def send_message():
+    message = ''.join(buffer[1:])  # Assemble les touches dans un message
+    data = json.dumps({"user": user, "destination": destination, "message": message})  # Formatte les données en JSON
+    client_socket.send(data.encode('utf-8'))  # Envoie les données au serveur
+
+# Fonction pour recevoir les messages du serveur
+def receive_messages():
+    while True:
+        try:
+            res = client_socket.recv(1024)  # Reçoit les données du serveur
+            if res:
+                print(f"Received message: {res.decode('utf-8')}")  # Affiche le message reçu
+        except socket.timeout:
+            continue
+
+# Fonction pour configurer les raccourcis clavier
+def setup_keyboard_shortcuts():
+    keyboard.add_hotkey('ctrl+q', lambda: sys.exit(0))  # Permet de quitter le programme avec Ctrl+Q
+    keyboard.on_press(on_key_event)  # Déclenche la fonction on_key_event lorsqu'une touche est pressée
+
+# Fonction pour ajouter une touche au buffer
+def add_key_to_buffer(e):
+    buffer.append({"space": " ", "backspace": ""}.get(e.name, e.name))
+
+# Fonction pour supprimer la dernière touche du buffer
+def remove_last_key():
+    if buffer:
+        buffer.pop()  # Supprime la dernière touche si c'est "backspace"
+
+# Fonction pour effacer le buffer
+def clear_buffer():
+    buffer.clear()
+
+if __name__ == "__main__":
+    start_client()  # Lance le client