Updating message listener to work with states.

This commit is contained in:
alwayscompiling
2022-07-20 20:37:29 -04:00
parent 2c85483db5
commit 1900e21f72
4 changed files with 55 additions and 27 deletions
+32 -11
View File
@@ -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.
+21 -14
View File
@@ -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:
+1 -1
View File
@@ -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:
+1 -1
View File
@@ -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():