From 8f2c832f9b7e7f4ea29880fc91455ff9d15572fd Mon Sep 17 00:00:00 2001 From: Mawoka Date: Sat, 25 Oct 2025 16:17:32 +0200 Subject: [PATCH] Bug fixes (double submission, escaping of > 1000: score = 1000 diff --git a/classquiz/socket_server/helpers.py b/classquiz/socket_server/helpers.py index e79fbdf..4f19985 100644 --- a/classquiz/socket_server/helpers.py +++ b/classquiz/socket_server/helpers.py @@ -10,6 +10,7 @@ from classquiz.db.models import ( ABCDQuizAnswer, VotingQuizAnswer, RangeQuizAnswer, + AnswerDataList, ) from classquiz.socket_server.models import SubmitAnswerData from .models import SubmitAnswerDataOrderType @@ -131,3 +132,12 @@ def check_check_question(answer: str, answers: list[ABCDQuizAnswer]) -> bool: if a.right: correct_string += str(i) return bool(correct_string == answer) + + +async def has_already_answered(game_pin: str, q_index: int, username: str) -> bool: + answers = await AnswerDataList.get_redis_or_empty(game_pin, q_index) + if answers is None: + return False + else: + answers = list(filter(lambda a: a.username == username, answers.root)) + return len(answers) > 0 diff --git a/frontend/src/lib/play/question.svelte b/frontend/src/lib/play/question.svelte index 768e232..17a8568 100644 --- a/frontend/src/lib/play/question.svelte +++ b/frontend/src/lib/play/question.svelte @@ -82,6 +82,9 @@ SPDX-License-Identifier: MPL-2.0 }); const selectAnswer = (answer: string) => { + if (selected_answer !== undefined) { + return; + } selected_answer = answer; //timer_res = '0'; socket.emit('submit_answer', { @@ -262,7 +265,7 @@ SPDX-License-Identifier: MPL-2.0 @@ -271,7 +274,7 @@ SPDX-License-Identifier: MPL-2.0
{ selectAnswer(text_input); }} @@ -367,7 +370,7 @@ SPDX-License-Identifier: MPL-2.0
{ select_complex_answer(question.answers); }}>{$t('words.submit')}
selectAnswer(selected_answer)} >{$t('words.submit')} diff --git a/live_redis_data.md b/live_redis_data.md index 41e02ce..26dda16 100644 --- a/live_redis_data.md +++ b/live_redis_data.md @@ -134,3 +134,17 @@ data: `{PLAYER_NAME} = {CUSTOM_FIELD_VALUE}` {cqc_code} is the code used to join with a **C**lass**Q**uiz**C**ontroller Only holds the game-pin + +## game_in_lobby:{admin_user_id} [string] +Set if game is waiting for players to join for the admin to enable remote control + +model: GameInLobby + +example: +```json +{ + "game_pin": "1234543", + "quiz_title": "Some random title", + "game_id": "uuid of game" +} +```