CHANGELOG

NeonChat 2D v20

★ Edition SwhJRJ & MINOT Jean et Henriette ★
(HOMMAGE EDITION)
SwhJRJ (1955-2023) · Mentor en informatique
Jean MINOT (1925-2003) · Papy
Henriette MINOT (1928-2012) · Mamie
Chaque ligne porte votre souvenir. — Ludo
v16.2 → v28.25.55 · 20 mars 2026 · © Cypher-Net
675
Mots filtres
5
Bugs critiques
v28.25.55
Version
15
Patterns drague
7
Fichiers

v28.25.55 — Anti-Insulte IA + Romantisme + DM Surveilles

NOUVEAU
🛡
ANTI-INSULTE v28.25.55
675 mots filtres en 2 niveaux
WARN (72 mots) : merde, connard, connasse, ta gueule... → Mot censure, avertissement discret. PAS de kick meme en cas de recidive.
SEVERE (603 mots) : racisme, nudite, haine LGBT/trans, harcelement, menaces, politique extremisme, pedocriminalite, drogue → Censure + kick apres 2 recidives.
Categories: insultes graves, nudite/sexuel (74), racisme/xenophobie (80+), transidentite/LGBT haine (40+), harcelement/menaces (60+), politique/extremisme (65+), drogue (40+), pedocriminalite (20+, tolerance zero).
📄 serveur.js — FILTER_WARN + FILTER_SEVERE
💖
ROMANTISME
Romantisme autorise — Drague sexuelle interdite
AUTORISE : "je t'aime", "t'es belle/canon/magnifique", "celibataire", "on se voit ce soir", "je craque sur toi", "tu fais quoi demain".
INTERDIT : "t'es bonne/chaude", "ton snap/insta", "plan cul", "nudes", "cam sexy", meetic/tinder/badoo. Anti-drague: 1→warn, 2→mute, 3→kick.
📄 serveur.js — dragueRE[] (15 patterns)
📨
MESSAGES PRIVES
DM/PV surveilles — Insulte en DM = ban DM 5 jours
Les messages prives (/w pseudo msg) passent par le meme filtre anti-insulte que le chat public. Une insulte (WARN ou SEVERE) en DM entraine l'interdiction des messages prives pendant 5 jours. Log des DM consultable par l'admin (Bans → Surveillance DM). Fichier dm_bans.json persiste entre redemarrages.
📄 serveur.js — dmBans + logDm + /api/dm/*
📹
WEBCAM
Webcam complete + moderation + spectateurs H/F
Webcam integree au chat web + bouton dans CHAT.EXE. Verification d'age par IA (Groq gratuit, Ollama local, Claude, OpenAI). Mineurs -18 = webcam interdite. 3 kicks webcam = ban 72h. Comptage spectateurs Hommes/Femmes. Page admin Webcams avec stop d'urgence.
📄 serveur.js + chat.html + admin.html + Program.cs
📋
CLIENT
Regles affichees au demarrage du client
Popup "Regles de bonne conduite" au premier lancement de CHAT.EXE avec toutes les regles : romantisme OK, drague sexuelle non, insultes WARN vs SEVERE, DM surveilles, webcam mineurs, liens interdits, responsabilite.
📄 Program.cs (client) — ShowRulesOnStart()
♂♀♥
GENRE
Genre colore obligatoire — ♂ bleu, ♀ rose, ♥ cyan
Pseudo toujours colore par genre. Icone genre visible meme avec banniere. Profil: selecteur Homme/Femme/Couple.
📄 Program.cs + chat.html + serveur.js
🏷
BANNIERE
Banniere pseudo — 1 modif par mois (anti-usurpation)
Banniere pseudo modifiable 1 fois par mois. Cooldown 30 jours. Historique dans banner_history.json.
📄 serveur.js — banner_history.json
👮
BOT
Le Vigile — bot moderateur auto, non supprimable
Bot protege CypherNet dans tous les salons. 11 commandes (!regles !aide !signaler !calme !respect). 3 auto-messages.
📄 serveur.js — bot-vigile (protected:true)
🎨
DESIGN
Bannieres salons style Voila/Caramail
Bannieres colorees auto-generees (10 gradients). Texte blanc bold + ombre. Compteur connectes. Custom GIF/PNG uploadable.
📄 Program.cs + chat.html + webchat.html
🔄
MAJ AUTO
Mise a jour automatique + backup + rollback
MAJ auto au demarrage depuis neonirc.fr. Backup complet avant ecrasement. Rollback auto si crash. Fichiers proteges preserves.
📄 serveur.js + Program.cs — .backup-maj/
💰
MODELE
100% gratuit — appels aux dons toutes les 2h
Logiciel gratuit sans limitation. 39.99 EUR/an via PayPal supprime les appels aux dons. Raccourci bureau auto.
📄 serveur.js + COMPILER.bat
🔥

Bugs Critiques

5 FIXES
💀
CRASH SERVEUR
Serveur HTTP jamais créé
Le code avait un commentaire // Create server mais aucun appel à http.createServer(). Le serveur ne pouvait pas démarrer. Ajout de la création complète : serveur HTTP/HTTPS, body parser express.json(), CORS, fichiers statiques, et redirection HTTP→HTTPS.
- // Create server (HTTPS or HTTP)
- // (rien)
+ var server = SSL_ENABLED ? https.createServer(sslOpts, app) : http.createServer(app);
+ app.use(express.json({limit:'2mb'}));
+ app.use(express.static(path.join(__dirname,'public')));
📄 serveur.js — Section 9
👻
STDIN DÉDOUBLÉ
Double readline — lettres dupliquées au clavier
Deux readline.createInterface() sur process.stdin en parallèle (sections 5c et 40). Les lettres tapées se répartissaient aléatoirement entre les deux — pseudo illisible ("trtrtrttrtttttt"). Fusionné en un seul readline séquentiel : nom serveur → pseudo → démarrage.
- // Section 5c: rl2.question('Nom serveur...')
- // Section 40: rl.question('Pseudo...')
// ↑ deux readline simultanés = conflit stdin
+ // Section 40 UNIQUE: askServerName() → askOwner() → startListening()
📄 serveur.js — Sections 5c + 40
🐛
LOGIQUE CASSÉE
Anti-insultes : kick systématique au 1er message
Bug de précédence opérateur : warnCount >= cfg.maxWarns || 3 s'évaluait comme (warnCount >= cfg.maxWarns) || 3 → toujours truthy. Chaque message filtré déclenchait un kick immédiat.
- if(warnCount[pseudo] >= cfg.antiInsultMaxWarns || 3){
+ if(warnCount[pseudo] >= (cfg.antiInsultMaxWarns || 3)){
📄 serveur.js — Section 20 (Messages)
💧
FUITE MÉMOIRE
Net.Post — RequestStream jamais disposé
Chaque POST HTTP laissait le stream ouvert → accumulation de handles réseau. Ajout de using(var rs = r.GetRequestStream()).
- r.GetRequestStream().Write(d, 0, d.Length);
+ using(var rs = r.GetRequestStream()) rs.Write(d, 0, d.Length);
📄 Client/Program.cs — Net.Post()
📈
FUITE MÉMOIRE
HashSet "seen" : croissance infinie
Le HashSet<string> seen du client n'était jamais nettoyé. Après des heures de chat, il consommait des dizaines de Mo. Ajout d'un cap à 2000 entrées avec reset automatique.
+ if(seen.Count > 2000) { seen.Clear(); seen.Add("_gc_"); }
📄 Client/Program.cs — Poll()

Rapidité

6 AMÉLIORATIONS
🔄
-50% REQUÊTES
Endpoint combiné /api/rooms/:id/poll
Messages + users en 1 seule requête au lieu de 2 par cycle de poll. Le client utilise maintenant /poll?since=N → réduit de moitié le trafic réseau.
📄 serveur.js + Client/Program.cs
🗜️
COMPRESSION
Gzip sur toutes les réponses JSON
Ajout du module compression (niveau 6). Les réponses JSON volumineuses (liste salons, messages) sont compressées à ~30% de leur taille. Dégradation gracieuse si le module est absent.
📄 serveur.js + package.json
📦
CACHE
Cache HTTP sur fichiers statiques
ETag + maxAge sur les fichiers statiques : emoticons (7 jours), banners/decor/public (1 jour). Les clients ne re-téléchargent plus les emoticons à chaque connexion.
📄 serveur.js — Section 9 (Middleware)
🔍
SCAN LAN
Découverte réseau accélérée
Timeout TCP réduit de 400ms→250ms par IP, attente globale de 4s→3s. Le scan LAN des 254 adresses est ~30% plus rapide.
📄 Client/Program.cs — ScanServers()
🔗
RÉSEAU
KeepAlive + Expect100Continue
KeepAlive=true activé sur toutes les requêtes HTTP client → réutilisation des connexions TCP. Expect100Continue=false → supprime un aller-retour inutile sur chaque POST.
📄 Client/Program.cs — Net + App.Main()
⏱️
TIMEOUTS
Serveur timeouts augmentés
setTimeout : 30s→60s, ajout headersTimeout: 65s. Évite les déconnexions sur connexions lentes (3G, VPN). ConnectionLimit : 50→100.
📄 serveur.js — Section 12
🔧

Compatibilité

5 FIXES
🔒
TLS 1.3
Support TLS 1.3 sur client + serveur GUI
Ajout de SecurityProtocolType 12288 (TLS 1.3) et 3072 (TLS 1.2 explicite) en fallback cascade. Compatible Windows 11 + serveurs modernes.
📄 Client/Program.cs + Serveur/Program.cs
📚
COMPILATION
Référence System.Windows.Forms.dll manquante
Le client utilisait using SWF=System.Windows.Forms mais la DLL n'était pas référencée dans compile.bat → erreur de compilation silencieuse. Ajouté dans LANCER.bat.
📄 Client/LANCER.bat
📝
LANCER.BAT
Scripts BAT réécrits en pur ASCII
Les caractères Unicode (╔║╚★·) cassaient CMD même avec chcp 65001. Les chemins avec espaces (Ludovic MINOT) cassaient les redirections >>. Tout réécrit en ASCII pur + chemins relatifs après cd /d. Commande csc sur une seule ligne.
📄 Client/LANCER.bat + Serveur/LANCER.bat
LEGAL CHECK
Chiffrement : OK en accès local
Le check "Chiffrement" utilisait MODE==='desktop' qui échouait selon la config. Remplacé par isLocal(getIP(req)) — détecte directement si la requête vient de 127.0.0.1. Vrai check Logs ajouté (vérifie existence réelle des dossiers).
📄 serveur.js — /api/legal/check
🔀
FUSION SCRIPTS
compile.bat + INSTALLER.bat → LANCER.bat unique
Un seul script fait tout : élévation admin → Node.js (détection/install auto) → npm install → compilation C# → pare-feu → dossiers → démarrage serveur + GUI. Côté client : compilation → lancement. Un double-clic suffit.
📄 LANCER.bat (remplace compile.bat + INSTALLER.bat)

Rebranding v20

HOMMAGE EDITION
🏷️
IDENTITÉ
v16.2 "Jean MINOT" → v28.25.55 "SwhJRJ & MINOT Jean et Henriette"
Mise à jour complète sur 7 fichiers : titres fenêtres, headers, sidebar, IRC USER/VERSION/QUIT, console serveur, package.json, AssemblyInfo, API health, IA builtin, mentions légales, licence, pages PayPal, bannières console.
- VERSION = '2026.16.2-jean-minot'
+ VERSION = '2026.21.0-hommage-edition'
- protocol: 'neonchat2d-v16'
+ protocol: 'neonchat2d-v28.25.55'
- AssemblyVersion("2026.16.2.0")
+ AssemblyVersion("2026.26.0.0")
📄 7 fichiers — 0 référence v16 restante
📁

Fichiers modifiés

📄
Client/Program.cs · Client/LANCER.bat
Serveur/serveur.js · Serveur/Program.cs · Serveur/LANCER.bat
Serveur/package.json · Serveur/server.json
Supprimés : compile.bat INSTALLER.bat