From 10e84d4aab9c2217f41706833a77bc8ef37abcf3 Mon Sep 17 00:00:00 2001 From: Lili Date: Mon, 20 Mar 2023 17:28:54 +0100 Subject: [PATCH] split redeem operations into redeems.py owncast_helpers.py is now smaller and only contains smaller, generic fns so no direct redeem manipulations, but reading points, users, etc. --- tlapbot/owncast_helpers.py | 176 --------------------------- tlapbot/owncast_redeem_dashboard.py | 4 +- tlapbot/redeems.py | 179 ++++++++++++++++++++++++++++ tlapbot/redeems_handler.py | 6 +- 4 files changed, 184 insertions(+), 181 deletions(-) create mode 100644 tlapbot/redeems.py diff --git a/tlapbot/owncast_helpers.py b/tlapbot/owncast_helpers.py index e498d17..1bdbfa6 100644 --- a/tlapbot/owncast_helpers.py +++ b/tlapbot/owncast_helpers.py @@ -107,182 +107,6 @@ def change_display_name(db, user_id, new_name): current_app.logger.error(f"To user id: {user_id}, with display name: {new_name}") -def counter_exists(db, counter_name): - try: - cursor = db.execute( - "SELECT count FROM counters WHERE name = ?", - (counter_name,) - ) - counter = cursor.fetchone() - if counter is None: - current_app.logger.warning("Counter not found in database.") - current_app.logger.warning("Maybe you forgot to run the refresh-counters CLI command " - "after you added a new counter to the config?") - return False - return True - except Error as e: - current_app.logger.error(f"Error occured checking if counter exists: {e.args[0]}") - current_app.logger.error(f"For counter: {counter_name}") - - -def add_to_counter(db, counter_name): - if counter_exists(db, counter_name): - try: - cursor = db.execute( - "UPDATE counters SET count = count + 1 WHERE name = ?", - (counter_name,) - ) - db.commit() - return True - except Error as e: - current_app.logger.error(f"Error occured adding to counter: {e.args[0]}") - current_app.logger.error(f"To counter: {counter_name}") - return False - - -def add_to_redeem_queue(db, user_id, redeem_name, note=None): - try: - cursor = db.execute( - "INSERT INTO redeem_queue(redeem, redeemer_id, note) VALUES(?, ?, ?)", - (redeem_name, user_id, note) - ) - db.commit() - return True - except Error as e: - current_app.logger.error(f"Error occured adding to redeem queue: {e.args[0]}") - current_app.logger.error(f"To user: {user_id} with redeem: {redeem_name} with note: {note}") - return False - - -def start_milestone(db, redeem_name): - try: - cursor = db.execute( - "SELECT progress, goal FROM milestones WHERE name = ?", - (redeem_name,) - ) - milestone = cursor.fetchone() - current_app.logger.error(f"Milestone: {milestone}") - if milestone is None: - cursor = db.execute( - "INSERT INTO milestones(name, progress, goal) VALUES(?, ?, ?)", - (redeem_name, 0, current_app.config['REDEEMS'][redeem_name]['goal']) - ) - db.commit() - except Error as e: - current_app.logger.error(f"Error occured adding a milestone: {e.args[0]}") - - -def add_to_milestone(db, user_id, redeem_name, points_donated): - try: - cursor = db.execute( - "SELECT progress, goal FROM milestones WHERE name = ?", - (redeem_name,) - ) - row = cursor.fetchone() - if row is None: - current_app.logger.warning("Milestone not found in database.") - current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " - "after you added a new milestone to the config?") - return False - progress, goal = row - if progress + points_donated > goal: - points_donated = goal - progress - if use_points(db, user_id, points_donated): - cursor = db.execute( - "UPDATE milestones SET progress = ? WHERE name = ?", - (progress + points_donated, redeem_name) - ) - db.commit() - return True - except Error as e: - current_app.logger.error(f"Error occured updating milestone: {e.args[0]}") - return False - - -def milestone_complete(db, redeem_name): - try: - cursor = db.execute( - "SELECT complete FROM milestones WHERE name = ?", - (redeem_name,) - ) - row = cursor.fetchone() - if row is None: - current_app.logger.warning("Milestone not found in database.") - current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " - "after you added a new milestone to the config?") - return row[0] - except Error as e: - current_app.logger.error(f"Error occured checking if milestone is complete: {e.args[0]}") - - -def check_apply_milestone_completion(db, redeem_name): - try: - cursor = db.execute( - "SELECT progress, goal FROM milestones WHERE name = ?", - (redeem_name,) - ) - row = cursor.fetchone() - if row is None: - current_app.logger.warning("Milestone not found in database.") - current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " - "after you added a new milestone to the config?") - progress, goal = row - if progress == goal: - cursor = db.execute( - "UPDATE milestones SET complete = TRUE WHERE name = ?", - (redeem_name,) - ) - db.commit() - return True - return False - except Error as e: - current_app.logger.error(f"Error occured applying milestone completion: {e.args[0]}") - return False - - -def all_milestones(db): - try: - cursor = db.execute( - """SELECT name, progress, goal FROM milestones""" - ) - return cursor.fetchall() - except Error as e: - current_app.logger.error(f"Error occured selecting all milestones: {e.args[0]}") - - -def all_counters(db): - try: - cursor = db.execute( - """SELECT counters.name, counters.count FROM counters""" - ) - return cursor.fetchall() - except Error as e: - current_app.logger.error(f"Error occured selecting all counters: {e.args[0]}") - - -def pretty_redeem_queue(db): - try: - cursor = db.execute( - """SELECT redeem_queue.created, redeem_queue.redeem, redeem_queue.note, points.name - FROM redeem_queue - INNER JOIN points - on redeem_queue.redeemer_id = points.id""" - ) - return cursor.fetchall() - except Error as e: - current_app.logger.error(f"Error occured selecting pretty redeem queue: {e.args[0]}") - - -def whole_redeem_queue(db): - try: - cursor = db.execute( - "SELECT * from redeem_queue" - ) - return cursor.fetchall() - except Error as e: - current_app.logger.error(f"Error occured selecting redeem queue: {e.args[0]}") - - def remove_duplicate_usernames(db, user_id, username): try: cursor = db.execute( diff --git a/tlapbot/owncast_redeem_dashboard.py b/tlapbot/owncast_redeem_dashboard.py index fcfc298..d35ab5c 100644 --- a/tlapbot/owncast_redeem_dashboard.py +++ b/tlapbot/owncast_redeem_dashboard.py @@ -1,7 +1,7 @@ from flask import render_template, Blueprint, request, current_app from tlapbot.db import get_db -from tlapbot.owncast_helpers import (pretty_redeem_queue, all_counters, - all_milestones, read_all_users_with_username) +from tlapbot.redeems import all_counters, all_milestones, pretty_redeem_queue +from tlapbot.owncast_helpers import read_all_users_with_username from datetime import datetime, timezone bp = Blueprint('redeem_dashboard', __name__) diff --git a/tlapbot/redeems.py b/tlapbot/redeems.py new file mode 100644 index 0000000..8daeb22 --- /dev/null +++ b/tlapbot/redeems.py @@ -0,0 +1,179 @@ +from flask import current_app +from sqlite3 import Error +from tlapbot.owncast_helpers import use_points + +def counter_exists(db, counter_name): + try: + cursor = db.execute( + "SELECT count FROM counters WHERE name = ?", + (counter_name,) + ) + counter = cursor.fetchone() + if counter is None: + current_app.logger.warning("Counter not found in database.") + current_app.logger.warning("Maybe you forgot to run the refresh-counters CLI command " + "after you added a new counter to the config?") + return False + return True + except Error as e: + current_app.logger.error(f"Error occured checking if counter exists: {e.args[0]}") + current_app.logger.error(f"For counter: {counter_name}") + + +def add_to_counter(db, counter_name): + if counter_exists(db, counter_name): + try: + cursor = db.execute( + "UPDATE counters SET count = count + 1 WHERE name = ?", + (counter_name,) + ) + db.commit() + return True + except Error as e: + current_app.logger.error(f"Error occured adding to counter: {e.args[0]}") + current_app.logger.error(f"To counter: {counter_name}") + return False + + +def add_to_redeem_queue(db, user_id, redeem_name, note=None): + try: + cursor = db.execute( + "INSERT INTO redeem_queue(redeem, redeemer_id, note) VALUES(?, ?, ?)", + (redeem_name, user_id, note) + ) + db.commit() + return True + except Error as e: + current_app.logger.error(f"Error occured adding to redeem queue: {e.args[0]}") + current_app.logger.error(f"To user: {user_id} with redeem: {redeem_name} with note: {note}") + return False + + +def start_milestone(db, redeem_name): + try: + cursor = db.execute( + "SELECT progress, goal FROM milestones WHERE name = ?", + (redeem_name,) + ) + milestone = cursor.fetchone() + current_app.logger.error(f"Milestone: {milestone}") + if milestone is None: + cursor = db.execute( + "INSERT INTO milestones(name, progress, goal) VALUES(?, ?, ?)", + (redeem_name, 0, current_app.config['REDEEMS'][redeem_name]['goal']) + ) + db.commit() + except Error as e: + current_app.logger.error(f"Error occured adding a milestone: {e.args[0]}") + + +def add_to_milestone(db, user_id, redeem_name, points_donated): + try: + cursor = db.execute( + "SELECT progress, goal FROM milestones WHERE name = ?", + (redeem_name,) + ) + row = cursor.fetchone() + if row is None: + current_app.logger.warning("Milestone not found in database.") + current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " + "after you added a new milestone to the config?") + return False + progress, goal = row + if progress + points_donated > goal: + points_donated = goal - progress + if use_points(db, user_id, points_donated): + cursor = db.execute( + "UPDATE milestones SET progress = ? WHERE name = ?", + (progress + points_donated, redeem_name) + ) + db.commit() + return True + except Error as e: + current_app.logger.error(f"Error occured updating milestone: {e.args[0]}") + return False + + +def milestone_complete(db, redeem_name): + try: + cursor = db.execute( + "SELECT complete FROM milestones WHERE name = ?", + (redeem_name,) + ) + row = cursor.fetchone() + if row is None: + current_app.logger.warning("Milestone not found in database.") + current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " + "after you added a new milestone to the config?") + return row[0] + except Error as e: + current_app.logger.error(f"Error occured checking if milestone is complete: {e.args[0]}") + + +def check_apply_milestone_completion(db, redeem_name): + try: + cursor = db.execute( + "SELECT progress, goal FROM milestones WHERE name = ?", + (redeem_name,) + ) + row = cursor.fetchone() + if row is None: + current_app.logger.warning("Milestone not found in database.") + current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " + "after you added a new milestone to the config?") + progress, goal = row + if progress == goal: + cursor = db.execute( + "UPDATE milestones SET complete = TRUE WHERE name = ?", + (redeem_name,) + ) + db.commit() + return True + return False + except Error as e: + current_app.logger.error(f"Error occured applying milestone completion: {e.args[0]}") + return False + + +def all_milestones(db): + try: + cursor = db.execute( + """SELECT name, progress, goal FROM milestones""" + ) + return cursor.fetchall() + except Error as e: + current_app.logger.error(f"Error occured selecting all milestones: {e.args[0]}") + + +def all_counters(db): + try: + cursor = db.execute( + """SELECT counters.name, counters.count FROM counters""" + ) + return cursor.fetchall() + except Error as e: + current_app.logger.error(f"Error occured selecting all counters: {e.args[0]}") + + +def pretty_redeem_queue(db): + try: + cursor = db.execute( + """SELECT redeem_queue.created, redeem_queue.redeem, redeem_queue.note, points.name + FROM redeem_queue + INNER JOIN points + on redeem_queue.redeemer_id = points.id""" + ) + return cursor.fetchall() + except Error as e: + current_app.logger.error(f"Error occured selecting pretty redeem queue: {e.args[0]}") + + +def whole_redeem_queue(db): + try: + cursor = db.execute( + "SELECT * from redeem_queue" + ) + return cursor.fetchall() + except Error as e: + current_app.logger.error(f"Error occured selecting redeem queue: {e.args[0]}") + diff --git a/tlapbot/redeems_handler.py b/tlapbot/redeems_handler.py index 3c9d2d7..97d389b 100644 --- a/tlapbot/redeems_handler.py +++ b/tlapbot/redeems_handler.py @@ -1,9 +1,9 @@ from flask import current_app from tlapbot.db import get_db from tlapbot.owncast_requests import send_chat -from tlapbot.owncast_helpers import (use_points, add_to_redeem_queue, - add_to_counter, read_users_points, remove_emoji, - add_to_milestone, check_apply_milestone_completion, milestone_complete) +from tlapbot.redeems import (add_to_redeem_queue, add_to_counter, add_to_milestone, + check_apply_milestone_completion, milestone_complete) +from tlapbot.owncast_helpers import use_points, read_users_points, remove_emoji def handle_redeem(message, user_id):