diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..685b2cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*.pyc +__pycache__/ + +instance/ + +.pytest_cache/ +.coverage +htmlcov/ + +dist/ +build/ +*.egg-info/ \ No newline at end of file diff --git a/main.py b/main.py index f094385..c99984f 100644 --- a/main.py +++ b/main.py @@ -1,27 +1,46 @@ -from flask import Flask,request,json +from flask import Flask,request,json,g +from tlapbot.db import get_db import requests app = Flask(__name__) -@app.route('/') -def hello(): - return 'Webhooks with Python' - -@app.route('/githubIssue',methods=['POST']) -def githubIssue(): - data = request.json - print(f'Issue {data["issue"]["title"]} {data["action"]} \n') - print(f'{data["issue"]["body"]} \n') - print(f'{data["issue"]["url"]} \n') - return data - @app.route('/owncastWebhook',methods=['POST']) def owncastWebhook(): data = request.json + db = get_db() if data["type"] == "CHAT": print("New chat message:") print(f'from {data["eventData"]["user"]["displayName"]}:') print(f'{data["eventData"]["body"]}') + + elif data["type"] == "USER_JOINED": + user_id = data["eventData"]["user"]["id"] + try: + cursor = db.execute( + "SELECT username FROM points WHERE id = ?", + (user_id) + ) + if cursor.fetchone() == None: + username = data["eventData"]["user"]["displayName"] + cursor.execute( + "INSERT INTO points(id, username, points) VALUES(?, ?, 0)", + (user_id, username) + ) + db.commit() + + elif data["type"] == "NAME_CHANGED": + user_id = data["eventData"]["user"]["id"] + new_username = data["eventData"]["user"]["newName"] + try: + db.execute( + "UPDATE points SET username = ? WHERE id = ?", + (new_username, user_id), + ) + db.commit() + except db.IntegrityError: + print("Integrity Error.") + print(f"User ID {user_id} probably does not exist.") + return data if __name__ == '__main__': diff --git a/tlapbot/__init__.py b/tlapbot/__init__.py new file mode 100644 index 0000000..1fa45f0 --- /dev/null +++ b/tlapbot/__init__.py @@ -0,0 +1,33 @@ +import os + +from flask import Flask + + +def create_app(test_config=None): + # create and configure the app + app = Flask(__name__, instance_relative_config=True) + app.config.from_mapping( + SECRET_KEY='dev', + DATABASE=os.path.join(app.instance_path, 'tlapbot.sqlite'), + ) + + if test_config is None: + # load the instance config, if it exists, when not testing + app.config.from_pyfile('config.py', silent=True) + else: + # load the test config if passed in + app.config.from_mapping(test_config) + + # ensure the instance folder exists + try: + os.makedirs(app.instance_path) + except OSError: + pass + + from . import db + db.init_app(app) + + return app + +if __name__ == '__main__': + create_app() \ No newline at end of file diff --git a/tlapbot/db.py b/tlapbot/db.py new file mode 100644 index 0000000..74dea73 --- /dev/null +++ b/tlapbot/db.py @@ -0,0 +1,41 @@ +import sqlite3 + +import click +from flask import current_app, g +from flask.cli import with_appcontext + + +def get_db(): + if 'db' not in g: + g.db = sqlite3.connect( + current_app.config['DATABASE'], + detect_types=sqlite3.PARSE_DECLTYPES + ) + g.db.row_factory = sqlite3.Row + + return g.db + + +def close_db(e=None): + db = g.pop('db', None) + + if db is not None: + db.close() + +def init_db(): + db = get_db() + + with current_app.open_resource('schema.sql') as f: + db.executescript(f.read().decode('utf8')) + + +@click.command('init-db') +@with_appcontext +def init_db_command(): + """Clear the existing data and create new tables.""" + init_db() + click.echo('Initialized the database.') + +def init_app(app): + app.teardown_appcontext(close_db) + app.cli.add_command(init_db_command) \ No newline at end of file diff --git a/tlapbot/schema.sql b/tlapbot/schema.sql new file mode 100644 index 0000000..18da7b8 --- /dev/null +++ b/tlapbot/schema.sql @@ -0,0 +1,7 @@ +DROP TABLE IF EXISTS points; + +CREATE TABLE points ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + points INTEGER +); \ No newline at end of file