Get questions from jservice
This commit is contained in:
		
							parent
							
								
									872cd8bec4
								
							
						
					
					
						commit
						3723cfb595
					
				| @ -1,4 +1,6 @@ | |||||||
| bidict==0.22.1 | bidict==0.22.1 | ||||||
|  | certifi==2022.12.7 | ||||||
|  | charset-normalizer==3.0.1 | ||||||
| click==8.1.3 | click==8.1.3 | ||||||
| colorama==0.4.6 | colorama==0.4.6 | ||||||
| dnspython==2.3.0 | dnspython==2.3.0 | ||||||
| @ -6,10 +8,13 @@ eventlet==0.33.3 | |||||||
| Flask==2.2.2 | Flask==2.2.2 | ||||||
| Flask-SocketIO==5.3.2 | Flask-SocketIO==5.3.2 | ||||||
| greenlet==2.0.2 | greenlet==2.0.2 | ||||||
|  | idna==3.4 | ||||||
| itsdangerous==2.1.2 | itsdangerous==2.1.2 | ||||||
| Jinja2==3.1.2 | Jinja2==3.1.2 | ||||||
| MarkupSafe==2.1.2 | MarkupSafe==2.1.2 | ||||||
| python-engineio==4.3.4 | python-engineio==4.3.4 | ||||||
| python-socketio==5.7.2 | python-socketio==5.7.2 | ||||||
|  | requests==2.28.2 | ||||||
| six==1.16.0 | six==1.16.0 | ||||||
|  | urllib3==1.26.14 | ||||||
| Werkzeug==2.2.2 | Werkzeug==2.2.2 | ||||||
|  | |||||||
| @ -1,22 +1,14 @@ | |||||||
| from flask import Flask, request | from flask import Flask, request | ||||||
| from flask_socketio import SocketIO, emit, join_room, rooms | from flask_socketio import SocketIO, emit, join_room, rooms | ||||||
|  | import requests | ||||||
| 
 | 
 | ||||||
| from gencode import make_code | from gencode import make_code | ||||||
| from game import Game | from game import Game | ||||||
| 
 | 
 | ||||||
| games = {} |  | ||||||
| 
 |  | ||||||
| app = Flask('venture') | app = Flask('venture') | ||||||
| socketio = SocketIO(app, cors_allowed_origins="*") | socketio = SocketIO(app, cors_allowed_origins="*") | ||||||
| 
 | 
 | ||||||
| def with_game(listener): | games = {} | ||||||
|     global games |  | ||||||
|     room = rooms()[1] |  | ||||||
|     game = games[room] |  | ||||||
|     def inner(event, data={}): |  | ||||||
|         data['game'] = game |  | ||||||
|         listener(game, data) |  | ||||||
|     return inner |  | ||||||
| 
 | 
 | ||||||
| @socketio.on('new-game') | @socketio.on('new-game') | ||||||
| def on_newgame(): | def on_newgame(): | ||||||
| @ -26,6 +18,8 @@ def on_newgame(): | |||||||
|     join_room(code) |     join_room(code) | ||||||
|     emit('set-code', {'code': code}) |     emit('set-code', {'code': code}) | ||||||
| 
 | 
 | ||||||
|  | ## Contestant | ||||||
|  | 
 | ||||||
| @socketio.on('contestant-join') | @socketio.on('contestant-join') | ||||||
| def on_join_contestant(data): | def on_join_contestant(data): | ||||||
|     sid = request.sid |     sid = request.sid | ||||||
| @ -35,6 +29,23 @@ def on_join_contestant(data): | |||||||
|     games[room].add_contestant(sid, signature) |     games[room].add_contestant(sid, signature) | ||||||
|     emit('contestant-joined', {'sid': sid, 'signature': signature }, to=room) |     emit('contestant-joined', {'sid': sid, 'signature': signature }, to=room) | ||||||
| 
 | 
 | ||||||
|  | ## Host | ||||||
|  | 
 | ||||||
|  | @socketio.on('host-join') | ||||||
|  | def on_join_host(data): | ||||||
|  |     sid = request.sid | ||||||
|  |     room = data['room'] | ||||||
|  |     join_room(room) | ||||||
|  |     games[room].add_host(sid) | ||||||
|  |     emit('host-joined', {'sid': sid}, to=room) | ||||||
|  | 
 | ||||||
|  | @socketio.on('host-start') | ||||||
|  | def on_host_start(): | ||||||
|  |     room = rooms()[0] | ||||||
|  |     game = games[room] | ||||||
|  |     game.get_questions() | ||||||
|  |     emit('categories', [c.name for c in game.categories[:6]], to=room) | ||||||
|  | 
 | ||||||
| def main(): | def main(): | ||||||
|     socketio.run(app, host='0.0.0.0', debug=True) |     socketio.run(app, host='0.0.0.0', debug=True) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,13 +1,54 @@ | |||||||
| class Game: | import requests | ||||||
|     def __init__(self, code): | from random import randrange | ||||||
|         self.code = code | MAX_CATEGORIES = 28100 | ||||||
|         self.locked = True | 
 | ||||||
|         self.players = {} | class Game: | ||||||
|     def add_contestant(self, sid, signature): |     def __init__(self, code): | ||||||
|         self.players[sid] = Contestant(signature) |         self.code = code | ||||||
| 
 |         self.locked = True | ||||||
| class Contestant: |         self.players = {} | ||||||
|     def __init__(self, signature): |         self.categories = [] | ||||||
|         self.signature = signature |     def add_contestant(self, sid, signature): | ||||||
|         self.points = 0 |         self.players[sid] = Contestant(signature) | ||||||
|          |     def add_host(self, sid): | ||||||
|  |         self.host = sid | ||||||
|  |     def get_questions(self): | ||||||
|  |         while len(self.categories) < 12: | ||||||
|  |             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: | ||||||
|  |                 self.categories.append(category) | ||||||
|  |          | ||||||
|  | class Contestant: | ||||||
|  |     def __init__(self, signature): | ||||||
|  |         self.signature = signature | ||||||
|  |         self.points = 0 | ||||||
|  | 
 | ||||||
|  | class Category: | ||||||
|  |     def __init__(self, name): | ||||||
|  |         self.name = name | ||||||
|  |         self.questions = [] | ||||||
|  | 
 | ||||||
|  | class Question: | ||||||
|  |     def __init__(self, value, question, answer): | ||||||
|  |         self.value = value | ||||||
|  |         self.question = question | ||||||
|  |         self.answer = answer | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  |     category = Category(j['title']) | ||||||
|  |     questions = [Question(c['value'], c['question'], c['answer']) for c in j['clues']] | ||||||
|  |     for value in [200, 400, 600, 800, 1000]: | ||||||
|  |         for question in questions: | ||||||
|  |             if question.value == value: | ||||||
|  |                 category.questions.append(question) | ||||||
|  |                 break | ||||||
|  |     if len(category.questions) == 5: | ||||||
|  |         return category | ||||||
|  |     else: | ||||||
|  |         return None | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user