auto-refresh base

untested
This commit is contained in:
Lili (Tlapka) 2024-02-04 11:31:42 +01:00
parent e5e88bf520
commit acbc93bedd
4 changed files with 64 additions and 2 deletions

View File

@ -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

View File

@ -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(

View File

@ -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"]

View File

@ -29,4 +29,9 @@ CREATE TABLE redeem_queue (
redeemer_id TEXT NOT NULL,
note TEXT,
FOREIGN KEY (redeemer_id) REFERENCES points (id)
);
CREATE TABLE online_time(
id INTEGER PRIMARY KEY,
online_time TIMESTAMP NOT NULL
);