Added
- A setting that does nothing now says so (#40) –
STEAM_ENABLE=falseis not a setting, so it changed nothing and nobody said a word;DRYRUN=maybequietly counts as false in the same way. At startupmain.pynow names every setting in your.envthat the bot does not read, points atSTORESwhen the name looks like a per-store switch, and flags a value a yes/no or number setting cannot use. Passwords, e-mail addresses and webhook URLs are masked in that message.
Changed
- Your e-mail address stays out of the log – AliExpress and the side stores printed the address they signed in with, and the README asked you to cut it out by hand before pasting a log into a bug report, which only protects the people who remember.
mask_account()insrc/core/claimer.pyshortens it top***@gmail.comeverywhere it is printed, the notification header included, while the database keeps the whole address as the account key. - Itch.io giveaways that are only a download now say so once – plenty of itch.io giveaways hand you a file and offer no control that puts the game on your account, and the bot reported every one of them like a failed claim, on every run.
src/stores/gamerpower.pynow tells the two apart: the first run reportsdownload only, nothing to claim, later runs keep quiet underskipped:download-only, which the summary hides unlessNOTIFY_ALREADY_CLAIMED=true. - Dependency updates – bumped
sqlalchemyto>=2.0.52,appriseto>=1.13.0,<2.0.0,python-dotenvto>=1.2.3andpytestto>=9.1.1(Dependabot #34, #36, #35, #31). The SQLAlchemy release matters here: it restores the daemon flag on aiosqlite's worker thread, which stopped working with the aiosqlite version this bot already requires. Apprise carries an upper bound because its author calls 1.13 the last 1.x and says 2.x will break the API, which a plain>=would pull into the image on the first rebuild after its release. Verified with a local image rebuild,pip check,pip-audit --strict, the full test suite and a real Chrome launch inside the container. - Dependabot stops opening one pull request per package – the group in
.github/dependabot.ymlfiltered onupdate-types, a classification a>=requirement bump does not have, so four separate pull requests piled up instead of one. Every Python update now lands in a singlepython-dependenciesgroup, and its pull requests targetdevinstead ofmain, the same route every other change takes. Both settings start working once the file reaches the default branch, which is what Dependabot reads.
Fixed
- The test suite could not run inside the container –
.dockerignoredropped every*.mdfile, sotests/test_docs_env.pydied on a missingREADME.mdbefore a single test ran. The README stays in the image now, which costs a few kilobytes and makespython -m pytest tests/ -qwork in the container as well as on your machine. - Epic announced mobile giveaways as claimed without claiming them (#39) – the status came from walking Epic's checkout, and that walk accepted any page text saying "in library", which an owned game in a recommendation row is enough to produce.
_claim_game()insrc/stores/epic.pynow reloads the product page afterwards and reportsclaimedonly when the page itself no longer offers the game, anything else isfailed:unconfirmed. - GOG and Prime sometimes refused to start, with "coroutine raised StopIteration" (#38) – nodriver reads Chrome's list of open pages once at startup, so a first tab that arrives a moment late took the whole store down.
open_first_tab()insrc/core/claimer.pywaits for that tab, asks Chrome for one outright when it never shows up, and a failure now retries the full launch. Each profile is also marked as cleanly closed before every start, which is what deleting the profile folder by hand used to fix.