From 5f3e7361b4111f182e433cbb36e304dedd258eb8 Mon Sep 17 00:00:00 2001 From: alwayscompiling Date: Sat, 6 Aug 2022 16:30:31 -0400 Subject: [PATCH] Convert old submission_objects to new class. --- cogs/message_listener/__init__.py | 30 ++++---- cogs/submission/submission_views.py | 115 ++++++++++------------------ highscores.py | 3 +- 3 files changed, 57 insertions(+), 91 deletions(-) diff --git a/cogs/message_listener/__init__.py b/cogs/message_listener/__init__.py index 2f180e0..04f568b 100644 --- a/cogs/message_listener/__init__.py +++ b/cogs/message_listener/__init__.py @@ -9,10 +9,7 @@ import re from nextcord.ext import commands import nextcord -from cogs.submission.submission_views import ( # pylint: disable=import-error - SubmissionState, - get_submission_embed, -) +from classes.submission import SubmissionState # pylint: disable=import-error from highscores import highscores_data, submission_objects # pylint: disable=import-error @@ -38,8 +35,8 @@ class SubmissionListener(commands.Cog, name="Message Listener"): if chance == 1: await message.channel.send("Happy Birthday Chris <@642330132958281750>") - if message.author.id in submission_objects: - message_id = submission_objects[message.author.id]["message_id"] + if submission_objects.has_user(message.author.id): + message_id = submission_objects.get_user_submission(message.author.id).message_id submission_channel_id = highscores_data.get_guild(guild_id).submission_channel submission_message: nextcord.Message = ( await self.bot.get_guild(guild_id) @@ -49,14 +46,16 @@ class SubmissionListener(commands.Cog, name="Message Listener"): # need check if correct user and correct channel if message.channel.id == submission_channel_id: - state = submission_objects[message.author.id]["submission_state"] + state = submission_objects.get_user_submission(message.author.id).submisson_state if state == SubmissionState.SCORE and message.content: # check with regex if score matches correctly is_time_record = ( highscores_data.get_guild(guild_id) - .get_table(submission_objects[message.author.id]["boss_name"]) - .get_category(submission_objects[message.author.id]["category"]) + .get_table(submission_objects.get_user_submission(message.author.id).table) + .get_category( + submission_objects.get_user_submission(message.author.id).category + ) .time_record ) @@ -89,9 +88,10 @@ class SubmissionListener(commands.Cog, name="Message Listener"): elif re.search("^[0]?[0-9]:[0-9]{2}(\\.[0-9])?$", score): # if there is a minute 10ths place 0, remove score = score.lstrip("0") - submission_objects[message.author.id]["score"] = score - embed = get_submission_embed(message.author.id) - + submission_objects.get_user_submission(message.author.id).score = score + embed = submission_objects.get_user_submission( + message.author.id + ).get_embed() await submission_message.edit( embed=embed, ) @@ -100,10 +100,12 @@ class SubmissionListener(commands.Cog, name="Message Listener"): files=[await attch.to_file() for attch in message.attachments], ) elif state == SubmissionState.NAME and message.content: - submission_objects[message.author.id]["username"] = message.content[ + submission_objects.get_user_submission( + message.author.id + ).username = message.content[ : highscores_data.get_guild(guild_id).username_length ] - embed = get_submission_embed(message.author.id) + embed = submission_objects.get_user_submission(message.author.id).get_embed() await submission_message.edit( embed=embed, ) diff --git a/cogs/submission/submission_views.py b/cogs/submission/submission_views.py index 83da25d..a800f57 100644 --- a/cogs/submission/submission_views.py +++ b/cogs/submission/submission_views.py @@ -1,12 +1,11 @@ """Views used for submission process.""" from typing import Optional -from enum import Enum import nextcord -from nextcord import Embed from nextcord.ext import commands +from classes.submission import Submission, SubmissionState # pylint: disable=import-error from highscores import ( # pylint: disable=import-error highscores_data, highscores_message_map, @@ -15,45 +14,6 @@ from highscores import ( # pylint: disable=import-error from .verification_view import VerificationView -class SubmissionState(Enum): - """Enum for which state a submission is in""" - - CATEGORY = 1 - SCORE = 2 - PROOF = 3 - NAME = 4 - SUBMIT = 5 - VERIFY = 6 - - -def get_submission_embed(userid: int) -> nextcord.Embed: - """Creates an embed based off of the submission state and fields filled out.""" - usersubmission: dict = submission_objects[userid] - state: SubmissionState = usersubmission["submission_state"] - - if state is SubmissionState.CATEGORY: - description = "Step 1: Choose your category!" - elif state is SubmissionState.SCORE: - description = "Step 2: Input your score!" - elif state is SubmissionState.PROOF: - description = "Step 3: Submit your proof!" - elif state is SubmissionState.NAME: - description = "Step 4 (Optional): Change name on submission! (proceed to next if skipping)" - elif state is SubmissionState.SUBMIT: - description = "Step 5: Submit if everything looks correct!" - elif state is SubmissionState.VERIFY: - description = "Review fields and accept." - - embed = Embed(title="Highscores Submission", description=description) - embed.add_field(name="User Name", value=usersubmission["username"], inline=False) - embed.add_field(name="Boss", value=usersubmission["boss_name"], inline=False) - if usersubmission["category"]: - embed.add_field(name="Category", value=usersubmission["category"], inline=False) - if usersubmission["score"]: - embed.add_field(name="Score", value=usersubmission["score"], inline=False) - return embed - - def category_select_options(guild_id: int, boss_name: str) -> "list[nextcord.SelectOption]": """Returns list of categories for a given boss.""" options: "list[nextcord.SelectOption]" = [] @@ -81,8 +41,8 @@ class SubmissionDropdown(nextcord.ui.Select): self._bot = bot async def callback(self, interaction: nextcord.Interaction): - submission_objects[interaction.user.id]["category"] = self.values[0] - embed = get_submission_embed(interaction.user.id) + submission_objects.get_user_submission(interaction.user.id).category = self.values[0] + embed = submission_objects.get_user_submission(interaction.user.id).get_embed() await interaction.message.edit( embed=embed, ) @@ -96,10 +56,12 @@ class BackButton(nextcord.ui.Button): self._bot = bot async def callback(self, interaction: nextcord.Interaction): - state: SubmissionState = submission_objects[interaction.user.id]["submission_state"] + state: SubmissionState = submission_objects.get_user_submission( + interaction.user.id + ).submisson_state state = SubmissionState(state.value - 1) - submission_objects[interaction.user.id]["submission_state"] = state - embed = get_submission_embed(interaction.user.id) + submission_objects.get_user_submission(interaction.user.id).submisson_state = state + embed = submission_objects.get_user_submission(interaction.user.id).get_embed() await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) @@ -110,7 +72,7 @@ class CancelButton(nextcord.ui.Button): super().__init__(label="Cancel", style=nextcord.ButtonStyle.red, custom_id="cancel") async def callback(self, interaction: nextcord.Interaction): - submission_objects.pop(interaction.user.id) + submission_objects.remove_user_submission(interaction.user.id) await interaction.message.delete() @@ -123,22 +85,25 @@ class NextButton(nextcord.ui.Button): async def callback(self, interaction: nextcord.Interaction): # check if fields have been filled out for each state - state: SubmissionState = submission_objects[interaction.user.id]["submission_state"] + state: SubmissionState = submission_objects.get_user_submission( + interaction.user.id + ).submission_state if ( state == SubmissionState.CATEGORY - and not submission_objects[interaction.user.id]["category"] + and not submission_objects.get_user_submission(interaction.user.id).category ): await interaction.send("Please choose a category.", ephemeral=True) elif ( - state == SubmissionState.SCORE and not submission_objects[interaction.user.id]["score"] + state == SubmissionState.SCORE + and not submission_objects.get_user_submission(interaction.user.id).score ): await interaction.send("Please send a score.", ephemeral=True) elif state == SubmissionState.PROOF and not len(interaction.message.attachments) > 0: await interaction.send("Please attach picture for proof.", ephemeral=True) else: state = SubmissionState(state.value + 1) - submission_objects[interaction.user.id]["submission_state"] = state - embed = get_submission_embed(interaction.user.id) + submission_objects.get_user_submission(interaction.user.id).submission_state = state + embed = submission_objects.get_user_submission(interaction.user.id).get_embed() await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) @@ -159,9 +124,11 @@ class SubmitButton(nextcord.ui.Button): Contact server admins." assert channel is not None, await channel.send(error_response) - submission_objects[interaction.user.id]["submission_state"] = SubmissionState.VERIFY + submission_objects.get_user_submission( + interaction.user.id + ).submisson_state = SubmissionState.VERIFY - embed = get_submission_embed(interaction.user.id) + embed = submission_objects.get_user_submission(interaction.user.id).get_embed() await channel.send( files=[await attch.to_file() for attch in interaction.message.attachments], @@ -170,7 +137,7 @@ class SubmitButton(nextcord.ui.Button): content=f"Submission from {interaction.user.display_name}", ) await interaction.message.edit(content=f"<@{interaction.user.id}> Submitted!", view=None) - submission_objects.pop(interaction.user.id) + submission_objects.remove_user_submission(interaction.user.id) ############ Submission Views ############ @@ -191,31 +158,25 @@ class SubmissionCreateButton(nextcord.ui.View): ): # pylint: disable=unused-argument """Button for score submission.""" # Don't allow a user to start a new submission if one already exists - if interaction.user.id in submission_objects: + if submission_objects.has_user(interaction.user.id): await interaction.send("Please finish in progress submission first.", ephemeral=True) return - boss_name = highscores_message_map[interaction.guild.id][interaction.message.id] + table = highscores_message_map[interaction.guild.id][interaction.message.id] channel = interaction.guild.get_channel( highscores_data.get_guild(interaction.guild_id).submission_channel ) # a user should only have 1 submission active at once. - # submitting with dummy message_id until message created - # split username on pipe. - submission_objects[interaction.user.id] = { - "message_id": 0, - "guild_id": interaction.guild_id, - "submission_state": SubmissionState.CATEGORY, - "boss_name": boss_name, - "score": "", - "category": "", - "username": interaction.user.display_name.split("|")[0][ - : highscores_data.get_guild(interaction.guild_id).username_length - ], - } + # split username on pipe then limit length. + username: str = interaction.user.display_name.split("|")[0][ + : highscores_data.get_guild(interaction.guild_id).username_length + ] + submission: Submission = Submission(interaction.guild_id, table, username) - embed = get_submission_embed(interaction.user.id) + submission_objects.add_submission(interaction.user.id, submission) + + embed = submission_objects.get_user_submission(interaction.user.id).get_embed() submission_message = await channel.send( f"<@{interaction.user.id}>", @@ -227,7 +188,9 @@ class SubmissionCreateButton(nextcord.ui.View): ) # update the message_id once its created - submission_objects[interaction.user.id]["message_id"] = submission_message.id + submission_objects.get_user_submission( + interaction.user.id + ).message_id = submission_message.id class SubmissionView(nextcord.ui.View): @@ -243,9 +206,9 @@ class SubmissionView(nextcord.ui.View): super().__init__(timeout=timeout) self._submission_user = submission_user self._bot = bot - self._state = submission_objects[self._submission_user]["submission_state"] - self._boss_name = submission_objects[self._submission_user]["boss_name"] - self._guild_id = submission_objects[self._submission_user]["guild_id"] + self._state = submission_objects.get_user_submission(self._submission_user).submisson_state + self._boss_name = submission_objects.get_user_submission(self._submission_user).table + self._guild_id = submission_objects.get_user_submission(self._submission_user).guild_id # add items depending on given state if self._state is SubmissionState.CATEGORY: @@ -275,4 +238,4 @@ class SubmissionView(nextcord.ui.View): async def on_timeout(self) -> None: # remove user from submission objects after time out. Allows user to start new submission. - submission_objects.pop(self._submission_user) + submission_objects.remove_user_submission(self._submission_user) diff --git a/highscores.py b/highscores.py index 591eb8b..9de7dfe 100644 --- a/highscores.py +++ b/highscores.py @@ -11,6 +11,7 @@ from nextcord.ext import commands import config from classes.highscores_data import HighscoresData +from classes.submission import SubmissionMap logger = logging.getLogger("nextcord") logger.setLevel(logging.DEBUG) @@ -27,7 +28,7 @@ for guild in highscores_data.guilds: for table in guild.tables: highscores_message_map[guild.guild_id][table.message_id] = table.name -submission_objects: dict = {} +submission_objects: SubmissionMap = SubmissionMap() def main():