Implement a geography theme

This commit is contained in:
TropiiDev 2025-01-29 21:31:20 -05:00
parent d8f90517ea
commit 533cae0b79
6 changed files with 139 additions and 72 deletions

View File

@ -5,6 +5,7 @@ from lib.quiz_helper import *
class Select(discord.ui.Select):
def __init__(self):
self.theme = None
options = [
discord.SelectOption(label="History", emoji="1", description="Do you know your past?"),
discord.SelectOption(label="Geography", emoji="2", description="Do you know your geography?"),
@ -16,10 +17,14 @@ class Select(discord.ui.Select):
async def callback(self, interaction: discord.Interaction):
if self.values[0] == "History":
questions = load_history_questions()
self.theme = "History"
elif self.values[0] == "Geography":
self.theme = "Geography"
questions = load_questions(self.theme)
for i in range(len(questions)):
em = discord.Embed(title=f"Question {i + 1}", description=questions[i])
await interaction.response.send_message(embed=em, view=load_history_view(i, questions))
await interaction.response.send_message(embed=em, view=load_view(i, questions, self.theme))
class SelectView(discord.ui.View):
def __init__(self):

View File

@ -5,14 +5,14 @@ client = pymongo.MongoClient(os.getenv('mongo_url'))
db = client.quiz
coll = db.leaderboard
def increment_history_correct(user_id):
def increment_correct(user_id, theme):
user = coll.find_one({"_id": user_id})
if user is None:
coll.insert_one({"_id": user_id, "amount_correct": 1})
coll.insert_one({"_id": user_id, f"{theme}": { "amount_correct": 1}})
return True
coll.update_one({"_id": user_id}, {"$inc": {"amount_correct": 1}})
coll.update_one({"_id": user_id}, {"$inc": {f"{theme}.amount_correct": 1}})
return True
def get_correct_answers(user_id):

View File

@ -2,7 +2,9 @@ import discord
import random
from lib.leaderboard_helper import *
def load_history_questions():
def load_questions(theme):
questions = []
if theme == "History":
questions = [
"When did the second world war start (based on allied views)?",
"When did the second world war end?",
@ -20,10 +22,30 @@ def load_history_questions():
"Who developed the ideology of Communism?",
"What happened in Tiananmen Square?"
]
elif theme == "Geography":
questions = [
"Name which continent Kenya is on.",
"What is an Oxbow lake?",
"What happens to the coast when water interacts with it?",
"What is the capital of El Salvador?",
"What is the longest river in the world?",
'What country is known as "Land of a Thousand Lakes"?',
"What is the tallest mountain in the world?",
"What is the most isolated place on the world called?",
"How many bodies of water is the Great Lakes made of?",
"What is the 6th most populated country in the world?",
"What is the capital city of Malta?",
'Which of the following is a "wonder of the world"?',
"What is the smallest Country in the world?",
"What is the smallest US state?",
"What is the most populated city in the world?"
]
return questions
def load_history_answers(question):
def load_answers(question, theme):
answers = []
if theme == "History":
answers = [
'0 1939',
'1 1945',
@ -41,6 +63,24 @@ def load_history_answers(question):
'13 Karl Marx',
'14 Nothing,Massacre'
]
elif theme == "Geography":
answers = [
"0 Africa",
"1 A curved lake formed from a horseshoe",
"2 Erosion",
"3 San Salvador",
"4 Nile",
"5 Finland",
"6 Mount Everest",
"7 Point Nemo",
"8 5",
"9 Nigeria",
"10 Valletta",
"11 The Great Wall of China,Petra,Christ the Redeemer,Machu Picchu,Chichen Itza,The Colosseum and The Taj Mahal",
"12 Vatican City",
"13 Rhode Island",
"14 Tokyo"
]
answer = answers[question]
if ',' in answer:
@ -50,7 +90,9 @@ def load_history_answers(question):
else:
return answer.split(f"{str(question)} ")[1]
def load_history_choices(question):
def load_choices(question, theme):
choices = []
if theme == "History":
choices = [
'0 1940,1938,1914',
'1 1946,1944,1918,1920',
@ -68,20 +110,39 @@ def load_history_choices(question):
'13 Vladimir Lenin,Joseph Stalin,Friedrich Engels',
'14 The Fall of the Great Wall of China,A Soccer/Football Match,The signing of the Magna Carta'
]
elif theme == "Geography":
choices = [
"0 South America,Europe,Asia",
"1 A circular river,A triangle-shaped lake,A square-shaped lake",
"2 Freezing,Glaciation,Transpiration",
"3 Lima,Caracas,Bogota",
"4 Amazon River,Yangtze River,Mississippi River",
"5 Norway,Switzerland,Sweden",
"6 Mount Fuji,Mount Kilimanjaro,Mount Vesuvius",
"7 Bermuda Triangle,South Pole,Loch Ness",
"8 7,3,8",
"9 South Korea,Russia,Germany",
"10 London,Athens,Paris",
"11 Eiffel Tower,Statue of Liberty,Big Ben,Sphinx,Red Square",
"12 Monaco,Liechtenstein,San Marino,Andorra",
"13 Texas,Connecticut,New Jersey",
"14 Mexico City,New York,Beijing"
]
choice = choices[question]
only_choice = choice.split(f"{str(question)} ")[1]
question_choices = only_choice.split(',')
return question_choices
class load_history_select(discord.ui.Select):
def __init__(self, question, questions):
class load_select(discord.ui.Select):
def __init__(self, question, questions, theme, correct):
super().__init__()
self.correct = correct
self.question = question
self.questions = questions
self.answer = load_history_answers(question)
self.correct = 0
choices = load_history_choices(question)
self.theme = theme
self.answer = load_answers(question, self.theme)
choices = load_choices(question, self.theme)
options = []
responses = []
@ -106,10 +167,11 @@ class load_history_select(discord.ui.Select):
if isinstance(self.answer, list):
if any(value in self.answer for value in self.values):
self.correct += 1
increment_history_correct(interaction.user.id)
increment_correct(interaction.user.id, self.theme)
else:
if self.values[0] == self.answer:
increment_history_correct(interaction.user.id)
self.correct += 1
increment_correct(interaction.user.id, self.theme)
await interaction.response.send_message("Answer recorded..")
@ -118,11 +180,11 @@ class load_history_select(discord.ui.Select):
if next_question_index < len(self.questions):
next_question = self.questions[next_question_index]
em = discord.Embed(title=f"Question {next_question_index + 1}", description=next_question)
await interaction.followup.send(embed=em, view=load_history_view(next_question_index, self.questions))
await interaction.followup.send(embed=em, view=load_view(next_question_index, self.questions, self.theme, self.correct))
else:
await interaction.followup.send(f"You finished the quiz. You got {self.correct} answers correct!")
class load_history_view(discord.ui.View):
def __init__(self, question_index, questions):
class load_view(discord.ui.View):
def __init__(self, question_index, questions, theme, correct = 0):
super().__init__(timeout=None)
self.add_item(load_history_select(question_index, questions))
self.add_item(load_select(question_index, questions, theme, correct))