From 830b60ae30ad1277a3e05a9471e421e20778914c Mon Sep 17 00:00:00 2001 From: JonathanMM Date: Sun, 27 Feb 2022 18:29:21 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9placement=20des=20fichiers=20=C3=A0=20pu?= =?UTF-8?q?blier=20dans=20le=20dossier=20public=20et=20ajout=20de=20docume?= =?UTF-8?q?ntation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +++-- docs/CreerListeMotsATrouver.md | 20 ++++++++++++++++++++ docs/InstallerUneInstance.md | 19 +++++++++++++++++++ package.json | 4 ++-- public/mots/index.html | 0 ts/instanceConfiguration.ts | 2 +- ts/server.ts | 6 +++--- tsconfig.json | 4 ++-- utils/majATrouver.js | 29 +++-------------------------- utils/melangerATrouver.js | 6 +++--- utils/nettoyageATrouver.js | 4 ++-- utils/trierATrouver.js | 2 +- 12 files changed, 59 insertions(+), 42 deletions(-) create mode 100644 docs/CreerListeMotsATrouver.md create mode 100644 docs/InstallerUneInstance.md create mode 100644 public/mots/index.html diff --git a/.gitignore b/.gitignore index 4173bcd..3545c9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ config/ data/* !data/mots.txt -js/ -mots/** +public/js/ +public/mots/** +!public/mots/index.html node_modules/ ts/mots/listeMotsATrouver.ts ts/mots/listeMotsProposables.* diff --git a/docs/CreerListeMotsATrouver.md b/docs/CreerListeMotsATrouver.md new file mode 100644 index 0000000..77b06b9 --- /dev/null +++ b/docs/CreerListeMotsATrouver.md @@ -0,0 +1,20 @@ +# Créer liste des mots à trouver + +Pour définir la liste des mots qui vont être utilisé par le système, il est nécessaire de créer un fichier data/motsATrouve.txt. Ce fichier doit contenir un mot par ligne, de préférence en minuscule. + +Puis, lancer la commande suivante : + +```sh +node utils/melangerATrouver.js +``` + +Ce script va vérifier que les mots se trouvent bien dans le dictionnaire, avant de mélanger le fichier et de le mettre dans le format attendu. Le résultat sera placé dans le même fichier, qui va être utilisé ensuite par le script quotidien ./cron.sh. Le mélange ne concernera que les mots qui ne sont pas sorti, à partir du surlendemain. + +## Règles du mélange + +Dans la mesure du possible, lors du mélange, les règles suivantes vont être respectées : + +- La longueur du mot est différente de celle du mot précédent, +- L'initial du mot est différente de l'initiale des cinq mots précédents. + +Le script tire un mot au hasard, et regarde s'il respecte les règles. Si oui, il est gardé, sinon, un autre est tiré. Au bout d'un certain nombre d'echec, le script abandonne, et va juste placer les mots non encore tiré à la fin du fichier. diff --git a/docs/InstallerUneInstance.md b/docs/InstallerUneInstance.md new file mode 100644 index 0000000..aeb99b5 --- /dev/null +++ b/docs/InstallerUneInstance.md @@ -0,0 +1,19 @@ +# Installer une instance + +Si vous souhaitez installer une instance du jeu, voici ce qu'il faut savoir : + +- L'ensemble des fichiers à exposer sont dans le dossier public/ +- Pour ajouter ou modifier le dictionnaire, consulter MettreAJourLeDictionnaire.md +- Pour faire une liste de mots à trouver, consulter CreerListeMotsATrouver.md + +Le système est prévu pour pouvoir être jouer avec un mot par jour. Il y a une date d'origine, inscrite dans ts/instanceConfiguration.ts, qui sert de référence pour savoir quel est le mot à tirer, ainsi que pour connaître le numéro de grille. + +La mise à jour du mot se fait en appelant chaque jour ./cron.sh. Ce script va préparer le fichier avec le mot du lendemain dans public/mots/ + +Au niveau de l'instance, il y a également un identifiant de partie, ce qui permet de faire tourner plusieurs parties en parallèle. Un identifiant de partie est indiqué dans ts/instanceConfiguration.ts, c'est ce qui est utilisé quand aucune partie précise n'est indiquée. Sinon, il suffit d'aller sur le site avec un paramètre à la fin de l'url. Après le croisillon (#), il faut mettre p=, suivi de l'identifiant de partie. Le tout doit être encodé en base64 afin d'éviter tout soucis. Si l'url contient plusieurs paramètres, ils doivent alors être séparé par slash (/) avant d'être encodé en base64. + +## Nom de l'instance + +Si vous souhaitez faire une instance public, merci de ne pas la nommer SUTOM, ou de mettre SUTOM dans son nom, afin d'éviter toute confusion. + +Les fichiers qui comportent le nom du jeu sont : public/index.html (deux occurences), ts/finDePartiePanel.ts (une occurence). Vous pouvez aussi adapter les règles qui se trouvent dans ts/reglesPanel.ts diff --git a/package.json b/package.json index 15aa8b2..e001a23 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start": "tsc && node js/server.js", - "start:dev": "tsc && node js/server.js & tsc-watch" + "start": "tsc && node public/js/server.js", + "start:dev": "tsc && node public/js/server.js & tsc-watch" }, "keywords": [ "wordle", diff --git a/public/mots/index.html b/public/mots/index.html new file mode 100644 index 0000000..e69de29 diff --git a/ts/instanceConfiguration.ts b/ts/instanceConfiguration.ts index 48b58fc..23fa210 100644 --- a/ts/instanceConfiguration.ts +++ b/ts/instanceConfiguration.ts @@ -1,4 +1,4 @@ export default class InstanceConfiguration { - public static readonly dateOrigine = new Date(2022, 0, 8); + public static readonly dateOrigine = new Date(2022, 0, 8); // Attention, c'est du js/ts, donc pour le mois, il faut faire -1, Janvier = 0 ! public static readonly idPartieParDefaut = "34ccc522-c264-4e51-b293-fd5bd60ef7aa"; } diff --git a/ts/server.ts b/ts/server.ts index c12d525..38d9621 100644 --- a/ts/server.ts +++ b/ts/server.ts @@ -8,9 +8,9 @@ const port = parseInt(String(process.env.SUTOM_PORT), 10) || 4000; (async () => { app.use("/", express.static("public/")); - app.use("/js", express.static("js/")); + app.use("/js", express.static("public/js/")); app.use("/ts", express.static("ts/")); - app.use("/mots", express.static("mots/")); + app.use("/mots", express.static("public/mots/")); app.use("/node_modules/requirejs/require.js", express.static("node_modules/requirejs/require.js")); // Vu que le serveur node est prévu pour du test, on va créer un mot du jour s'il n'existe pas @@ -24,7 +24,7 @@ const port = parseInt(String(process.env.SUTOM_PORT), 10) || 4000; let nomFichier = Buffer.from(InstanceConfiguration.idPartieParDefaut + "-" + datePartieStr, "utf-8").toString("base64"); - const adresseFichierMot = "mots/" + nomFichier + ".txt"; + const adresseFichierMot = "public/mots/" + nomFichier + ".txt"; fs.access(adresseFichierMot, fs.constants.F_OK, (err) => { if (err) { fs.writeFile(adresseFichierMot, "DIFFUSION", (err) => { diff --git a/tsconfig.json b/tsconfig.json index bcb5d06..e9645d1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ "sourceMap": true /* Generates corresponding '.map' file. */, //"outFile": "./js/index.js" /* Concatenate and emit output to single file. */, - "outDir": "./js/" /* Redirect output structure to the directory. */, + "outDir": "./public/js/" /* Redirect output structure to the directory. */, // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ @@ -59,6 +59,6 @@ "moduleResolution": "node" }, - "include": ["ts/*.ts", "ts/mots/listeMotsProposables.*.*.ts", "type/*"] + "include": ["ts/*.ts", "ts/mots/listeMotsProposables.*", "type/*"] } \ No newline at end of file diff --git a/utils/majATrouver.js b/utils/majATrouver.js index 7edb298..64efd7b 100644 --- a/utils/majATrouver.js +++ b/utils/majATrouver.js @@ -3,7 +3,7 @@ * Petit script qui nettoie le fichier des mots à trouver pour le mettre dans le format attendu par le système */ var fs = require("fs"); -var instanceConfiguration = require("../js/instanceConfiguration"); +var instanceConfiguration = require("../public/js/instanceConfiguration"); let aujourdhui = new Date().getTime(); let origine = instanceConfiguration.default.dateOrigine.getTime(); @@ -17,22 +17,6 @@ fs.readFile("data/motsATrouve.txt", "UTF8", function (erreur, contenu) { var dictionnaire = contenu.split("\n"); let motsFiges = dictionnaire.slice(0, maxFige + 1); - contenu = "export default class ListeMotsATrouver {\n"; - contenu += " public static readonly Liste: Array = [\n"; - contenu += motsFiges - .map( - (mot) => - '"' + - mot - .normalize("NFD") - .replace(/\p{Diacritic}/gu, "") - .toUpperCase() + - '",' - ) - .join("\n"); - contenu += "\n ]"; - contenu += "\n}"; - motsFiges .map((mot) => mot @@ -56,21 +40,14 @@ fs.readFile("data/motsATrouve.txt", "UTF8", function (erreur, contenu) { return resolve(Buffer.from(instanceConfiguration.default.idPartieParDefaut + "-" + datePartieStr, "utf-8").toString("base64")); }).then((nomFichier) => - fs.access("mots/" + nomFichier + ".txt", fs.constants.F_OK, (err) => { + fs.access("public/mots/" + nomFichier + ".txt", fs.constants.F_OK, (err) => { if (err) { // Dans ce cas, le fichier n'existe pas - fs.writeFile("mots/" + nomFichier + ".txt", mot, (err) => { + fs.writeFile("public/mots/" + nomFichier + ".txt", mot, (err) => { if (err) console.error(err); }); } }) ) ); - fs.writeFile("ts/mots/listeMotsATrouver.ts", contenu, function (err) { - if (err) { - console.error(err); - return; - } - //file written successfully - }); }); diff --git a/utils/melangerATrouver.js b/utils/melangerATrouver.js index def1952..2dd878f 100644 --- a/utils/melangerATrouver.js +++ b/utils/melangerATrouver.js @@ -4,8 +4,8 @@ */ var fs = require("fs"); -var listeMotsProposable = require("../js/mots/listeMotsProposables"); -var instanceConfiguration = require("../js/instanceConfiguration"); +var listeMotsProposable = require("../public/js/mots/listeMotsProposables"); +var instanceConfiguration = require("../public/js/instanceConfiguration"); function shuffle(array) { let currentIndex = array.length, randomIndex; @@ -36,7 +36,7 @@ fs.readFile("data/motsATrouve.txt", "UTF8", function (erreur, contenu) { var dictionnaire = contenu.split("\n").filter((mot) => mot.length > 0); let motsFiges = dictionnaire.slice(0, maxFige + 1); let nbEssais = 0; - const maxEssais = 20; + const maxEssais = 100; let traitementOk = false; let motsMelanges = dictionnaire.slice(maxFige + 1); let motsMelangesFige = [...motsFiges]; diff --git a/utils/nettoyageATrouver.js b/utils/nettoyageATrouver.js index 3fcc96e..cf547e7 100644 --- a/utils/nettoyageATrouver.js +++ b/utils/nettoyageATrouver.js @@ -3,8 +3,8 @@ * Petit script qui nettoie le fichier des mots à trouver pour le mettre dans le format attendu par le système */ var fs = require("fs"); -var listeMotsProposable = require("../js/mots/listeMotsProposables"); -var instanceConfiguration = require("../js/instanceConfiguration"); +var listeMotsProposable = require("../public/js/mots/listeMotsProposables"); +var instanceConfiguration = require("../public/js/instanceConfiguration"); function shuffle(array) { let currentIndex = array.length, randomIndex; diff --git a/utils/trierATrouver.js b/utils/trierATrouver.js index 35735f8..fb0e3d1 100644 --- a/utils/trierATrouver.js +++ b/utils/trierATrouver.js @@ -3,7 +3,7 @@ * Petit script qui nettoie le fichier des mots à trouver pour le mettre dans le format attendu par le système */ var fs = require("fs"); -var instanceConfiguration = require("../js/instanceConfiguration"); +var instanceConfiguration = require("../public/js/instanceConfiguration"); let aujourdhui = new Date().getTime(); let origine = instanceConfiguration.default.dateOrigine.getTime();