Convert old submission_objects to new class.

This commit is contained in:
alwayscompiling
2022-08-06 16:30:31 -04:00
parent 835611a11e
commit 5f3e7361b4
3 changed files with 57 additions and 91 deletions
+16 -14
View File
@@ -9,10 +9,7 @@ import re
from nextcord.ext import commands from nextcord.ext import commands
import nextcord import nextcord
from cogs.submission.submission_views import ( # pylint: disable=import-error from classes.submission import SubmissionState # pylint: disable=import-error
SubmissionState,
get_submission_embed,
)
from highscores import highscores_data, submission_objects # 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: if chance == 1:
await message.channel.send("Happy Birthday Chris <@642330132958281750>") await message.channel.send("Happy Birthday Chris <@642330132958281750>")
if message.author.id in submission_objects: if submission_objects.has_user(message.author.id):
message_id = submission_objects[message.author.id]["message_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_channel_id = highscores_data.get_guild(guild_id).submission_channel
submission_message: nextcord.Message = ( submission_message: nextcord.Message = (
await self.bot.get_guild(guild_id) 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 # need check if correct user and correct channel
if message.channel.id == submission_channel_id: 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: if state == SubmissionState.SCORE and message.content:
# check with regex if score matches correctly # check with regex if score matches correctly
is_time_record = ( is_time_record = (
highscores_data.get_guild(guild_id) highscores_data.get_guild(guild_id)
.get_table(submission_objects[message.author.id]["boss_name"]) .get_table(submission_objects.get_user_submission(message.author.id).table)
.get_category(submission_objects[message.author.id]["category"]) .get_category(
submission_objects.get_user_submission(message.author.id).category
)
.time_record .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): elif re.search("^[0]?[0-9]:[0-9]{2}(\\.[0-9])?$", score):
# if there is a minute 10ths place 0, remove # if there is a minute 10ths place 0, remove
score = score.lstrip("0") score = score.lstrip("0")
submission_objects[message.author.id]["score"] = score submission_objects.get_user_submission(message.author.id).score = score
embed = get_submission_embed(message.author.id) embed = submission_objects.get_user_submission(
message.author.id
).get_embed()
await submission_message.edit( await submission_message.edit(
embed=embed, embed=embed,
) )
@@ -100,10 +100,12 @@ class SubmissionListener(commands.Cog, name="Message Listener"):
files=[await attch.to_file() for attch in message.attachments], files=[await attch.to_file() for attch in message.attachments],
) )
elif state == SubmissionState.NAME and message.content: 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 : 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( await submission_message.edit(
embed=embed, embed=embed,
) )
+38 -75
View File
@@ -1,12 +1,11 @@
"""Views used for submission process.""" """Views used for submission process."""
from typing import Optional from typing import Optional
from enum import Enum
import nextcord import nextcord
from nextcord import Embed
from nextcord.ext import commands from nextcord.ext import commands
from classes.submission import Submission, SubmissionState # pylint: disable=import-error
from highscores import ( # pylint: disable=import-error from highscores import ( # pylint: disable=import-error
highscores_data, highscores_data,
highscores_message_map, highscores_message_map,
@@ -15,45 +14,6 @@ from highscores import ( # pylint: disable=import-error
from .verification_view import VerificationView 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]": def category_select_options(guild_id: int, boss_name: str) -> "list[nextcord.SelectOption]":
"""Returns list of categories for a given boss.""" """Returns list of categories for a given boss."""
options: "list[nextcord.SelectOption]" = [] options: "list[nextcord.SelectOption]" = []
@@ -81,8 +41,8 @@ class SubmissionDropdown(nextcord.ui.Select):
self._bot = bot self._bot = bot
async def callback(self, interaction: nextcord.Interaction): async def callback(self, interaction: nextcord.Interaction):
submission_objects[interaction.user.id]["category"] = self.values[0] submission_objects.get_user_submission(interaction.user.id).category = self.values[0]
embed = get_submission_embed(interaction.user.id) embed = submission_objects.get_user_submission(interaction.user.id).get_embed()
await interaction.message.edit( await interaction.message.edit(
embed=embed, embed=embed,
) )
@@ -96,10 +56,12 @@ class BackButton(nextcord.ui.Button):
self._bot = bot self._bot = bot
async def callback(self, interaction: nextcord.Interaction): 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) state = SubmissionState(state.value - 1)
submission_objects[interaction.user.id]["submission_state"] = state submission_objects.get_user_submission(interaction.user.id).submisson_state = state
embed = get_submission_embed(interaction.user.id) embed = submission_objects.get_user_submission(interaction.user.id).get_embed()
await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) 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") super().__init__(label="Cancel", style=nextcord.ButtonStyle.red, custom_id="cancel")
async def callback(self, interaction: nextcord.Interaction): 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() await interaction.message.delete()
@@ -123,22 +85,25 @@ class NextButton(nextcord.ui.Button):
async def callback(self, interaction: nextcord.Interaction): async def callback(self, interaction: nextcord.Interaction):
# check if fields have been filled out for each state # 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 ( if (
state == SubmissionState.CATEGORY 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) await interaction.send("Please choose a category.", ephemeral=True)
elif ( 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) await interaction.send("Please send a score.", ephemeral=True)
elif state == SubmissionState.PROOF and not len(interaction.message.attachments) > 0: elif state == SubmissionState.PROOF and not len(interaction.message.attachments) > 0:
await interaction.send("Please attach picture for proof.", ephemeral=True) await interaction.send("Please attach picture for proof.", ephemeral=True)
else: else:
state = SubmissionState(state.value + 1) state = SubmissionState(state.value + 1)
submission_objects[interaction.user.id]["submission_state"] = state submission_objects.get_user_submission(interaction.user.id).submission_state = state
embed = get_submission_embed(interaction.user.id) embed = submission_objects.get_user_submission(interaction.user.id).get_embed()
await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id)) await interaction.edit(embed=embed, view=SubmissionView(self._bot, interaction.user.id))
@@ -159,9 +124,11 @@ class SubmitButton(nextcord.ui.Button):
Contact server admins." Contact server admins."
assert channel is not None, await channel.send(error_response) 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( await channel.send(
files=[await attch.to_file() for attch in interaction.message.attachments], 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}", content=f"Submission from {interaction.user.display_name}",
) )
await interaction.message.edit(content=f"<@{interaction.user.id}> Submitted!", view=None) 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 ############ ############ Submission Views ############
@@ -191,31 +158,25 @@ class SubmissionCreateButton(nextcord.ui.View):
): # pylint: disable=unused-argument ): # pylint: disable=unused-argument
"""Button for score submission.""" """Button for score submission."""
# Don't allow a user to start a new submission if one already exists # 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) await interaction.send("Please finish in progress submission first.", ephemeral=True)
return 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( channel = interaction.guild.get_channel(
highscores_data.get_guild(interaction.guild_id).submission_channel highscores_data.get_guild(interaction.guild_id).submission_channel
) )
# a user should only have 1 submission active at once. # a user should only have 1 submission active at once.
# submitting with dummy message_id until message created # split username on pipe then limit length.
# split username on pipe. username: str = interaction.user.display_name.split("|")[0][
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 : 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( submission_message = await channel.send(
f"<@{interaction.user.id}>", f"<@{interaction.user.id}>",
@@ -227,7 +188,9 @@ class SubmissionCreateButton(nextcord.ui.View):
) )
# update the message_id once its created # 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): class SubmissionView(nextcord.ui.View):
@@ -243,9 +206,9 @@ class SubmissionView(nextcord.ui.View):
super().__init__(timeout=timeout) super().__init__(timeout=timeout)
self._submission_user = submission_user self._submission_user = submission_user
self._bot = bot self._bot = bot
self._state = submission_objects[self._submission_user]["submission_state"] self._state = submission_objects.get_user_submission(self._submission_user).submisson_state
self._boss_name = submission_objects[self._submission_user]["boss_name"] self._boss_name = submission_objects.get_user_submission(self._submission_user).table
self._guild_id = submission_objects[self._submission_user]["guild_id"] self._guild_id = submission_objects.get_user_submission(self._submission_user).guild_id
# add items depending on given state # add items depending on given state
if self._state is SubmissionState.CATEGORY: if self._state is SubmissionState.CATEGORY:
@@ -275,4 +238,4 @@ class SubmissionView(nextcord.ui.View):
async def on_timeout(self) -> None: async def on_timeout(self) -> None:
# remove user from submission objects after time out. Allows user to start new submission. # 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)
+2 -1
View File
@@ -11,6 +11,7 @@ from nextcord.ext import commands
import config import config
from classes.highscores_data import HighscoresData from classes.highscores_data import HighscoresData
from classes.submission import SubmissionMap
logger = logging.getLogger("nextcord") logger = logging.getLogger("nextcord")
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)
@@ -27,7 +28,7 @@ for guild in highscores_data.guilds:
for table in guild.tables: for table in guild.tables:
highscores_message_map[guild.guild_id][table.message_id] = table.name highscores_message_map[guild.guild_id][table.message_id] = table.name
submission_objects: dict = {} submission_objects: SubmissionMap = SubmissionMap()
def main(): def main():