mirror of
https://github.com/tomru/wichteln.git
synced 2026-03-03 06:27:15 +01:00
some improvements
This commit is contained in:
@@ -5,8 +5,11 @@ Beschenker. Zusätzlich wird die ganze Ziehung in `./picks.txt` abgelegt.
|
|||||||
|
|
||||||
# Verwendung
|
# Verwendung
|
||||||
|
|
||||||
Die Liste der Teilnehmer wird von `stdin` eingelesen und erwartet folgendes
|
```
|
||||||
Format pro Zeile.
|
./wichteln.js < people.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
# Format Teilnehmerlisteneintrag
|
||||||
|
|
||||||
`<Name> <Email> <GroupId>`
|
`<Name> <Email> <GroupId>`
|
||||||
|
|
||||||
@@ -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
|
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
|
Fall wirft das Skript einfach einen Fehler. Versucht es einfach noch einmal, bis
|
||||||
ein gültige Ziehung gefunden wurde.
|
ein gültige Ziehung gefunden wurde.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
20
package-lock.json
generated
20
package-lock.json
generated
@@ -1,26 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "wichteln",
|
"name": "wichteln",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"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": {
|
"dependencies": {
|
||||||
"nodemailer": {
|
"nodemailer": {
|
||||||
"version": "4.7.0",
|
"version": "4.7.0",
|
||||||
|
|||||||
14
wichteln.js
14
wichteln.js
@@ -20,8 +20,8 @@ function mail(email, name, pick) {
|
|||||||
|
|
||||||
Du darfst dieses Jahr >> ${pick} << beschenken!
|
Du darfst dieses Jahr >> ${pick} << beschenken!
|
||||||
|
|
||||||
Viele lieben Grüße
|
Viele liebe Grüße
|
||||||
Dein treuer Weihnachtswichtel™
|
Dein Weihnachtswichtel™
|
||||||
`
|
`
|
||||||
},
|
},
|
||||||
(err, info) => {
|
(err, info) => {
|
||||||
@@ -59,7 +59,7 @@ const run = async () => {
|
|||||||
throw new Error("input file empty");
|
throw new Error("input file empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
people.forEach(drawer => {
|
people.forEach((drawer, index) => {
|
||||||
let picked;
|
let picked;
|
||||||
|
|
||||||
let pickable = people.filter(
|
let pickable = people.filter(
|
||||||
@@ -70,7 +70,7 @@ const run = async () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (pickable.length === 0) {
|
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);
|
let pickIndex = Math.floor(Math.random() * pickable.length);
|
||||||
@@ -78,16 +78,18 @@ const run = async () => {
|
|||||||
pickable[pickIndex].picked = true;
|
pickable[pickIndex].picked = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('Yay, I could draw someone for everybody! Writing ./picks.txt');
|
||||||
|
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
`./picks.txt`,
|
`./picks.txt`,
|
||||||
people.map(({ name, pick }) => `${name} picked ${pick}`).join("\n")
|
people.map(({ name, pick }) => `${name} picked ${pick}`).join("\n")
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!send) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
people.forEach(p => mail(p.email, p.name, p.pick));
|
people.forEach(p => mail(p.email, p.name, p.pick));
|
||||||
};
|
};
|
||||||
|
|
||||||
run();
|
run().catch((e) => console.error(`Error: ${e.message}`));
|
||||||
|
|||||||
Reference in New Issue
Block a user