"""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 # 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(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) ) 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.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)