Compare commits

..

No commits in common. "e5e88bf52083759aabc822933f92fde157b73368" and "31426fd85139f0d6d8c23e35caa3ee0a4a294987" have entirely different histories.

3 changed files with 41 additions and 50 deletions

View File

@ -323,21 +323,22 @@ REDEEMS={
"lurk": {"price": 1, "type": "counter", "info": "Let us know you're going to lurk."}, "lurk": {"price": 1, "type": "counter", "info": "Let us know you're going to lurk."},
"react": {"price": 200, "type": "note", "info": "Attach link to a video for me to react to."}, "react": {"price": 200, "type": "note", "info": "Attach link to a video for me to react to."},
"request": {"price": 100, "type": "note", "info": "Request a level, gamemode, skin, etc."}, "request": {"price": 100, "type": "note", "info": "Request a level, gamemode, skin, etc."},
"go_nap": {"goal": 1000, "type": "milestone", "info": "Streamer will go nap when the goal is reached."}, "go_nap": {"type": "milestone", "info": "Streamer will go nap when the goal is reached.", "goal": 1000},
"inactive": {"price": 100, "type": "note", "info": "Example redeem that is inactive by default", "category": ["inactive"]} "inactive": {"price": 100, "type": "note", "info": "Example redeem that is inactive by default", "category": ["inactive"]}
} }
``` ```
#### File format #### File format
`redeems.py` is a config file with just a `REDEEMS` key, that assigns a dictionary of redeems to it. `redeems.py` is a config file with just a `REDEEMS` key, that assigns a dictionary of redeems to it.
Each dictionary entry is a redeem, and the dictionary keys are strings that decides the chat command for the redeem. Each dictionary entry is a redeem, and the dictionary keys are strings that decides the chat command for the redeem.
The value is another dictionary that needs to have an entry for `"type"` and The value is another dictionary that needs to have entries for `"type"`,
an entry for `"price"` for non-milestones or `"goal"` for milestones. an entry for `"price"` unless the redeem is a milestone,
Optionally, each redeem can also have `"info"` and `"category"` entries. and optionally `"info"` and `"category"`.
If the `"type"` is `"milestone"`, there's an additional required `"goal"` field as well.
- `"price"` value should be an integer that decides how many points the redeem will cost. Milestone redeems don't use the `"price"` value, they instead need to have a `"goal"`. - `"price"` value should be an integer that decides how many points the redeem will cost. Milestone redeems don't use the `"price"` value.
- `"goal"` is a required field for milestone goals. It should be an integer, deciding the amount of points required to complete the milestone.
- `"type"` value should be either `"list"`, `"counter"`, `"note"` or `"milestone"`. This decided the redeem's type, and whether it will show up as a counter at the top of the dashboard or as an entry in the "recent redeems" chart. - `"type"` value should be either `"list"`, `"counter"`, `"note"` or `"milestone"`. This decided the redeem's type, and whether it will show up as a counter at the top of the dashboard or as an entry in the "recent redeems" chart.
- `"info"` value should be a string that describes what the command does. It's optional, but I recommend writing one for all `"list"`, `"note"` and `"milestone"` redeems (so that chatters know what they're redeeming and whether they should leave a note). - `"info"` value should be a string that describes what the command does. It's optional, but I recommend writing one for all `"list"`, `"note"` and `"milestone"` redeems (so that chatters know what they're redeeming and whether they should leave a note).
- `"goal"` is a required field for milestone goals. It should be an integer, deciding the amount of points required to complete the milestone.
- `"category"` is an optional list of strings, the categories the redeem is in. - `"category"` is an optional list of strings, the categories the redeem is in.
If a category from the list is in `ACTIVE_CATEGORIES` from `config.py`, If a category from the list is in `ACTIVE_CATEGORIES` from `config.py`,
then the redeem will be active. It will not be active if none of the categories then the redeem will be active. It will not be active if none of the categories

View File

