Skip to content

Commit

Permalink
feat!: program refaktorálva Node v20-ra (potenciálisan javítja #34-et)
Browse files Browse the repository at this point in the history
  • Loading branch information
juzraai committed Jan 12, 2024
2 parents b12a7db + bd42d3b commit ff0bc58
Show file tree
Hide file tree
Showing 30 changed files with 2,844 additions and 3,719 deletions.
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# editorconfig.org
root = true

[*]
indent_style = tab
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
11 changes: 0 additions & 11 deletions .eslintrc

This file was deleted.

25 changes: 25 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: ['eslint:recommended', 'xo', 'prettier'],
overrides: [
{
env: {
node: true,
},
files: ['.eslintrc.{js,cjs}'],
parserOptions: {
sourceType: 'script',
},
},
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'capitalized-comments': 'off',
},
};
13 changes: 7 additions & 6 deletions .github/ISSUE_TEMPLATE/bug-report.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
---
name: Hibát tapasztaltam! :(
about: Írd le a hibajelenség részleteit
title: "(hibajelenség röviden)"
title: 'Írd le a hibát röviden (pl. hibaüzenet)'
labels: bug
assignees: juzraai

---

**Mi történt? Mit tapasztaltál?**
Expand All @@ -17,11 +16,13 @@ assignees: juzraai
...

**error.log fájl tartalma**

```
Ide másold be kérlek.
```

**Rendszerinformáció**
- Operációs rendszer: Windows? Linux?
- Node verzió: ?
- Program verzió: ?
**Rendszerinformációk**

- Operációs rendszer: Windows? Linux?
- Node verzió (`node -v`): ?
- Program verzió: ?
5 changes: 2 additions & 3 deletions .github/ISSUE_TEMPLATE/discussion.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
---
name: Kérdésem van :)
about: Itt tudsz kérdezni a programmal kapcsolatban
title: ''
title: 'Ide írd a kérdésed röviden'
labels: discussion
assignees: juzraai

---


Itt pedig fejtsd ki kérlek. :)
3 changes: 1 addition & 2 deletions .github/ISSUE_TEMPLATE/feature-request.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
---
name: Funkció ötletem van. :)
about: Javasolj funkciókat a programhoz
title: "(új funkció röviden)"
title: '(új funkció röviden)'
labels: feature
assignees: juzraai

---

**Milyen problémát oldana meg ez a funkció? Ki használná és miért?**
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
12
20
8 changes: 8 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"printWidth": 100,
"semi": true,
"singleQuote": true,
"tabWidth": 4,
"trailingComma": "all"
}
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "usernamehw.errorlens"]
}
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnPaste": true,
"editor.formatOnSave": true
}
58 changes: 20 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,21 @@
# <div align="center"><img src="img/header.svg" width="400" title="Díjnet Bot" alt="Díjnet Bot - Az összes számlád még egy helyen"></div>



