59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
import requests
|
|
from random import randrange
|
|
|
|
|
|
MAX_CATEGORIES = 28100
|
|
|
|
|
|
class Game:
|
|
def __init__(self, code):
|
|
self.code = code
|
|
self.locked = False
|
|
self.contestants = {}
|
|
self.categories = {}
|
|
self.buzzers_armed = False
|
|
|
|
def add_contestant(self, sid, signature):
|
|
self.contestants[sid] = Contestant(signature)
|
|
|
|
def load_clues(self):
|
|
while len(self.categories) < 6:
|
|
category_id = randrange(MAX_CATEGORIES)
|
|
r = requests.get(
|
|
'https://jservice.io/api/category?id=%d' % category_id)
|
|
j = r.json()
|
|
category = check_and_build_category(j)
|
|
if category:
|
|
name, clues = category
|
|
self.categories[name] = clues
|
|
|
|
|
|
class Contestant:
|
|
def __init__(self, signature):
|
|
self.signature = signature
|
|
self.locked = False
|
|
|
|
|
|
class Category:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.questions = []
|
|
|
|
|
|
def check_and_build_category(j):
|
|
if not j or not j['title'] or not j['clues_count'] or j['clues_count'] < 5:
|
|
return None
|
|
name = j['title']
|
|
all_clues = [{key: c[key] for key in ['value', 'question', 'answer']}
|
|
for c in j['clues']]
|
|
clues = []
|
|
for value in [200, 400, 600, 800, 1000]:
|
|
for clue in all_clues:
|
|
if clue['value'] == value:
|
|
clues.append(clue)
|
|
break
|
|
if len(clues) == 5:
|
|
return name, clues
|
|
else:
|
|
return None
|