@ -3,6 +3,6 @@ REDEEMS={
"lurk": {"price": 1, "type": "counter", "info": "Let us know you're going to lurk."}, "lurk": {"price": 1, "type": "counter", "info": "Let us know you're going to lurk."},
"react": {"price": 200, "type": "note", "info": "Attach link to a video for me to react to."}, "react": {"price": 200, "type": "note", "info": "Attach link to a video for me to react to."},
"request": {"price": 100, "type": "note", "info": "Request a level, gamemode, skin, etc."}, "request": {"price": 100, "type": "note", "info": "Request a level, gamemode, skin, etc."},
"go_nap": {"goal": 1000, "type": "milestone", "info": "Streamer will go nap when the goal is reached."}, "go_nap": {"type": "milestone", "info": "Streamer will go nap when the goal is reached.", "goal": 1000},
"inactive": {"price": 100, "type": "note", "info": "Example redeem that is inactive by default", "category": ["inactive"]} "inactive": {"price": 100, "type": "note", "info": "Example redeem that is inactive by default", "category": ["inactive"]}
} }

View File

@ -30,14 +30,12 @@
<th>Your points balance</th> <th>Your points balance</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for user in users %} {% for user in users %}
<tr> <tbody>
<td> {{ user[0] }} </td> <td> {{ user[0] }} </td>
<td> {{ user[1] }} </td> <td> {{ user[1] }} </td>
</tr>
{% endfor %}
</tbody> </tbody>
{% endfor %}
</table> </table>
{% endif %} {% endif %}
@ -54,14 +52,12 @@
<th>Active counters</th> <th>Active counters</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for counter in counters %} {% for counter in counters %}
<tr> <tbody>
<td> {{ counter[0] }} </td> <td> {{ counter[0] }} </td>
<td> {{ counter[1] }} </td> <td> {{ counter[1] }} </td>
</tr>
{% endfor %}
</tbody> </tbody>
{% endfor %}
</table> </table>
{% endif %} {% endif %}
{% if milestones %} {% if milestones %}
@ -72,15 +68,13 @@
<th>Progress</th> <th>Progress</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for milestone in milestones %} {% for milestone in milestones %}
<tr> <tbody>
<td> {{ milestone[0] }} </td> <td> {{ milestone[0] }} </td>
<td> <progress id="file" max={{ milestone[2] }} value={{ milestone[1] }}></progress></td> <td> <progress id="file" max={{ milestone[2] }} value={{ milestone[1] }}></progress></td>
<td> {{ milestone[1] }} / {{ milestone[2] }}</td> <td> {{ milestone[1] }} / {{ milestone[2] }}</td>
</tr>
{% endfor %}
</tbody> </tbody>
{% endfor %}
</table> </table>
{% endif %} {% endif %}
{% endif %} {% endif %}
@ -105,18 +99,16 @@
<th>Note</th> <th>Note</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for row in queue %} {% for row in queue %}
<tr> <tbody>
<td>{{ row[0].replace(tzinfo=utc_timezone).astimezone().strftime("%H:%M") }}</td> <td>{{ row[0].replace(tzinfo=utc_timezone).astimezone().strftime("%H:%M") }}</td>
<td>{{ row[1] }}</td> <td>{{ row[1] }}</td>
<td>{{ row[3] }}</td> <td>{{ row[3] }}</td>
{% if row[2] %} {% if row[2] %}
<td>{{ row[2] }}</td> <td>{{ row[2] }}</td>
{% endif %} {% endif %}
</tr>
{% endfor %}
</tbody> </tbody>
{% endfor %}
</table> </table>
{% endif %} {% endif %}
</body> </body>
@ -144,9 +136,8 @@
<th>Description</th> <th>Description</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for redeem, redeem_info in redeems.items() %} {% for redeem, redeem_info in redeems.items() %}
<tr> <tbody>
<td>{{ prefix }}{{ redeem }}</td> <td>{{ prefix }}{{ redeem }}</td>
{% if redeem_info["type"] == "milestone" %} {% if redeem_info["type"] == "milestone" %}
<td></td> <td></td>
@ -157,9 +148,8 @@
{% if redeem_info["info"] %} {% if redeem_info["info"] %}
<td>{{ redeem_info["info"] }}</td> <td>{{ redeem_info["info"] }}</td>
{% endif %} {% endif %}
</tr>
{% endfor %}
</tbody> </tbody>
{% endfor %}
</table> </table>
{% endif %} {% endif %}
</body> </body>