Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acbc93bedd | ||
|
|
e5e88bf520 | ||
|
|
b4a6c4e41c |
@@ -2,9 +2,12 @@ import os
|
||||
import logging
|
||||
from flask import Flask
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from datetime import datetime
|
||||
from tlapbot.db import get_db
|
||||
from tlapbot.owncast_requests import is_stream_live, give_points_to_chat
|
||||
from tlapbot.redeems import remove_inactive_redeems
|
||||
from tlapbot.helpers import (get_last_online_time, delete_last_online_time,
|
||||
save_last_online_time)
|
||||
|
||||
def create_app(test_config=None):
|
||||
app = Flask(__name__, instance_relative_config=True)
|
||||
@@ -56,9 +59,14 @@ def create_app(test_config=None):
|
||||
def proxy_job():
|
||||
with app.app_context():
|
||||
if is_stream_live():
|
||||
if get_last_online_time:
|
||||
delete_last_online_time()
|
||||
app.logger.info("Stream is LIVE. Giving points to chat.")
|
||||
give_points_to_chat(get_db())
|
||||
else:
|
||||
if not get_last_online_time:
|
||||
# TODO: error state
|
||||
save_last_online_time(get_db(), datetime.now(), False)
|
||||
app.logger.info("Stream is NOT LIVE. (Not giving points to chat.)")
|
||||
|
||||
# start scheduler that will give points to users
|
||||
|
||||
@@ -95,6 +95,37 @@ def add_user_to_database(db, user_id, display_name):
|
||||
current_app.logger.error(f"To user id: {user_id}, with display name: {display_name}")
|
||||
|
||||
|
||||
def save_last_online_time(db, timestamp, from_owncast):
|
||||
try:
|
||||
db.execute(
|
||||
"INSERT OVERWRITE last_online_time(id, last_online_time, from_owncast)",
|
||||
(1, timestamp, from_owncast)
|
||||
)
|
||||
db.commit()
|
||||
except Error as e:
|
||||
current_app.logger.error(f"Error occured saving last online time: {e.args[0]}")
|
||||
current_app.logger.error(f"Timestamp: {timestamp}, from_owncast: {from_owncast}")
|
||||
|
||||
|
||||
def get_last_online_time(db):
|
||||
try:
|
||||
cursor = db.execute(
|
||||
"SELECT last_online_time FROM last_online_time WHERE id = 1"
|
||||
)
|
||||
last_online_time = cursor.fetchone()
|
||||
return last_online_time
|
||||
except Error as e:
|
||||
current_app.logger.error(f"Error occured reading last online time: {e.args[0]}")
|
||||
|
||||
|
||||
def delete_last_online_time(db):
|
||||
try:
|
||||
db.execute("DELETE FROM last_online_time")
|
||||
db.commit()
|
||||
except Error as e:
|
||||
current_app.logger.error(f"Error occured deleting last online time: {e.args[0]}")
|
||||
|
||||
|
||||
def change_display_name(db, user_id, new_name):
|
||||
try:
|
||||
cursor = db.execute(
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
from flask import Flask, request, json, Blueprint, current_app
|
||||
from tlapbot.db import get_db
|
||||
from datetime import datetime
|
||||
from tlapbot.db import get_db, refresh_counters, clear_redeem_queue
|
||||
from tlapbot.owncast_requests import send_chat
|
||||
from tlapbot.owncast_helpers import (add_user_to_database, change_display_name,
|
||||
read_users_points, remove_duplicate_usernames)
|
||||
read_users_points, remove_duplicate_usernames, get_last_online_time, delete_last_online_time)
|
||||
from tlapbot.help_message import send_help
|
||||
from tlapbot.redeems_handler import handle_redeem
|
||||
|
||||
# might need datetime timestamp
|
||||
|
||||
bp = Blueprint('owncast_webhooks', __name__)
|
||||
|
||||
@@ -15,6 +17,22 @@ def owncast_webhook():
|
||||
data = request.json
|
||||
db = get_db()
|
||||
|
||||
if data["type"] == "STREAM_STARTED":
|
||||
# TODO: make this a function, import here and in init
|
||||
delete_last_online_time(db)
|
||||
last_online = get_last_online_time(db)
|
||||
if last_online and current_app.config['AUTO_REFRESH']:
|
||||
time_difference = datetime.now() - last_online
|
||||
if time_difference.seconds//60 > current_app.config['RECONNECT_TIME']:
|
||||
if refresh_counters() and clear_redeem_queue():
|
||||
current_app.logger.debug(f'Counters refreshed, redeem queue cleared.')
|
||||
else:
|
||||
current_app.logger.error(
|
||||
f'Error occured when automatically clearing queue and resetting counters.'
|
||||
)
|
||||
elif data["type"] == "STREAM_STOPPED":
|
||||
save_last_online_time(db, datetime.now(), True)
|
||||
|
||||
# Make sure user is in db before doing anything else.
|
||||
if data["type"] in ["CHAT", "NAME_CHANGED", "USER_JOINED"]:
|
||||
user_id = data["eventData"]["user"]["id"]
|
||||
|
||||
@@ -30,3 +30,8 @@ CREATE TABLE redeem_queue (
|
||||
note TEXT,
|
||||
FOREIGN KEY (redeemer_id) REFERENCES points (id)
|
||||
);
|
||||
|
||||
CREATE TABLE online_time(
|
||||
id INTEGER PRIMARY KEY,
|
||||
online_time TIMESTAMP NOT NULL
|
||||
);
|
||||
@@ -30,12 +30,14 @@
|
||||
<th>Your points balance</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for user in users %}
|
||||
<tbody>
|
||||
<td> {{ user[0] }} </td>
|
||||
<td> {{ user[1] }} </td>
|
||||
</tbody>
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td> {{ user[0] }} </td>
|
||||
<td> {{ user[1] }} </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
@@ -52,12 +54,14 @@
|
||||
<th>Active counters</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for counter in counters %}
|
||||
<tbody>
|
||||
<td> {{ counter[0] }} </td>
|
||||
<td> {{ counter[1] }} </td>
|
||||
</tbody>
|
||||
{% for counter in counters %}
|
||||
<tr>
|
||||
<td> {{ counter[0] }} </td>
|
||||
<td> {{ counter[1] }} </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if milestones %}
|
||||
@@ -68,13 +72,15 @@
|
||||
<th>Progress</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for milestone in milestones %}
|
||||
<tbody>
|
||||
<td> {{ milestone[0] }} </td>
|
||||
<td> <progress id="file" max={{ milestone[2] }} value={{ milestone[1] }}></progress></td>
|
||||
<td> {{ milestone[1] }} / {{ milestone[2] }}</td>
|
||||
</tbody>
|
||||
{% for milestone in milestones %}
|
||||
<tr>
|
||||
<td> {{ milestone[0] }} </td>
|
||||
<td> <progress id="file" max={{ milestone[2] }} value={{ milestone[1] }}></progress></td>
|
||||
<td> {{ milestone[1] }} / {{ milestone[2] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
@@ -99,16 +105,18 @@
|
||||
<th>Note</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for row in queue %}
|
||||
<tbody>
|
||||
<td>{{ row[0].replace(tzinfo=utc_timezone).astimezone().strftime("%H:%M") }}</td>
|
||||
<td>{{ row[1] }}</td>
|
||||
<td>{{ row[3] }}</td>
|
||||
{% if row[2] %}
|
||||
<td>{{ row[2] }}</td>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
{% for row in queue %}
|
||||
<tr>
|
||||
<td>{{ row[0].replace(tzinfo=utc_timezone).astimezone().strftime("%H:%M") }}</td>
|
||||
<td>{{ row[1] }}</td>
|
||||
<td>{{ row[3] }}</td>
|
||||
{% if row[2] %}
|
||||
<td>{{ row[2] }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
</body>
|
||||
@@ -136,20 +144,22 @@
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for redeem, redeem_info in redeems.items() %}
|
||||
<tbody>
|
||||
<td>{{ prefix }}{{ redeem }}</td>
|
||||
{% if redeem_info["type"] == "milestone" %}
|
||||
<td></td>
|
||||
{% else %}
|
||||
<td>{{ redeem_info["price"] }}</td>
|
||||
{% endif %}
|
||||
<td>{{ redeem_info["type"] }}</td>
|
||||
{% if redeem_info["info"] %}
|
||||
<td>{{ redeem_info["info"] }}</td>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
{% for redeem, redeem_info in redeems.items() %}
|
||||
<tr>
|
||||
<td>{{ prefix }}{{ redeem }}</td>
|
||||
{% if redeem_info["type"] == "milestone" %}
|
||||
<td></td>
|
||||
{% else %}
|
||||
<td>{{ redeem_info["price"] }}</td>
|
||||
{% endif %}
|
||||
<td>{{ redeem_info["type"] }}</td>
|
||||
{% if redeem_info["info"] %}
|
||||
<td>{{ redeem_info["info"] }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user