From b30b4995cb2b3dd5a970f4d57e176def4846cfa3 Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Wed, 26 Oct 2022 22:24:39 +0200 Subject: [PATCH] some improvements --- README.md | 9 +++++++-- package-lock.json | 20 +------------------- wichteln.js | 14 ++++++++------ 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 92f927c..389c752 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,11 @@ Beschenker. Zusätzlich wird die ganze Ziehung in `./picks.txt` abgelegt. # Verwendung -Die Liste der Teilnehmer wird von `stdin` eingelesen und erwartet folgendes -Format pro Zeile. +``` +./wichteln.js < people.txt +``` + +# Format Teilnehmerlisteneintrag ` ` @@ -17,3 +20,5 @@ Gezogen wird in der Reihenfolge der Input Liste. Wird `GroupId` verwendet, kann es sein, dass für einen Teilnehmer kein _gültigen_ Wichtel mehr gibt. In diesem Fall wirft das Skript einfach einen Fehler. Versucht es einfach noch einmal, bis ein gültige Ziehung gefunden wurde. + + diff --git a/package-lock.json b/package-lock.json index 26edf4f..3f827e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,8 @@ { "name": "wichteln", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "wichteln", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "nodemailer": "^4.7.0" - } - }, - "node_modules/nodemailer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", - "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==", - "engines": { - "node": ">=6.0.0" - } - } - }, "dependencies": { "nodemailer": { "version": "4.7.0", diff --git a/wichteln.js b/wichteln.js index 80c8520..95d85cd 100755 --- a/wichteln.js +++ b/wichteln.js @@ -20,8 +20,8 @@ function mail(email, name, pick) { Du darfst dieses Jahr >> ${pick} << beschenken! -Viele lieben Grüße -Dein treuer Weihnachtswichtel™ +Viele liebe Grüße +Dein Weihnachtswichtel™ ` }, (err, info) => { @@ -59,7 +59,7 @@ const run = async () => { throw new Error("input file empty"); } - people.forEach(drawer => { + people.forEach((drawer, index) => { let picked; let pickable = people.filter( @@ -70,7 +70,7 @@ const run = async () => { ); if (pickable.length === 0) { - throw new Error("ohhh, noone left for ", drawer.name); + throw new Error(`ohhh shoot. None left for ${drawer.name}. Just try to roll again...`); } let pickIndex = Math.floor(Math.random() * pickable.length); @@ -78,16 +78,18 @@ const run = async () => { pickable[pickIndex].picked = true; }); + console.log('Yay, I could draw someone for everybody! Writing ./picks.txt'); + fs.writeFileSync( `./picks.txt`, people.map(({ name, pick }) => `${name} picked ${pick}`).join("\n") ); if (!send) { - console.log("DryRun: did not send emails. To send pass --send option"); + console.log("DRY RUN: did not send emails! To send pass --send option"); return; } people.forEach(p => mail(p.email, p.name, p.pick)); }; -run(); +run().catch((e) => console.error(`Error: ${e.message}`));