Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e65ffae8ce | ||
|
|
c6d94f9d5f | ||
|
|
bafa1eca16 | ||
|
|
9c0e709c63 | ||
|
|
99bdcc16cc | ||
|
|
89c9d5945a | ||
|
|
65b68f886e | ||
|
|
fe57550de2 | ||
|
|
420d954568 |
@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='tlapbot',
|
name='tlapbot',
|
||||||
version='1.0.0',
|
version='1.0.1',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ def create_app(test_config=None):
|
|||||||
app.config.from_pyfile('redeems.py', silent=True)
|
app.config.from_pyfile('redeems.py', silent=True)
|
||||||
|
|
||||||
# Make logging work for gunicorn-ran instances of tlapbot.
|
# Make logging work for gunicorn-ran instances of tlapbot.
|
||||||
if app.config['GUNICORN'] is True:
|
if app.config['GUNICORN']:
|
||||||
gunicorn_logger = logging.getLogger('gunicorn.error')
|
gunicorn_logger = logging.getLogger('gunicorn.error')
|
||||||
app.logger.handlers = gunicorn_logger.handlers
|
app.logger.handlers = gunicorn_logger.handlers
|
||||||
app.logger.setLevel(gunicorn_logger.level)
|
app.logger.setLevel(gunicorn_logger.level)
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ from sqlite3 import Error
|
|||||||
# # # requests stuff # # #
|
# # # requests stuff # # #
|
||||||
def is_stream_live():
|
def is_stream_live():
|
||||||
url = current_app.config['OWNCAST_INSTANCE_URL'] + '/api/status'
|
url = current_app.config['OWNCAST_INSTANCE_URL'] + '/api/status'
|
||||||
r = requests.post(url)
|
r = requests.get(url)
|
||||||
return r.json()["online"]
|
return r.json()["online"]
|
||||||
|
|
||||||
|
|
||||||
def give_points_to_chat(db):
|
def give_points_to_chat(db):
|
||||||
url = current_app.config['OWNCAST_INSTANCE_URL'] + '/api/integrations/clients'
|
url = current_app.config['OWNCAST_INSTANCE_URL'] + '/api/integrations/clients'
|
||||||
headers = {"Authorization": "Bearer " + current_app.config['OWNCAST_ACCESS_TOKEN']}
|
headers = {"Authorization": "Bearer " + current_app.config['OWNCAST_ACCESS_TOKEN']}
|
||||||
r = requests.post(url, headers=headers)
|
r = requests.get(url, headers=headers)
|
||||||
unique_users = list(set(map(lambda user_object: user_object["user"]["id"], r.json())))
|
unique_users = list(set(map(lambda user_object: user_object["user"]["id"], r.json())))
|
||||||
for user_id in unique_users:
|
for user_id in unique_users:
|
||||||
give_points_to_user(db,
|
give_points_to_user(db,
|
||||||
|
|||||||
@@ -13,11 +13,14 @@ bp = Blueprint('owncast_webhooks', __name__)
|
|||||||
def owncast_webhook():
|
def owncast_webhook():
|
||||||
data = request.json
|
data = request.json
|
||||||
db = get_db()
|
db = get_db()
|
||||||
if data["type"] == "USER_JOINED":
|
|
||||||
|
# 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"]
|
user_id = data["eventData"]["user"]["id"]
|
||||||
display_name = data["eventData"]["user"]["displayName"]
|
display_name = data["eventData"]["user"]["displayName"]
|
||||||
# CONSIDER: join points for joining stream
|
|
||||||
add_user_to_database(db, user_id, display_name)
|
add_user_to_database(db, user_id, display_name)
|
||||||
|
|
||||||
|
if data["type"] == "USER_JOINED":
|
||||||
if data["eventData"]["user"]["authenticated"]:
|
if data["eventData"]["user"]["authenticated"]:
|
||||||
remove_duplicate_usernames(db, user_id, display_name)
|
remove_duplicate_usernames(db, user_id, display_name)
|
||||||
elif data["type"] == "NAME_CHANGE":
|
elif data["type"] == "NAME_CHANGE":
|
||||||
@@ -31,15 +34,12 @@ def owncast_webhook():
|
|||||||
display_name = data["eventData"]["user"]["displayName"]
|
display_name = data["eventData"]["user"]["displayName"]
|
||||||
current_app.logger.debug(f'New chat message from {display_name}:')
|
current_app.logger.debug(f'New chat message from {display_name}:')
|
||||||
current_app.logger.debug(f'{data["eventData"]["body"]}')
|
current_app.logger.debug(f'{data["eventData"]["body"]}')
|
||||||
if "!help" in data["eventData"]["body"]:
|
if data["eventData"]["body"].startswith("!help"):
|
||||||
send_help()
|
send_help()
|
||||||
elif "!points" in data["eventData"]["body"]:
|
elif data["eventData"]["body"].startswith("!points"):
|
||||||
if not user_exists(db, user_id):
|
|
||||||
add_user_to_database(db, user_id, display_name)
|
|
||||||
points = read_users_points(db, user_id)
|
points = read_users_points(db, user_id)
|
||||||
message = f"{display_name}'s points: {points}"
|
send_chat(f"{display_name}'s points: {points}")
|
||||||
send_chat(message)
|
elif data["eventData"]["body"].startswith("!name_update"):
|
||||||
elif "!name_update" in data["eventData"]["body"]:
|
|
||||||
# Forces name update in case bot didn't catch the NAME_CHANGE
|
# Forces name update in case bot didn't catch the NAME_CHANGE
|
||||||
# event. Also removes saved usernames from users with same name
|
# event. Also removes saved usernames from users with same name
|
||||||
# if user is authenticated.
|
# if user is authenticated.
|
||||||
|
|||||||
+29
-26
@@ -12,30 +12,33 @@ def handle_redeem(message, user_id):
|
|||||||
else:
|
else:
|
||||||
note = split_message[1]
|
note = split_message[1]
|
||||||
|
|
||||||
if redeem in current_app.config['REDEEMS']:
|
if redeem not in current_app.config['REDEEMS']:
|
||||||
db = get_db()
|
|
||||||
price = current_app.config['REDEEMS'][redeem]["price"]
|
|
||||||
redeem_type = current_app.config['REDEEMS'][redeem]["type"]
|
|
||||||
points = read_users_points(db, user_id)
|
|
||||||
if points is not None and points >= price:
|
|
||||||
if redeem_type == "counter":
|
|
||||||
add_to_counter(db, redeem)
|
|
||||||
use_points(db, user_id, price)
|
|
||||||
send_chat(f"{redeem} redeemed for {price} points.")
|
|
||||||
elif redeem_type == "list":
|
|
||||||
add_to_redeem_queue(db, user_id, redeem)
|
|
||||||
use_points(db, user_id, price)
|
|
||||||
send_chat(f"{redeem} redeemed for {price} points.")
|
|
||||||
elif redeem_type == "note":
|
|
||||||
if note is not None:
|
|
||||||
add_to_redeem_queue(db, user_id, redeem, note)
|
|
||||||
use_points(db, user_id, price)
|
|
||||||
send_chat(f"{redeem} redeemed for {price} points.")
|
|
||||||
else:
|
|
||||||
send_chat(f"Cannot redeem {redeem}, no note included.")
|
|
||||||
else:
|
|
||||||
send_chat(f"{redeem} not redeemed because of an error.")
|
|
||||||
else:
|
|
||||||
send_chat(f"Can't redeem {redeem}, you don't have enough points.")
|
|
||||||
else:
|
|
||||||
send_chat("Can't redeem, redeem not found.")
|
send_chat("Can't redeem, redeem not found.")
|
||||||
|
return
|
||||||
|
|
||||||
|
db = get_db()
|
||||||
|
price = current_app.config['REDEEMS'][redeem]["price"]
|
||||||
|
redeem_type = current_app.config['REDEEMS'][redeem]["type"]
|
||||||
|
points = read_users_points(db, user_id)
|
||||||
|
|
||||||
|
if not points or points < price:
|
||||||
|
send_chat(f"Can't redeem {redeem}, you don't have enough points.")
|
||||||
|
return
|
||||||
|
|
||||||
|
if redeem_type == "counter":
|
||||||
|
add_to_counter(db, redeem)
|
||||||
|
use_points(db, user_id, price)
|
||||||
|
send_chat(f"{redeem} redeemed for {price} points.")
|
||||||
|
elif redeem_type == "list":
|
||||||
|
add_to_redeem_queue(db, user_id, redeem)
|
||||||
|
use_points(db, user_id, price)
|
||||||
|
send_chat(f"{redeem} redeemed for {price} points.")
|
||||||
|
elif redeem_type == "note":
|
||||||
|
if not note:
|
||||||
|
send_chat(f"Cannot redeem {redeem}, no note included.")
|
||||||
|
return
|
||||||
|
add_to_redeem_queue(db, user_id, redeem, note)
|
||||||
|
use_points(db, user_id, price)
|
||||||
|
send_chat(f"{redeem} redeemed for {price} points.")
|
||||||
|
else:
|
||||||
|
send_chat(f"{redeem} not redeemed because of an error.")
|
||||||
|
|||||||
Reference in New Issue
Block a user