"""View for verification buttons.""" import nextcord from sqlalchemy import delete, select from sqlalchemy.orm import Session from sqlmodel import col from database.db import engine from database.models import Submission 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(col(Submission.guild_id) == interaction.guild_id) .where(col(Submission.message_id) == 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(col(Submission.guild_id) == interaction.guild_id) .where(col(Submission.message_id) == interaction.message.id) ) if (submission := session.scalar(stmt)) 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.group_id, submission.category_id, submission.username, submission.score ) session.delete(submission) session.commit() content = interaction.message.content content += f"\nApproved by <@{interaction.user.id}>." await interaction.message.edit(content=content, view=None)