Configuration

Configuration is split into several parts. First a global configuration that’ll define the accounts to use for mining as well as default settings for each channel mined. Then each mined channel can override the default settings.

Streamers to mine

You have two options to load streamers in the mining list:

  • Be specific and define streamer settings for each streamer you want to watch. For this simply add a JSON file withing one of the streamer config directories with the name of the streamer (eg: my_streamer.json). The content of the file will override the default streamer settings for the keys that are redefined. If you want to use the default streamer settings simply use an empty file or put an empty JSON object in the file (ie: {}).

  • Load them from the follows list. Every follow will be loaded and default settings will be applied to them.

JSON Schema

Schema provide descriptions for all fields. You can also validate your configuration with the provided schemas (there’s some online tools like https://www.jsonschemavalidator.net).

Global configuration

Global configuration JSON schema
{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "$defs" : {
    "Path" : {
      "type" : "string"
    }
  },
  "type" : "object",
  "properties" : {
    "accounts" : {
      "description" : "List of account configurations.",
      "type" : "array",
      "items" : {
        "type" : "object",
        "properties" : {
          "analytics" : {
            "allOf" : [ {
              "type" : "object",
              "properties" : {
                "database" : {
                  "allOf" : [ {
                    "type" : "object",
                    "properties" : {
                      "connectionTimeout" : {
                        "type" : "integer",
                        "description" : "Connection timeout in milliseconds, time to wait for a connection in the pool to be available. Default: 30s"
                      },
                      "idleTimeout" : {
                        "type" : "integer",
                        "description" : "Idle timeout in milliseconds, time allowed for a connection to be idle in the pool. Default: 10m"
                      },
                      "jdbcUrl" : {
                        "type" : "string",
                        "description" : "JDBC connection URL. (supported: mariadb, mysql, sqlite)"
                      },
                      "lifetimeTimeout" : {
                        "type" : "integer",
                        "description" : "Lifetime timeout in milliseconds, maximum time for a connection to exist in the pool. Default: 30m"
                      },
                      "maxPoolSize" : {
                        "type" : "integer",
                        "description" : "Maximum number of connections to the database. Default: 10"
                      },
                      "password" : {
                        "type" : "string",
                        "description" : "Database password."
                      },
                      "username" : {
                        "type" : "string",
                        "description" : "Database username."
                      }
                    },
                    "description" : "Database configuration."
                  }, {
                    "description" : "Database settings."
                  } ]
                },
                "enabled" : {
                  "type" : "boolean",
                  "description" : "Enable or disable data collection. Default: false"
                },
                "recordUserPredictions" : {
                  "type" : "boolean",
                  "description" : "Record other chat members predictions. Default: false"
                }
              },
              "description" : "Analytics settings define a way to collect data on your twitch account as time passes."
            }, {
              "description" : "Analytics settings, recording account's evolution, bets, predictions."
            } ]
          },
          "chatMode" : {
            "allOf" : [ {
              "type" : "string",
              "enum" : [ "WS", "IRC" ],
              "description" : "Way of joining Twitch's chat."
            }, {
              "description" : "Method used to join chat. Default: WS"
            } ]
          },
          "defaultStreamerSettings" : {
            "allOf" : [ {
              "type" : "object",
              "properties" : {
                "claimMoments" : {
                  "type" : "boolean",
                  "description" : "Claim moments. Default: false"
                },
                "enabled" : {
                  "type" : "boolean",
                  "description" : "Enable mining for this streamer. Default: true"
                },
                "followRaid" : {
                  "type" : "boolean",
                  "description" : "Follow raids to get bonus points. Default: false"
                },
                "index" : {
                  "type" : "integer",
                  "description" : "The streamer index. This value is used when streamers have the same score from the defined priorities, the one with the lowest index will be picked first. Default: 2147483647"
                },
                "joinChat" : {
                  "type" : "boolean",
                  "description" : "Join chat. Default: false"
                },
                "makePredictions" : {
                  "type" : "boolean",
                  "description" : "Place predictions. Default: false"
                },
                "participateCampaigns" : {
                  "type" : "boolean",
                  "description" : "Participate in campaigns and claim rewards (drops). Default: false"
                },
                "predictions" : {
                  "allOf" : [ {
                    "type" : "object",
                    "properties" : {
                      "actions" : {
                        "description" : "Actions to perform before a bet is placed.",
                        "type" : "array",
                        "items" : {
                          "type" : "object",
                          "description" : "Ensure that the amount placed is lower than the top predictor.",
                          "properties" : {
                            "type" : {
                              "const" : "stealth"
                            }
                          },
                          "required" : [ "type" ]
                        }
                      },
                      "amountCalculator" : {
                        "anyOf" : [ {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "amount" : {
                                "type" : "integer",
                                "description" : "Amount to place."
                              },
                              "type" : {
                                "const" : "constant"
                              }
                            },
                            "description" : "Always bet the same amount.",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to calculate the amount to the bet. Default: percentage(percentage: 20, max: 50000)"
                            }
                          ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "max" : {
                                "type" : "integer",
                                "description" : "Maximum number of points."
                              },
                              "percentage" : {
                                "type" : "number",
                                "description" : "Percentage of your owned points to place, as a decimal value, between 0 and 1."
                              },
                              "type" : {
                                "const" : "percentage"
                              }
                            },
                            "description" : "Place a percentage of your points (with a limit).",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to calculate the amount to the bet. Default: percentage(percentage: 20, max: 50000)"
                            }
                          ]
                        } ]
                      },
                      "delayCalculator" : {
                        "anyOf" : [ {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "seconds" : {
                                "type" : "integer",
                                "description" : "Number of seconds before the end to place the bet."
                              },
                              "type" : {
                                "const" : "fromEnd"
                              }
                            },
                            "description" : "Place the bet a certain amount of time before the end of the original prediction.",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to calculate when to place the bet. Default: 10s from end"
                            }
                          ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "seconds" : {
                                "type" : "integer",
                                "description" : "Number of seconds after the start to place the bet."
                              },
                              "type" : {
                                "const" : "fromStart"
                              }
                            },
                            "description" : "Place the bet a certain amount of time after the beginning of the original prediction.",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to calculate when to place the bet. Default: 10s from end"
                            }
                          ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "percent" : {
                                "type" : "number",
                                "description" : "The percentage of the timer, as a decimal value, between 0 and 1."
                              },
                              "type" : {
                                "const" : "percentage"
                              }
                            },
                            "description" : "Place the bet after 'percent'% of the original timer elapsed.",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to calculate when to place the bet. Default: 10s from end"
                            }
                          ]
                        } ]
                      },
                      "minimumPointsRequired" : {
                        "type" : "integer",
                        "description" : "Minimum amount of points to have to place a bet. If this threshold is not reached, no bet is placed. Default: fromEnd(10)"
                      },
                      "outcomePicker" : {
                        "anyOf" : [ {
                          "allOf" : [ {
                            "type" : "object",
                            "description" : "Choose the outcome with the most users.",
                            "properties" : {
                              "type" : {
                                "const" : "mostUsers"
                              }
                            },
                            "required" : [ "type" ]
                          }, {
                            "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                          } ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "description" : "Choose the outcome with the least users.",
                            "properties" : {
                              "type" : {
                                "const" : "leastUsers"
                              }
                            },
                            "required" : [ "type" ]
                          }, {
                            "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                          } ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "description" : "Choose the outcome with the most points. This is the same as 'the outcome with lower odds'.",
                            "properties" : {
                              "type" : {
                                "const" : "mostPoints"
                              }
                            },
                            "required" : [ "type" ]
                          }, {
                            "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                          } ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "description" : "Choose the outcome with the least points. his is the same as 'the outcome with higher odds'.",
                            "properties" : {
                              "type" : {
                                "const" : "leastPoints"
                              }
                            },
                            "required" : [ "type" ]
                          }, {
                            "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                          } ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "percentageGap" : {
                                "type" : "number",
                                "description" : "The percent gap of the user count, as decimal, between 0 and 1. (i.e. Setting this to 0.1, will mean that the condition switches states when the difference between sides is 10%, so 45% of the users on one side and 55% on the other)."
                              },
                              "type" : {
                                "const" : "smart"
                              }
                            },
                            "description" : "Choose the outcome with the most users. However, if the two most picked outcomes have a user count similar, choose the outcome with the least points (higher odds).",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                            }
                          ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "description" : "Choose the outcome with the biggest predictor.",
                            "properties" : {
                              "type" : {
                                "const" : "biggestPredictor"
                              }
                            },
                            "required" : [ "type" ]
                          }, {
                            "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                          } ]
                        }, {
                          "allOf" : [ {
                            "type" : "object",
                            "properties" : {
                              "minTotalBetsPlacedByUser" : {
                                "type" : "integer",
                                "description" : "Only user with at least this number of bets are considered in the calculation. Default: 5"
                              },
                              "minTotalBetsPlacedOnOutcome" : {
                                "type" : "integer",
                                "description" : "Need at least x bets placed the chosen outcome. Default: 5"
                              },
                              "minTotalBetsPlacedOnPrediction" : {
                                "type" : "integer",
                                "description" : "Need at least x bets placed to bet on this prediction. Default: 10"
                              },
                              "type" : {
                                "const" : "mostTrusted"
                              }
                            },
                            "description" : "Choose the outcome that's backed by other users with the highest average return-on-investment. Requires analytics to be enabled and recordUserPredictions to be activated.",
                            "required" : [
                              "type"
                            ]
                          },
                            {
                              "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                            }
                          ]
                        } ]
                      }
                    },
                    "description" : "Prediction settings"
                  }, {
                    "description" : "Prediction settings."
                  } ]
                },
                "priorities" : {
                  "description" : "A list of conditions that, if met, will prioritize this streamer.",
                  "type" : "array",
                  "items" : {
                    "anyOf" : [
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "type" : {
                            "const" : "constant"
                          }
                        },
                        "description" : "Adds a constant value to the score of the streamer.",
                        "required" : [
                          "type"
                        ]
                      },
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "score2" : {
                            "type" : "integer",
                            "description" : "Score for a T2 sub."
                          },
                          "score3" : {
                            "type" : "integer",
                            "description" : "Score for a T3 sub."
                          },
                          "type" : {
                            "const" : "subscribed"
                          }
                        },
                        "description" : "Return a score if the logged-in user is subscribed to the streamer.",
                        "required" : [
                          "type"
                        ]
                      },
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "threshold" : {
                            "type" : "integer",
                            "description" : "Current points must strictly be above this value to give the score."
                          },
                          "type" : {
                            "const" : "pointsAbove"
                          }
                        },
                        "description" : "Return a score if owned points are above a defined value.",
                        "required" : [
                          "type"
                        ]
                      },
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "threshold" : {
                            "type" : "integer",
                            "description" : "Current points must strictly be below this value to give the score."
                          },
                          "type" : {
                            "const" : "pointsBelow"
                          }
                        },
                        "description" : "Return a score if owned points are below a defined value.",
                        "required" : [
                          "type"
                        ]
                      },
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "type" : {
                            "const" : "watchStreak"
                          }
                        },
                        "description" : "Return a score if the streamer has a potential watch streak to claim.",
                        "required" : [
                          "type"
                        ]
                      },
                      {
                        "type" : "object",
                        "properties" : {
                          "score" : {
                            "type" : "integer",
                            "description" : "Score to give."
                          },
                          "type" : {
                            "const" : "drops"
                          }
                        },
                        "description" : "Return a score if a drop campaign may be progressed by watching this stream.",
                        "required" : [
                          "type"
                        ]
                      }
                    ]
                  }
                }
              },
              "description" : "Streamer settings"
            }, {
              "description" : "Default streamer settings."
            } ]
          },
          "discord" : {
            "type" : "object",
            "properties" : {
              "embeds" : {
                "type" : "boolean",
                "description" : "Use embeds in the messages or not. Default: false"
              },
              "events" : {
                "type" : "object",
                "description" : "Customize events that are sent. Key is the name of an event (can be seen in the event/impl package). Default: all events with default format"
              },
              "webhookUrl" : {
                "type" : "string",
                "description" : "Discord webhook url to publish events to."
              }
            },
            "description" : "Discord settings to send notifications."
          },
          "enabled" : {
            "type" : "boolean",
            "description" : "If the account is marked as enabled it'll be mined. Default: true"
          },
          "loadFollows" : {
            "type" : "boolean",
            "description" : "Load streamers to scrape from follow list. Default: false"
          },
          "loginMethod" : {
            "anyOf" : [ {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "authenticationFolder" : {
                    "$ref" : "#/$defs/Path",
                    "description" : "Path to a folder that contains authentication files used to log back in after a restart. Default: ./authentication"
                  },
                  "password" : {
                    "type" : "string",
                    "description" : "Password of your Twitch account."
                  },
                  "use2FA" : {
                    "type" : "boolean",
                    "description" : "If this account uses 2FA set this to true to directly ask for it. Default: false"
                  },
                  "type" : {
                    "const" : "http"
                  }
                },
                "description" : "Deprecated. Login though Twitch's Passport API (web client).",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "Login method to use."
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "binary" : {
                    "type" : "string",
                    "description" : "Binary of the browser to use. Used only if not using a REMOTE_XXX driver."
                  },
                  "cookiesPath" : {
                    "type" : "string",
                    "description" : "Path to a JSON file containing your exported cookies."
                  },
                  "disableShm" : {
                    "type" : "boolean",
                    "description" : "Disable SHM usage. Default: false"
                  },
                  "driver" : {
                    "allOf" : [ {
                      "type" : "string",
                      "enum" : [ "CHROME", "FIREFOX", "REMOTE_CHROME", "REMOTE_FIREFOX" ],
                      "description" : "Selenium driver to use."
                    }, {
                      "description" : "Driver to use. Default: CHROME"
                    } ]
                  },
                  "headless" : {
                    "type" : "boolean",
                    "description" : "Run browser headless. Not recommended. Default: false"
                  },
                  "remoteHost" : {
                    "type" : "string",
                    "description" : "Remote host of the selenium grid. Must be defined if using REMOTE_XXX driver."
                  },
                  "screenshots" : {
                    "type" : "boolean",
                    "description" : "Take screenshots on error. Default: false"
                  },
                  "userAgent" : {
                    "type" : "string",
                    "description" : "User-Agent to use. Default: use controlled browser User-Agent"
                  },
                  "userDir" : {
                    "type" : "string",
                    "description" : "User directory to use. Should be a different one per account used to mine."
                  },
                  "type" : {
                    "const" : "browser"
                  }
                },
                "description" : "Login though controlled browser (selenium).",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "Login method to use."
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "authenticationFolder" : {
                    "$ref" : "#/$defs/Path",
                    "description" : "Path to a folder that contains authentication files used to log back in after a restart. Default: ./authentication"
                  },
                  "password" : {
                    "type" : "string",
                    "description" : "Password of your Twitch account."
                  },
                  "use2FA" : {
                    "type" : "boolean",
                    "description" : "If this account uses 2FA set this to true to directly ask for it. Default: false"
                  },
                  "type" : {
                    "const" : "mobile"
                  }
                },
                "description" : "Deprecated. Login though Twitch's Passport API (as mobile).",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "Login method to use."
                }
              ]
            },
              {
                "allOf" : [
                  {
                    "type" : "object",
                    "properties" : {
                      "authenticationFolder" : {
                        "$ref" : "#/$defs/Path",
                        "description" : "Path to a folder that contains authentication files used to log back in after a restart. Default: ./authentication"
                      },
                      "password" : {
                        "type" : "string",
                        "description" : "Password of your Twitch account."
                      },
                      "type" : {
                        "const" : "tv"
                      }
                    },
                    "description" : "Login though Twitch's Oauth API (as android tv).",
                    "required" : [
                      "type"
                    ]
                  },
                  {
                    "description" : "Login method to use."
                  }
                ]
              }
            ]
          },
          "reloadEvery" : {
            "type" : "integer",
            "description" : "Reload streamer settings every x minutes. Zero or negative value disables it. Default: 0"
          },
          "streamerConfigDirectories" : {
            "description" : "Paths containing overrides for streamer configurations.",
            "type" : "array",
            "items" : {
              "type" : "object",
              "properties" : {
                "path" : {
                  "$ref" : "#/$defs/Path",
                  "description" : "Path to a folder that contains streamer configurations."
                },
                "recursive" : {
                  "type" : "boolean",
                  "description" : "If set to true, this folder will be scanned recursively. Default: false"
                }
              },
              "description" : "Folder used to override streamer configurations."
            }
          },
          "username" : {
            "type" : "string",
            "description" : "Mining account's username."
          },
          "versionProvider" : {
            "allOf" : [ {
              "type" : "string",
              "enum" : [ "MANIFEST", "WEBPAGE" ],
              "description" : "Way to get current Twitch's version."
            }, {
              "description" : "Method used to get twitch version. Default: WEBPAGE"
            } ]
          }
        },
        "description" : "Mining account configuration."
      }
    }
  },
  "description" : "Global configuration."
}
Cookies file JSON schema
{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "type" : "array",
  "items" : {
    "type" : "object",
    "properties" : {
      "domain" : {
        "type" : "string"
      },
      "expirationDate" : {
        "type" : "string"
      },
      "hostOnly" : {
        "type" : "boolean"
      },
      "httpOnly" : {
        "type" : "boolean"
      },
      "name" : {
        "type" : "string"
      },
      "path" : {
        "type" : "string"
      },
      "sameSite" : {
        "type" : "string"
      },
      "secure" : {
        "type" : "boolean"
      },
      "session" : {
        "type" : "boolean"
      },
      "storeId" : {
        "type" : "string"
      },
      "value" : {
        "type" : "string"
      }
    }
  }
}

