aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/exts/events/trivianight/questions.py56
-rw-r--r--bot/exts/events/trivianight/scoreboard.py2
2 files changed, 51 insertions, 7 deletions
diff --git a/bot/exts/events/trivianight/questions.py b/bot/exts/events/trivianight/questions.py
index 21277ce9..2c1dbc81 100644
--- a/bot/exts/events/trivianight/questions.py
+++ b/bot/exts/events/trivianight/questions.py
@@ -42,12 +42,10 @@ class QuestionButton(Button):
class QuestionView(View):
"""View for the questions."""
- def __init__(self, scoreboard: Scoreboard):
- self.scoreboard = scoreboard
+ def __init__(self):
self.current_question = {}
- self._users_picked = {}
- def _create_current_question(self) -> Embed:
+ def create_current_question(self) -> Embed:
"""Helper function to create the embed for the current question."""
question_embed = Embed(
title=f"Question {self.current_question['number']}",
@@ -58,14 +56,60 @@ class QuestionView(View):
question_embed.add_field(name=label, value=answer, inline=False)
self.buttons = [QuestionButton(label) for label in ("A", "B", "C", "D")]
+ for button in self.buttons:
+ self.add_item(button)
return question_embed
- def end_question(self) -> dict:
+ def end_question(self) -> tuple[dict, Embed]:
"""Returns the dictionaries from the corresponding buttons for those who got it correct."""
labels = ("A", "B", "C", "D")
label = labels[self.current_question["correct"].index(self.current_question["answers"])]
return_dict = {}
for button in self.buttons:
return_dict.update(button.answer(label))
+ self.remove_item(button)
+
+ answer_embed = Embed(
+ title=f"The correct answer for Question {self.current_question['number']} was",
+ color=Colours.grass_green
+ )
+ answer_embed.add_field(
+ name=label,
+ value=self.current_question["correct"].index(self.current_question["answers"]),
+ inline=False
+ )
+
+ return return_dict, answer_embed
+
+
+class Questions:
+ """An interface to use from the TriviaNight cog for questions."""
+
+ def __init__(self, scoreboard: Scoreboard):
+ self.scoreboard = scoreboard
+ self.questions = []
+ self._ptr = -1
+
+ def set_questions(self, questions: list) -> None:
+ """Setting `self.questions` dynamically via a function to set it."""
+ self.questions = questions
+
+ def next_question(self) -> None:
+ """Advances to the next question."""
+ self._ptr += 1
+ if self._ptr < len(self.questions):
+ self.questions[self._ptr]["visited"] = True
+ self.view.current_question = self.questions[self._ptr]
+
+ def current_question(self) -> tuple[Embed, QuestionView]:
+ """Returns an embed entailing the current question as an embed with a view."""
+ return self.view.create_current_question(), self.view
+
+ def end_question(self) -> None:
+ """Terminates answering of the question and displays the correct answer."""
+ scores, answer_embed = self.view.end_question()
+ for user, score in scores.items():
+ self.scoreboard[f"points: {user}"] = score[1]
+ self.scoreboard[f"speed: {user}"] = score[2]
- return return_dict
+ return answer_embed
diff --git a/bot/exts/events/trivianight/scoreboard.py b/bot/exts/events/trivianight/scoreboard.py
index 34535690..27a45e30 100644
--- a/bot/exts/events/trivianight/scoreboard.py
+++ b/bot/exts/events/trivianight/scoreboard.py
@@ -74,7 +74,7 @@ class Scoreboard:
if item.startswith("points: "):
return self.view.points[item.removeprefix("points: ")]
elif item.startswith("speed: "):
- return self.view.speed[item.removepreix("speed: ")]
+ return self.view.speed[item.removeprefix("speed: ")]
def display(self) -> Union[Embed, View]:
"""Returns the embed of the main leaderboard along with the ScoreboardView."""