Déplacement des fichiers à publier dans le dossier public et ajout de documentation

This commit is contained in:
JonathanMM 2022-02-27 18:29:21 +01:00
parent 6826a1c28f
commit 830b60ae30
12 changed files with 59 additions and 42 deletions

5
.gitignore vendored
View File

@ -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.*

View File

@ -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.

View File

@ -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

View File

@ -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",

0
public/mots/index.html Normal file
View File

View File

@ -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";
}

View File

@ -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) => {

View File

@ -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/*"]
}

View File

@ -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<string> = [\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
});
});

View File

@ -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];

View File

@ -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;

View File

@ -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();