Files
agon/agon/cogs/submission/verification_view.py
T

55 lines
2.3 KiB
Python

"""View for verification buttons."""
import nextcord
from sqlalchemy import delete, select
from sqlalchemy.orm import Session
from sqlmodel import col
from agon.database.db import engine
from agon.database.models import Submission
from agon.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)