early progress: untested so far
This commit is contained in:
parent
1d3bce203c
commit
de9294c754
|
@ -0,0 +1,12 @@
|
||||||
|
*.pyc
|
||||||
|
__pycache__/
|
||||||
|
|
||||||
|
instance/
|
||||||
|
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
*.egg-info/
|
45
main.py
45
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
|
import requests
|
||||||
|
|
||||||
app = Flask(__name__)
|
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'])
|
@app.route('/owncastWebhook',methods=['POST'])
|
||||||
def owncastWebhook():
|
def owncastWebhook():
|
||||||
data = request.json
|
data = request.json
|
||||||
|
db = get_db()
|
||||||
if data["type"] == "CHAT":
|
if data["type"] == "CHAT":
|
||||||
print("New chat message:")
|
print("New chat message:")
|
||||||
print(f'from {data["eventData"]["user"]["displayName"]}:')
|
print(f'from {data["eventData"]["user"]["displayName"]}:')
|
||||||
print(f'{data["eventData"]["body"]}')
|
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
|
return data
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -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()
|
|
@ -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)
|
|
@ -0,0 +1,7 @@
|
||||||
|
DROP TABLE IF EXISTS points;
|
||||||
|
|
||||||
|
CREATE TABLE points (
|
||||||
|
id TEXT PRIMARY KEY,
|
||||||
|
username TEXT NOT NULL,
|
||||||
|
points INTEGER
|
||||||
|
);
|
Loading…
Reference in New Issue