Files
hq_bot/hq_main.py
2020-06-23 23:17:05 -05:00

111 lines
3.9 KiB
Python

import asyncio
import logging
import requests
import sys
import time
import csv
from ast import literal_eval
from datetime import datetime
from question import QuestionHandler
import networking
from PyQt5.QtWidgets import QApplication
from hq_gui import HQApp
from quamash import QEventLoop, QThreadExecutor
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
# Set up logging
logging.basicConfig(filename="data.log", level=logging.INFO, filemode="w")
# Read in bearer token and user ID
with open("conn_settings.txt", "r") as conn_settings:
BEARER_TOKEN = conn_settings.readline().strip().split("=")[1]
USER_ID = conn_settings.readline().strip().split("=")[1]
print("getting")
main_url = f"https://api-quiz.hype.space/shows/now?type=hq&userId={USER_ID}"
headers = {"Authorization": f"Bearer {BEARER_TOKEN}",
"x-hq-client": "Android/1.6.1"}
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate"}
# "x-hq-stk": "MQ==",
# "Connection": "Keep-Alive",
# "User-Agent": "okhttp/3.8.0"}
q = QuestionHandler()
hqApp = HQApp(q)
import re
import random
trivia = []
with open('trivia2.csv', 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row[1] == 'options': continue
question = re.sub(r'^\d+\. ?', '', row[0].strip())
if 'which' not in question.lower(): continue
answers = literal_eval(row[1])
if len(answers) != 3:
continue
correct = int(row[2])
trivia.append({'q': question, 'a': answers, 'c': correct})
i = 0
def getTrivia():
global i
i += 1
result = requests.get('https://opentdb.com/api.php?amount=1&type=multiple').json()['results'][0]
question = result['question'].replace('"', '').replace(''', "'")
answers = [result['correct_answer']] + result['incorrect_answers'][:2]
loop.create_task(q.answer_question(str(i), question, answers))
hqApp.button.clicked.connect(getTrivia)
#hqApp.streamLive.emit('rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov')
#hqApp.videoFrame.raise_()
#hqApp.button.hide()
while True:
print()
try:
app.processEvents()
response_data = loop.run_until_complete(
networking.get_json_response(main_url, timeout=1.5, headers=headers))
except Exception as e:
import traceback
print(traceback.format_exc())
print("Server response not JSON, retrying...")
loop.run_until_complete(asyncio.sleep(1))
continue
logging.info(response_data)
if "broadcast" not in response_data or response_data["broadcast"] is None:
if "error" in response_data and response_data["error"] == "Auth not valid":
raise RuntimeError("Connection settings invalid")
else:
print("Show not on.")
next_time = datetime.strptime(response_data["nextShowTime"], "%Y-%m-%dT%H:%M:%S.000Z")
now = time.time()
offset = datetime.fromtimestamp(now) - datetime.utcfromtimestamp(now)
print(f"Next show time: {(next_time + offset).strftime('%Y-%m-%d %I:%M %p')}")
print("Prize: " + response_data["nextShowPrize"])
hqApp.nextGameInfo.emit((next_time + offset).strftime('%Y-%m-%d %I:%M %p'), response_data['nextShowPrize'])
if hqApp.streaming:
hqApp.streamStop.emit()
loop.run_until_complete(asyncio.sleep(5))
else:
socket = response_data["broadcast"]["socketUrl"]
stream = response_data["broadcast"]["streamUrl"]
print(stream)
print(f"Show active, connecting to socket at {socket}")
if not hqApp.streaming:
hqApp.streamLive.emit(stream)
hqApp.videoFrame.raise_()
loop.run_until_complete(networking.websocket_handler(q, socket, headers))