diff --git a/cogs/message_listener/__init__.py b/cogs/message_listener/__init__.py index 93a1792..39dc551 100644 --- a/cogs/message_listener/__init__.py +++ b/cogs/message_listener/__init__.py @@ -5,8 +5,10 @@ Defines cog for on message listener. from nextcord.ext import commands import nextcord -from highscores import submission_messages # pylint: disable=import-error +from cogs.submission.submission_views import SubmissionState # pylint: disable=import-error +from cogs.submission.submission_views import get_submission_embed # pylint: disable=import-error from highscores import highscores_data # pylint: disable=import-error +from highscores import submission_objects # pylint: disable=import-error class SubmissionListener(commands.Cog, name="Message Listener"): @@ -16,10 +18,10 @@ class SubmissionListener(commands.Cog, name="Message Listener"): self.bot = bot @commands.Cog.listener() - async def on_message(self, proof_message: nextcord.Message): + async def on_message(self, message: nextcord.Message): """Listener for message creation. Adds score and attachments to submission.""" - if proof_message.author.id in submission_messages: - message_id = submission_messages[proof_message.author.id]["message_id"] + if message.author.id in submission_objects: + message_id = submission_objects[message.author.id]["message_id"] submission_message: nextcord.Message = await self.bot.get_channel( highscores_data["submission_channel_id"] ).fetch_message(message_id) @@ -28,20 +30,39 @@ class SubmissionListener(commands.Cog, name="Message Listener"): # want to regex score to ensure it is correct. here is also where score can be standardized in look # need check if correct user and correct channel - if proof_message.channel.id == highscores_data["submission_channel_id"]: + if message.channel.id == highscores_data["submission_channel_id"]: - embed = submission_message.embeds[0] - if proof_message.content: - embed.add_field(name="Score", value=proof_message.content, inline=False) + if ( + submission_objects[message.author.id]["submission_state"] + == SubmissionState.SCORE + and message.content + ): + # TODO add score format verification + submission_objects[message.author.id]["score"] = message.content + embed = get_submission_embed(message.author.id) await submission_message.edit( embed=embed, ) - if len(proof_message.attachments) > 0: + elif ( + submission_objects[message.author.id]["submission_state"] + == SubmissionState.PROOF + and len(message.attachments) > 0 + ): await submission_message.edit( - files=[await attch.to_file() for attch in proof_message.attachments], + files=[await attch.to_file() for attch in message.attachments], + ) + elif ( + submission_objects[message.author.id]["submission_state"] + == SubmissionState.NAME + and message.content + ): + submission_objects[message.author.id]["username"] = message.content[:12] + embed = get_submission_embed(message.author.id) + await submission_message.edit( + embed=embed, ) - await proof_message.delete() + await message.delete() # This function will be called when this extension is loaded. diff --git a/cogs/submission/submission_views.py b/cogs/submission/submission_views.py index 149ddb4..241fd0d 100644 --- a/cogs/submission/submission_views.py +++ b/cogs/submission/submission_views.py @@ -9,7 +9,7 @@ from nextcord.ext import commands from utilities.data_storage import open_message_map # pylint: disable=import-error from highscores import highscores_data # pylint: disable=import-error -from highscores import submission_messages # pylint: disable=import-error +from highscores import submission_objects # pylint: disable=import-error from .verification_view import VerificationView @@ -21,11 +21,12 @@ class SubmissionState(Enum): 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_messages[userid] + usersubmission: dict = submission_objects[userid] state: SubmissionState = usersubmission["submission_state"] if state is SubmissionState.CATEGORY: @@ -38,6 +39,8 @@ def get_submission_embed(userid: int) -> nextcord.Embed: 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) @@ -76,7 +79,7 @@ class SubmissionDropdown(nextcord.ui.Select): self._bot = bot async def callback(self, interaction: nextcord.Interaction): - submission_messages[interaction.user.id]["category"] = self.values[0] + submission_objects[interaction.user.id]["category"] = self.values[0] embed = get_submission_embed(interaction.user.id) await interaction.message.edit( embed=embed, @@ -91,9 +94,9 @@ class BackButton(nextcord.ui.Button): self._bot = bot async def callback(self, interaction: nextcord.Interaction): - state: SubmissionState = submission_messages[interaction.user.id]["submission_state"] + state: SubmissionState = submission_objects[interaction.user.id]["submission_state"] state = SubmissionState(state.value - 1) - submission_messages[interaction.user.id]["submission_state"] = state + submission_objects[interaction.user.id]["submission_state"] = state embed = get_submission_embed(interaction.user.id) await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) @@ -105,7 +108,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_messages.pop(interaction.user.id) + submission_objects.pop(interaction.user.id) await interaction.message.delete() @@ -118,9 +121,9 @@ class NextButton(nextcord.ui.Button): # TODO verify proper information has been gathered async def callback(self, interaction: nextcord.Interaction): - state: SubmissionState = submission_messages[interaction.user.id]["submission_state"] + state: SubmissionState = submission_objects[interaction.user.id]["submission_state"] state = SubmissionState(state.value + 1) - submission_messages[interaction.user.id]["submission_state"] = state + submission_objects[interaction.user.id]["submission_state"] = state embed = get_submission_embed(interaction.user.id) await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) @@ -140,14 +143,18 @@ 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 + + embed = get_submission_embed(interaction.user.id) + await channel.send( files=[await attch.to_file() for attch in interaction.message.attachments], view=VerificationView(), - embed=interaction.message.embeds[0], + embed=embed, content=f"Submission from {interaction.user.display_name}", ) await interaction.message.edit(content=f"<@{interaction.user.id}> Submitted!", view=None) - submission_messages.pop(interaction.user.id) + submission_objects.pop(interaction.user.id) ############ Submission Views ############ @@ -176,7 +183,7 @@ class SubmissionCreateButton(nextcord.ui.View): # a user should only have 1 submission active at once. # submitting with dummy message_id until message created - submission_messages[interaction.user.id] = { + submission_objects[interaction.user.id] = { "message_id": 0, "submission_state": SubmissionState.CATEGORY, "boss_name": boss_name, @@ -197,7 +204,7 @@ class SubmissionCreateButton(nextcord.ui.View): ) # update the message_id once its created - submission_messages[interaction.user.id]["message_id"] = submission_message.id + submission_objects[interaction.user.id]["message_id"] = submission_message.id class SubmissionView(nextcord.ui.View): @@ -213,8 +220,8 @@ class SubmissionView(nextcord.ui.View): super().__init__(timeout=timeout) self._submission_user = submission_user self._bot = bot - self._state = submission_messages[self._submission_user]["submission_state"] - self._boss_name = submission_messages[self._submission_user]["boss_name"] + self._state = submission_objects[self._submission_user]["submission_state"] + self._boss_name = submission_objects[self._submission_user]["boss_name"] # add items depending on given state if self._state is SubmissionState.CATEGORY: diff --git a/cogs/submission/verification_view.py b/cogs/submission/verification_view.py index 3ec8997..89599ea 100644 --- a/cogs/submission/verification_view.py +++ b/cogs/submission/verification_view.py @@ -26,7 +26,7 @@ class VerificationView(nextcord.ui.View): category = field["value"] elif field["name"] == "Score": score = field["value"] - elif field["name"] == "User": + elif field["name"] == "User Name": user = field["value"] try: diff --git a/highscores.py b/highscores.py index 842ba16..badbf22 100644 --- a/highscores.py +++ b/highscores.py @@ -24,7 +24,7 @@ highscores_config = open_highscores_config() highscores_data = open_highscores_data() highscores_message_map = open_message_map() -submission_messages: dict = {} +submission_objects: dict = {} def main():