"""View for verification buttons.""" import nextcord from sqlalchemy import delete, select from sqlalchemy.orm import Session from database.db import Submission, engine # pylint: disable=import-error from utilities.utils import submit_score class VerificationView(nextcord.ui.View): """Defines views for verifying score submissions.""" def __init__(self) -> None: super().__init__(timeout=None) @nextcord.ui.button(label="Deny", style=nextcord.ButtonStyle.red, custom_id="deny-button-submission") async def deny_button(self, button: nextcord.ui.Button, interaction: nextcord.Interaction) -> None: # noqa: ARG002 """Button for denying score submission.""" with Session(engine) as session: stmt = ( delete(Submission) .where(Submission.GuildId == interaction.guild_id) .where(Submission.MessageId == interaction.message.id) ) session.execute(stmt) session.commit() await interaction.message.delete() @nextcord.ui.button(label="Approve", style=nextcord.ButtonStyle.green, custom_id="approve-button-submission") async def approve_button(self, button: nextcord.ui.Button, interaction: nextcord.Interaction) -> None: # noqa: ARG002 """Button for approving score submission.""" with Session(engine) as session: stmt = ( select(Submission) .where(Submission.GuildId == interaction.guild_id) .where(Submission.MessageId == interaction.message.id) ) submission = session.scalar(stmt) if submission is None: await interaction.response.send_message("Could not find submission data in database.", ephemeral=True) await interaction.message.delete() return await submit_score( interaction, submission.GroupId, submission.CategoryId, submission.UserName, submission.Score ) session.delete(submission) session.commit() content = interaction.message.content content += f"\nApproved by <@{interaction.user.id}>." # remove the bot information embed. it should always be the first one. await interaction.message.edit(content=content, view=None)