.gitignore | ||
bot.py | ||
calc_main.js | ||
calc.js | ||
facts.txt | ||
flake.lock | ||
flake.nix | ||
games.txt | ||
index.py | ||
package-lock.json | ||
package.json | ||
README.md | ||
teams.json |
Holy Heck I Really Like Stats
Pokemon Showdown data processing, mostly for HHIRLLL's Pokemon league. Ugly as fuck.
Also includes a bot to automate replay ingestion and provide misc utilities.
Requirements
- Python with sqlite
- requests
Usage
$ ./index.py -h
usage: hhirlstats [-h] [-v] [-C] [-t FILE] [-o FILE] replay [replay ...]
extracts stats from a Showdown replay
positional arguments:
replay replay ID or URL
options:
-h, --help show this help message and exit
-v, --verbose add debugging info (default: None)
-C, --no-cache fetch replays instead of using cache (default: False)
-t FILE, --teams FILE
JSON file defining players to teams (default: teams.json)
-o FILE, --output FILE
output data file (default: data.db)
Replay files are cached after they're downloaded for the first time save issuing requests to Showdown on every new run.
Run the program once with all your replays (or once for each replay), then run
whatever SQL queries against the data file (default data.db
) you want.
Future work
- include timestamps in logs to correlate KOs with the mon that KOed
- calculate gametime based on active turns rather than moves used
- also solves the issue where paralyzed/confused turns are not counted
- use asyncio in bot
- allow for entering unplayed forfeits
- easy correction of game drift (e.g., two games played for a single team in a week)
- collect stats on teras and megas
- inline common queries into the base database as views
- channel filtering for replay collection
- move/damage tracking:
- delayed damage (Future Sight and co)
- self-damage misattribution (Belly Drum, possibly Explosion)
- indirect status (Toxic Spikes)
- weather?