(discord): Fill in discord interfaces

This commit is contained in:
2026-07-29 15:48:47 +03:00
parent 9203a795e3
commit 8fc0ff0667
4 changed files with 618 additions and 6 deletions
+33 -3
View File
@@ -16,9 +16,8 @@ from meta import LionBot
from meta.errors import UserInputError
from meta.config import conf
from utils.lib import tabulate, utc_now, MessageArgs, parse_duration
from utils.ui import MessageUI, AButton, AsComponents, ConfigEditor
from utils.ui import MessageUI
from utils.ui.micros import FastModal
from utils.ui.pagers import BasePager, Pager
from ...campaign import RewardCampaign
from ...data import EarnedReward
@@ -134,7 +133,38 @@ class RewardList(MessageUI):
value = int(selected.values[0])
reward = next(r for r in self._rewards if r.earned_id == value)
modal = RewardEditor.from_reward(reward)
currently_fluffed = (reward.fulfilled_at is not None)
@modal.submit_callback()
async def on_editor_submit(interaction: discord.Interaction):
update_args = {}
if modal.flufbox.component.value and not currently_fluffed:
# Reward has been fluffed
update_args['fulfilled_at'] = utc_now()
elif currently_fluffed and not modal.flufbox.component.value:
# Reward has been unfluffed
update_args['fulfilled_at'] = None
new_ref_value = modal.reference.value or None
if new_ref_value != reward.reference:
update_args['reference'] = new_ref_value
new_notes_value = modal.notes.value or None
if new_notes_value != reward.modnote:
update_args['modnote'] = new_notes_value
if update_args:
await interaction.response.defer(thinking=True, ephemeral=True)
await self.campaign.update_reward(reward.earned_id, **update_args)
await self.refresh(thinking=interaction)
else:
await interaction.response.defer(thinking=False)
await selection.response.send_modal(modal)
await self.refresh()
else:
await selection.response.defer()
@@ -200,7 +230,7 @@ class RewardList(MessageUI):
'Earned At': discord.utils.format_dt(reward.earned_at, 'F'),
'Earned From': reward.earned_from,
'Fulfilled At': fluf,
'Reference': "*No reference set*",
'Reference': reward.reference or "*No reference set*",
'Further notes': reward.modnote or "*No notes*",
}
prop_table = '\n'.join(tabulate(*table.items()))