def on_message(self, web_socket, message): """ Message handler """ data_start = message.find('{') if data_start >= 0: try: data = loads(message[data_start:]) if data.get('type') == 'self.broadcast_ended' and not data.get('reason'): self.broadcast_ended = True print('BROADCAST ENDED.') web_socket.close() elif data.get('type') == 'gameStatus': self.game_status(data) elif data.get('type') == 'question' and data.get('answers'): if isinstance(data.get('answers'), list): data['answers'] = { 'A': data.get('answers')[0]['text'], 'B': data.get('answers')[1]['text'], 'C': data.get('answers')[2]['text'] } question = Question(**data) self.prediction_time(question) # Check for question summary elif data.get('type') == 'questionSummary': correct_index = next((n for (n, val) in enumerate(data.get('answerCounts')) if val["correct"])) correct_choice = chr(65 + correct_index) # A, B or C question = Question(load_id=data.get('questionId')) question.add_correct(correct_choice) question.display_summary() # Check for question summary elif data.get('type') == 'gameSummary': self.game_summary(data) # Print messages to log file hidden_messages = ['interaction', 'broadcastStats', 'kicked'] if data.get('type') not in hidden_messages: with open('./games/messages.log', 'a') as file: if data.get('type') == 'gameStatus': file.write('\nNEW GAME: %s\n' % self.current_game) file.write('MESSAGE: %s\n' % message) except JSONDecodeError: print('ERROR - bad json: %s' % message)