itch-rewards

Commandline tool to update game rewards on Itch.io, and automatically update reward counts and descriptions based on sales.

Installation

$ gem install itch_rewards

Usage

Usage: itch-rewards COMMAND [options]

Commands:
  itch-rewards list                        # List all rewards for a game
  itch-rewards list-games                  # List all games
  itch-rewards recalculate                 # Update reward quantity and description from configuration file
  itch-rewards setup                       # Save cookies for itch.io and create reward config example file
  itch-rewards update GAME_ID REWARD_ID    # Update a reward
  itch-rewards version                     # Print version

Authenticating

First, enable two-factor authentication for your itch.io account, if you haven't already. This prevents captcha prompts during login, which itch-rewards doesn't handle.

Then, run:

$ itch-rewards setup

You'll be prompted for your username, password, two-factor code, and a path to save a cookie file. Your credentials will not be saved, but the cookie will be used for subsequent logins (until the cookie expires).

You can use itch-rewards for multiple accounts by specifying a different cookie file path for each account:

$ itch-rewards setup --cookie-path my_first_account.yml
# ...
$ itch-rewards setup --cookie-path my_second_account.yml
# ...
$ itch-rewards list-games --cookie-path my_first_account.yml

You'll also be prompted to create an (optional) configuration file that can be used when automatically updating itch reward quantities and descriptions.

While logging in via cookies is easier (and required for non-interactive login, ex: for cron tasks), all commands also accept the following options.

--username=VALUE, -u VALUE   # Itch username
--password=VALUE, -p VALUE   # Itch password
--cookie-path=VALUE          # Path to cookies file for future logins, default: ".itch-cookies.yml"
--[no-]cookies               # Enable cookie storage, default: true
--[no-]interactive           # Enable interactive prompts, default: true
--help, -h                   # Print help

List games

Return a list of game names and IDs. Useful for other commands that use game ID, or when creating a reward configuration file.

Usage:
  itch-rewards list-games

Description:
  List all games

List rewards

Show reward information for a single game.

Accepts either a game name, or game ID.

Usage:
  itch-rewards list

Description:
  List all rewards for a game

Options:
  --id=VALUE                        # Game ID
  --name=VALUE                      # Game name

Examples:
  itch-rewards list --id 123456     # List rewards for game with ID 123456
  itch-rewards list --name MyGame   # List rewards for game with name MyGame

Update a reward

Update a single reward for a game. Quantity, title, description, price and archive status can be changed.

Command:
  itch-rewards update

Usage:
  itch-rewards update GAME_ID REWARD_ID

Description:
  Update a reward

Arguments:
  GAME_ID                   # REQUIRED Game with the reward to edit
  REWARD_ID                 # REQUIRED Reward ID to update

Options:
  --quantity=VALUE          # Reward quantity (total, including redeemed)
  --title=VALUE             # Reward title
  --[no-]archived           # Reward archived status
  --description=VALUE       # Reward description
  --price=VALUE             # Reward price without currency (ex: 15.99)

Examples:
  itch-rewards update 123456 78910 --quantity 5            # Set the reward count to 5 for reward ID 78910 in game ID 123456
  itch-rewards update 123456 78910 --price 5.00 --archived # Set reward price to 5.00 and archive it

Automated reward updates

If you wish to update a reward description, or available quantity based on purchases or tips.

Usage:
  itch-rewards recalculate

Description:
  Update reward quantity and description from configuration file

Options:
  --config=VALUE      # Path to config file, default: "itch-reward-config.yml"
  --[no-]save         # Saves changes when enabled. Otherwise, dry-run and show result, default: false

Reward configuration

Automatic reward updates require a reward configuration file. You can create an annotated file, prepopulated with all of your itch games by using the setup command.

A reward configuration looks like this

---
games:
  MyGame:
    id: 123456
    reward_id: 789012
    reward_by_purchase: 0
    reward_by_tip: 0.0
    reward_offset: 0
    minimum_available: 0
    reward_description_template:

  MyOtherGame:
    ...

Some example reward scenarios

I want every purchase to add one community copy

MyGame:
  id: 123456
  reward_id: 789012
  reward_by_purchase: 1
  reward_by_tip: 0.0
  reward_offset: 0
  minimum_available: 0

I want every two purchases to add one community copy

MyGame:
  id: 123456
  reward_id: 789012
  reward_by_purchase: 0.5
  reward_by_tip: 0.0
  reward_offset: 0
  minimum_available: 0

I want tips over the purchase price to add proportional community copies

MyGame:
  id: 123456
  reward_id: 789012
  reward_by_purchase: 0
  reward_by_tip: 1.0
  reward_offset: 0
  minimum_available: 0

For example: a $5 tip, on a $10 game will contribute 0.5 copies to the reward pool when reward_by_tip is 1.

The formula for this is: (tip_amount / game_price) * reward_by_tip

I want five community copies to always be available

MyGame:
  id: 123456
  reward_id: 789012
  reward_by_purchase: 0
  reward_by_tip: 0.0
  reward_offset: 0
  minimum_available: 5

Updating reward description

If present, the reward_description_template configuration value can be used to change the description of your reward with information about the reward itself.

For instance:

reward_description_template: <p>Rewards added: { amount }</p>

The above will change the reward description to "Rewards added: 10". The following placehoder values are available:

  • { amount }: The total number of reward copies in the pool, including redeemed rewards.
  • { remaining_percent }: A number between 0.0 and 100.0, indicating the percentage until the next reward
  • { remaining_percent_integer }: A number between 0 and 100. As above (but with no decimal value included).