Add .env support to make life easier

This commit is contained in:
ewin 2025-08-20 00:02:08 -06:00
parent 78ad0761b3
commit 79a833133c
Signed by: erin
SSH key fingerprint: SHA256:swjoHhREbZPbWe+gyJNi24d4NAxJSyUIm3fpZj4z3wc
7 changed files with 16 additions and 6 deletions

3
.env.example Normal file
View file

@ -0,0 +1,3 @@
MW_SCRIPTPATH="https://ffxiv.consolegameswiki.com/mediawiki"
MW_USERNAME="Wind-up Umbreon"
MW_PASSWORD="..."

1
.gitignore vendored
View file

@ -1 +1,2 @@
node_modules node_modules
.env

View file

@ -9,4 +9,10 @@ Scripts for other one-time maintenance tasks (e.g. bulk renames) can be found fo
## Usage ## Usage
You'll need a recent version of Node.js (22+). Install dependencies via `npm ci`, set the `MW_USERNAME` and `MW_PASSWORD` environment variables to your account username and [bot password](https://www.mediawiki.org/wiki/Manual:Bot_passwords) respectively, then run the scripts in the `bin` folder. You'll need a recent version of Node.js (22+). Install dependencies: `npm ci`, rename `.env.example` to `.env` and set `MW_USERNAME` and `MW_PASSWORD` to your account username and [bot password](https://www.mediawiki.org/wiki/Manual:Bot_passwords) respectively, then run the scripts in the `bin` folder.
### Environment variables
- `MW_SCRIPTPATH`: The base URL for API requests for your wiki. For the XIV wiki it's `https://ffxiv.consolegameswiki.com/mediawiki`; other wikis may use paths other than `/mediawiki`, which can be identified in Special:Version as "Script path".
- `MW_USERNAME` and `MW_PASSWORD`: Account username and [bot password](https://www.mediawiki.org/wiki/Manual:Bot_passwords), respectively
- `MW_KILLPAGE`: The name of a page that will be checked when running unattended scripts. If this page contains content, the bot will be killed. This allows other editors to kill the bot if it starts misbehaving and you're not watching it.

View file

@ -1,4 +1,4 @@
#!/usr/bin/env node #!/usr/bin/env -S node --env-file-if-exists=.env
import {findEDBEntryID} from '../lib/api/lodestone.js'; import {findEDBEntryID} from '../lib/api/lodestone.js';
import {getMediawikiClient} from '../lib/config.js'; import {getMediawikiClient} from '../lib/config.js';

View file

@ -1,4 +1,4 @@
#!/usr/bin/env node #!/usr/bin/env -S node --env-file-if-exists=.env
import {findItemGTID} from '../lib/api/xivapi.js'; import {findItemGTID} from '../lib/api/xivapi.js';
import {getMediawikiClient} from '../lib/config.js'; import {getMediawikiClient} from '../lib/config.js';

View file

@ -1,4 +1,4 @@
#!/usr/bin/env node #!/usr/bin/env -S node --env-file-if-exists=.env
// Renames A-class Stellar Missions to replace A-1, A-2, A-3 difficulty // Renames A-class Stellar Missions to replace A-1, A-2, A-3 difficulty
// indicators with the new empty/EX/EX+ naming used in patch 7.3. // indicators with the new empty/EX/EX+ naming used in patch 7.3.
// https://na.finalfantasyxiv.com/lodestone/topics/detail/907c6d2aa020c0e4458ed1477668521fb4a117ec#:~:text=The%20notation,adjusted%2E // https://na.finalfantasyxiv.com/lodestone/topics/detail/907c6d2aa020c0e4458ed1477668521fb4a117ec#:~:text=The%20notation,adjusted%2E

View file

@ -1,4 +1,4 @@
#!/usr/bin/env node #!/usr/bin/env -S node --env-file-if-exists=.env
// Adds infobox parameters for Viera and Hrothgar hat compatibility based on // Adds infobox parameters for Viera and Hrothgar hat compatibility based on
// data compiled by Crye. Expects there to be a `hats.csv` file in the repo root // data compiled by Crye. Expects there to be a `hats.csv` file in the repo root
// which is an export of the "HEAD" sheet of this Google Sheets document: // which is an export of the "HEAD" sheet of this Google Sheets document:
@ -14,7 +14,7 @@ import {addParameterAtBottom, setExistingParameter} from '../../lib/util/templat
const mw = await getMediawikiClient(); const mw = await getMediawikiClient();
// parse CSV, naively assume there are no quotes or backslashes (because i checked) // parse CSV, naively assume there are no quotes or backslashes (because i checked)
const data = readFileSync(join(import.meta.dirname, '../../hats.csv'), 'utf-8').split(/\r?\n/g).map(line => line && line.split(',')); const data = readFileSync(join(import.meta.dirname, '../../hats.csv'), 'utf-8').split(/\r?\n/g).filter(l => l).map(line => line && line.split(','));
const headers = data.splice(0, 1)[0]; const headers = data.splice(0, 1)[0];
const COL_ITEM = headers.findIndex(field => field.toLowerCase() === 'item'); const COL_ITEM = headers.findIndex(field => field.toLowerCase() === 'item');
const COL_VIERA = headers.findIndex(field => field.toLowerCase().includes('viera')); const COL_VIERA = headers.findIndex(field => field.toLowerCase().includes('viera'));