A **Díjnet Bot** lementi az **összes [Díjnet](https://www.dijnet.hu/)-en tárolt számládat,** így azok immáron még egy helyen, *Nálad is* meglesznek.


A **Díjnet Bot** lementi az **összes [Díjnet](https://www.dijnet.hu/)-en tárolt számládat,** így azok immáron még egy helyen, _Nálad is_ meglesznek.

![](img/scrs.gif)



## Funkciók

- **Mindent visz:** az összes számla összes letölthető fájlját lementi (számla PDF, számla XML, terhelési összesítő, ...).
- **Nem gatyázik:** ha valamit már letöltött, legközelebb átugorja, vagyis mindig csak az új számláidat fogja lementeni.
- **Ért a szóból:** többféle módon beállítható, akár környezeti változókkal, akár konfigurációs fájllal, de még parancssori argumentumokkal is.
- **Tettre kész:** a parancssoros interfész és az inkrementális letöltési funkció miatt ideális arra, hogy ütemezett feladatként használd.
- **Rendszerető:** a letöltött fájlokat mappákba rendezi, szolgáltató, szolgáltatás és dátum szerint.
- **Kíméletes:** a lapok és fájlok letöltése között másodperceket vár, hogy a **Díjnet** szerverét ne terhelje túl.


- **Mindent visz:** az összes számla összes letölthető fájlját lementi (számla PDF, számla XML, terhelési összesítő, ...).
- **Nem gatyázik:** ha valamit már letöltött, legközelebb átugorja, vagyis mindig csak az új számláidat fogja lementeni.
- **Ért a szóból:** többféle módon beállítható, akár környezeti változókkal, akár konfigurációs fájllal, de még parancssori argumentumokkal is.
- **Tettre kész:** a parancssoros interfész és az inkrementális letöltési funkció miatt ideális arra, hogy ütemezett feladatként használd.
- **Rendszerető:** a letöltött fájlokat mappákba rendezi, szolgáltató, szolgáltatás és dátum szerint.
- **Kíméletes:** a lapok és fájlok letöltése között másodperceket vár, hogy a **Díjnet** szerverét ne terhelje túl.

## Használata

Ahhoz, hogy a programot futtatni tudd, telepítened kell a [Node.js](https://nodejs.org/en/) legalább 12-es verzióját.
Ahhoz, hogy a programot futtatni tudd, telepítened kell a [Node.js](https://nodejs.org/en/) legalább 20-as verzióját.

A **Díjnet Bot** önmagában egyetlen fájl (`dijnet-bot.js`), melyet [innen tudsz letölteni](https://github.com/juzraai/dijnet-bot/releases/latest).

Expand All @@ -39,15 +31,13 @@ $ node dijnet-bot

A program meg fogja kérdezi a **Díjnet** belépési adataidat, majd alapértelmezett beállításokkal megkezdi a számlák learatását.



## Beállítás

A program némely paramétere állítható (pl. kimeneti mappa, kérések közti várakozás). Ha az alapértelmezett beállítások nem felelnek meg, 3 módon tudod a programot konfigurálni:

- konfigfájllal
- környezeti változókkal
- parancssori argumentumokkal
- konfigfájllal
- környezeti változókkal
- parancssori argumentumokkal

A konfigfájlt `.env` néven kell elmenteni abba a mappába, ahonnan a **Díjnet Bot**-ot futtatod. A beállítási lehetőségekről és a fájl formátumáról a [.env.example fájl](https://github.com/juzraai/dijnet-bot/blob/master/.env.example) ad útbaigazítást.

Expand All @@ -63,20 +53,18 @@ Ezek a paraméterek felülbírálják a környezeti változókat is.

Ha a program egyik fenti módon sem kap **Díjnet** felhasználónevet vagy jelszót, akkor indításkor meg fogja ezeket kérdezni.



## Működése

1. Bejelentkezik **Díjnet**-en (elküldi a login űrlapot)
1. Rámegy a "Számlák keresése" oldalra
1. Elküldi az űrlapot üresen, hogy megkapja az összes számlát
1. Kiolvassa a számlák adatait, majd végigmegy a számlákon:
1. Ha ennek a számlának a fájljait még nem töltötte le, akkor:
1. Megnyitja a számla adatlapját
1. Rámegy a "Letöltés" fülre
1. Letölti az összes fájlt, ami be van linkelve
1. Megjelöli ezt a számlát, hogy a program későbbi futtatásánál ne töltse le újra
1. Visszamegy a számla listához
1. Ha ennek a számlának a fájljait még nem töltötte le, akkor:
1. Megnyitja a számla adatlapját
1. Rámegy a "Letöltés" fülre
1. Letölti az összes fájlt, ami be van linkelve
1. Megjelöli ezt a számlát, hogy a program későbbi futtatásánál ne töltse le újra
1. Visszamegy a számla listához

Az eredmény, vagyis **a letöltött fájlok a kimeneti mappába kerülnek** (alapértelmezésként `./szamlak`), szolgáltató, szolgáltatás és dátum bontásban. A könyvtárszerkezet az alábbiak szerint alakul:

Expand All @@ -93,32 +81,26 @@ A program minden alkalommal, **mielőtt kérést küld a Díjnet felé, vár né

A program a kimeneti mappán belül a `kesz.txt` fájlba beírja azon számlák azonosítóját (számlaszám/bizonylatszám), amelyeknek minden fájlját sikerült lementeni. Így a következő futtatásakor ezeket a számlákat át tudja ugrani, vagyis **csak az újabb (vagy korábban nem lementett) számlákkal fog foglalkozni.**



## Motiváció

A **Díjnet** az ingyenes szolgáltatása keretében **csak bizonyos ideig őrzi meg** a számlákat. Ha később is el akarjuk érni a fájlokat, akkor

- vagy [fizetünk a **SzámlaPlusz** funkcióért](https://www.dijnet.hu/ekonto/docs/hu/szamlaplusz_tajekoztato.pdf) (évi ~1 000 Ft),
- vagy rendszeresen **lementjük kézzel**, ami fáradtságos munka lehet.
- vagy [fizetünk a **SzámlaPlusz** funkcióért](https://www.dijnet.hu/ekonto/docs/hu/szamlaplusz_tajekoztato.pdf) (évi ~1 000 Ft),
- vagy rendszeresen **lementjük kézzel**, ami fáradtságos munka lehet.

A **Díjnet Bot** az utóbbi megoldás **automatizálására szolgál**, vagyis gyakorlatilag helyettünk kattintgat végig a számlákon és a **Díjnet** által biztosított letöltési linkeken.

A fenti két út természetesen nem zárja ki egymást, a **SzámlaPlusz funkcióra érdemes előfizetni** még a **Díjnet Bot** használata mellett is, mert minél több helyen vannak meg a fontos fájljaink, annál jobb.

Az automatizálási feladatra már mások is készítettek szkripteket (pl. [wolandmaster/dijnet-dump](https://github.com/wolandmaster/dijnet-dump)). Én ezeket nem próbáltam ki, mert kihívást éreztem abban, hogy magam is összerakjak egy ilyen programot nulláról, elsősorban saját célra, saját igények szerint.



## Licensz

[MIT](LICENSE)



## Közreműködés

Ha kérdésed, ötleted, igényed (feature request) van, bátran nyiss egy ticketet az [*Issues* fülön](https://github.com/juzraai/dijnet-bot/issues)! :)
Ha kérdésed, ötleted, igényed (feature request) van, bátran nyiss egy ticketet az [_Issues_ fülön](https://github.com/juzraai/dijnet-bot/issues)! :)

Ha hibát találtál, kérlek szintén jelezd ugyanitt, megadva minél több részletet a hibához (hibaüzenet, `error.log` fájl tartalma, vagy elvárt és tapasztalt működés különbsége).

Expand Down
29 changes: 29 additions & 0 deletions bundle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import fs from 'fs';
import esbuild from 'esbuild';

const OUTPUT_FILE = 'dijnet-bot.js';

const banner = `
/*
Díjnet Bot v${process.env.npm_package_version}
${process.env.npm_package_homepage}
Licensed under ${process.env.npm_package_license}
*/
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
`;

console.log('Bundling...');
console.time('Bundling done in');
await esbuild.build({
banner: {
js: banner,
},
bundle: true,
entryPoints: ['index.js'],
minify: true,
outfile: OUTPUT_FILE,
platform: 'node',
});
console.timeEnd('Bundling done in');
console.log(OUTPUT_FILE, Math.round((fs.statSync('dijnet-bot.js').size / 1024) * 10) / 10, 'KB');
28 changes: 19 additions & 9 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
#!/usr/bin/env node
const SingleInstance = require('single-instance');
const Logger = require('./src/logger');
const { start } = require('./src/main');
import SingleInstance from 'single-instance';
import Logger from './src/logger.js';
import { start } from './src/main.js';

new SingleInstance('dijnet-bot').lock().then(start).catch(error => {
(async () => {
try {
new Logger().error(error.stack ? error : 'A Díjnet bot már fut, és nem futtatható több példányban.');
} catch (error2) { // in case Logger is also dead
console.log(error2);
const singleInstance = new SingleInstance('dijnet-bot');
await singleInstance.lock();
start();
} catch (error) {
try {
new Logger().error(
error.stack ? error : 'A Díjnet bot már fut, és nem futtatható több példányban.',
);
} catch (error2) {
// in case Logger is also dead
console.log(error2);
}

process.exit(1);
}
process.exit(1);
});
})();
Loading

0 comments on commit ff0bc58

Please sign in to comment.