Streamer configuration

Streamer configuration JSON schema
{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "type" : "object",
  "properties" : {
    "claimMoments" : {
      "type" : "boolean",
      "description" : "Claim moments. Default: false"
    },
    "enabled" : {
      "type" : "boolean",
      "description" : "Enable mining for this streamer. Default: true"
    },
    "followRaid" : {
      "type" : "boolean",
      "description" : "Follow raids to get bonus points. Default: false"
    },
    "index" : {
      "type" : "integer",
      "description" : "The streamer index. This value is used when streamers have the same score from the defined priorities, the one with the lowest index will be picked first. Default: 2147483647"
    },
    "joinChat" : {
      "type" : "boolean",
      "description" : "Join chat. Default: false"
    },
    "makePredictions" : {
      "type" : "boolean",
      "description" : "Place predictions. Default: false"
    },
    "participateCampaigns" : {
      "type" : "boolean",
      "description" : "Participate in campaigns and claim rewards (drops). Default: false"
    },
    "predictions" : {
      "allOf" : [ {
        "type" : "object",
        "properties" : {
          "actions" : {
            "description" : "Actions to perform before a bet is placed.",
            "type" : "array",
            "items" : {
              "type" : "object",
              "description" : "Ensure that the amount placed is lower than the top predictor.",
              "properties" : {
                "type" : {
                  "const" : "stealth"
                }
              },
              "required" : [ "type" ]
            }
          },
          "amountCalculator" : {
            "anyOf" : [ {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "amount" : {
                    "type" : "integer",
                    "description" : "Amount to place."
                  },
                  "type" : {
                    "const" : "constant"
                  }
                },
                "description" : "Always bet the same amount.",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to calculate the amount to the bet. Default: percentage(percentage: 20, max: 50000)"
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "max" : {
                    "type" : "integer",
                    "description" : "Maximum number of points."
                  },
                  "percentage" : {
                    "type" : "number",
                    "description" : "Percentage of your owned points to place, as a decimal value, between 0 and 1."
                  },
                  "type" : {
                    "const" : "percentage"
                  }
                },
                "description" : "Place a percentage of your points (with a limit).",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to calculate the amount to the bet. Default: percentage(percentage: 20, max: 50000)"
                }
              ]
            } ]
          },
          "delayCalculator" : {
            "anyOf" : [ {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "seconds" : {
                    "type" : "integer",
                    "description" : "Number of seconds before the end to place the bet."
                  },
                  "type" : {
                    "const" : "fromEnd"
                  }
                },
                "description" : "Place the bet a certain amount of time before the end of the original prediction.",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to calculate when to place the bet. Default: 10s from end"
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "seconds" : {
                    "type" : "integer",
                    "description" : "Number of seconds after the start to place the bet."
                  },
                  "type" : {
                    "const" : "fromStart"
                  }
                },
                "description" : "Place the bet a certain amount of time after the beginning of the original prediction.",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to calculate when to place the bet. Default: 10s from end"
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "percent" : {
                    "type" : "number",
                    "description" : "The percentage of the timer, as a decimal value, between 0 and 1."
                  },
                  "type" : {
                    "const" : "percentage"
                  }
                },
                "description" : "Place the bet after 'percent'% of the original timer elapsed.",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to calculate when to place the bet. Default: 10s from end"
                }
              ]
            } ]
          },
          "minimumPointsRequired" : {
            "type" : "integer",
            "description" : "Minimum amount of points to have to place a bet. If this threshold is not reached, no bet is placed. Default: fromEnd(10)"
          },
          "outcomePicker" : {
            "anyOf" : [ {
              "allOf" : [ {
                "type" : "object",
                "description" : "Choose the outcome with the most users.",
                "properties" : {
                  "type" : {
                    "const" : "mostUsers"
                  }
                },
                "required" : [ "type" ]
              }, {
                "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
              } ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "description" : "Choose the outcome with the least users.",
                "properties" : {
                  "type" : {
                    "const" : "leastUsers"
                  }
                },
                "required" : [ "type" ]
              }, {
                "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
              } ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "description" : "Choose the outcome with the most points. This is the same as 'the outcome with lower odds'.",
                "properties" : {
                  "type" : {
                    "const" : "mostPoints"
                  }
                },
                "required" : [ "type" ]
              }, {
                "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
              } ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "description" : "Choose the outcome with the least points. his is the same as 'the outcome with higher odds'.",
                "properties" : {
                  "type" : {
                    "const" : "leastPoints"
                  }
                },
                "required" : [ "type" ]
              }, {
                "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
              } ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "percentageGap" : {
                    "type" : "number",
                    "description" : "The percent gap of the user count, as decimal, between 0 and 1. (i.e. Setting this to 0.1, will mean that the condition switches states when the difference between sides is 10%, so 45% of the users on one side and 55% on the other)."
                  },
                  "type" : {
                    "const" : "smart"
                  }
                },
                "description" : "Choose the outcome with the most users. However, if the two most picked outcomes have a user count similar, choose the outcome with the least points (higher odds).",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                }
              ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "description" : "Choose the outcome with the biggest predictor.",
                "properties" : {
                  "type" : {
                    "const" : "biggestPredictor"
                  }
                },
                "required" : [ "type" ]
              }, {
                "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
              } ]
            }, {
              "allOf" : [ {
                "type" : "object",
                "properties" : {
                  "minTotalBetsPlacedByUser" : {
                    "type" : "integer",
                    "description" : "Only user with at least this number of bets are considered in the calculation. Default: 5"
                  },
                  "minTotalBetsPlacedOnOutcome" : {
                    "type" : "integer",
                    "description" : "Need at least x bets placed the chosen outcome. Default: 5"
                  },
                  "minTotalBetsPlacedOnPrediction" : {
                    "type" : "integer",
                    "description" : "Need at least x bets placed to bet on this prediction. Default: 10"
                  },
                  "type" : {
                    "const" : "mostTrusted"
                  }
                },
                "description" : "Choose the outcome that's backed by other users with the highest average return-on-investment. Requires analytics to be enabled and recordUserPredictions to be activated.",
                "required" : [
                  "type"
                ]
              },
                {
                  "description" : "How to choose what outcome to place the bet on. Default: smart(0.2)"
                }
              ]
            } ]
          }
        },
        "description" : "Prediction settings"
      }, {
        "description" : "Prediction settings."
      } ]
    },
    "priorities" : {
      "description" : "A list of conditions that, if met, will prioritize this streamer.",
      "type" : "array",
      "items" : {
        "anyOf" : [
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "type" : {
                "const" : "constant"
              }
            },
            "description" : "Adds a constant value to the score of the streamer.",
            "required" : [
              "type"
            ]
          },
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "score2" : {
                "type" : "integer",
                "description" : "Score for a T2 sub."
              },
              "score3" : {
                "type" : "integer",
                "description" : "Score for a T3 sub."
              },
              "type" : {
                "const" : "subscribed"
              }
            },
            "description" : "Return a score if the logged-in user is subscribed to the streamer.",
            "required" : [
              "type"
            ]
          },
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "threshold" : {
                "type" : "integer",
                "description" : "Current points must strictly be above this value to give the score."
              },
              "type" : {
                "const" : "pointsAbove"
              }
            },
            "description" : "Return a score if owned points are above a defined value.",
            "required" : [
              "type"
            ]
          },
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "threshold" : {
                "type" : "integer",
                "description" : "Current points must strictly be below this value to give the score."
              },
              "type" : {
                "const" : "pointsBelow"
              }
            },
            "description" : "Return a score if owned points are below a defined value.",
            "required" : [
              "type"
            ]
          },
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "type" : {
                "const" : "watchStreak"
              }
            },
            "description" : "Return a score if the streamer has a potential watch streak to claim.",
            "required" : [
              "type"
            ]
          },
          {
            "type" : "object",
            "properties" : {
              "score" : {
                "type" : "integer",
                "description" : "Score to give."
              },
              "type" : {
                "const" : "drops"
              }
            },
            "description" : "Return a score if a drop campaign may be progressed by watching this stream.",
            "required" : [
              "type"
            ]
          }
        ]
      }
    }
  },
  "description" : "Streamer settings"
}