From 1cc93d732e97aa55bfd0dc9609363cb22a228689 Mon Sep 17 00:00:00 2001 From: Interitio Date: Thu, 30 Jul 2026 12:26:53 +0300 Subject: [PATCH] fix: Reward formatting and acmpl --- plugin/discord/cog.py | 10 ++-- plugin/discord/ui/rewards.py | 88 +++++++++++++++++------------------- 2 files changed, 48 insertions(+), 50 deletions(-) diff --git a/plugin/discord/cog.py b/plugin/discord/cog.py index b63c20a..66ab6b6 100644 --- a/plugin/discord/cog.py +++ b/plugin/discord/cog.py @@ -369,11 +369,11 @@ class CampaignCog(LionCog): # Reward has been unfluffed update_args["fulfilled_at"] = None - new_ref_value = modal.reference.value or None + new_ref_value = modal.reference.component.value or None if new_ref_value != reward.reference: update_args["reference"] = new_ref_value - new_notes_value = modal.notes.value or None + new_notes_value = modal.notes.component.value or None if new_notes_value != reward.modnote: update_args["modnote"] = new_notes_value @@ -394,7 +394,11 @@ class CampaignCog(LionCog): #100: username in campaign """ - ... + return "#{rewardid}: {username} in {cname}".format( + rewardid=reward.earned_id, + username=reward.twitch_user_name or reward.twitch_user_id or "Unknown", + cname=campaign.row.campaign_name, + ) @campaign_editreward_cmd.autocomplete("rewardid") async def _reward_acmpl( diff --git a/plugin/discord/ui/rewards.py b/plugin/discord/ui/rewards.py index c336c7f..5dc6a2d 100644 --- a/plugin/discord/ui/rewards.py +++ b/plugin/discord/ui/rewards.py @@ -29,15 +29,13 @@ class RewardEditor(FastModal): # Title is the reward we are editing # Block of text with dates and user info - blurb = discord.ui.TextDisplay(content='placeholder') + blurb = discord.ui.TextDisplay(content="placeholder") # Fulfilled is a checkbox, and supports a fulfilled note flufbox = discord.ui.Label( text="Fulfilled", description="Whether this reward has been completed", - component=discord.ui.Checkbox( - default=False - ) + component=discord.ui.Checkbox(default=False), ) # Reference and further notes need to be editable, @@ -47,6 +45,7 @@ class RewardEditor(FastModal): description="Reference URL or other information", component=discord.ui.TextInput( style=discord.TextStyle.long, + required=False, ), ) notes = discord.ui.Label( @@ -54,6 +53,7 @@ class RewardEditor(FastModal): description="Further notes for this user/reward", component=discord.ui.TextInput( style=discord.TextStyle.long, + required=False, ), ) @@ -64,19 +64,18 @@ class RewardEditor(FastModal): # blurb table = { - 'Earned At': discord.utils.format_dt(reward.earned_at, 'F'), - 'Earned From': reward.earned_from, + "Earned At": discord.utils.format_dt(reward.earned_at, "F"), + "Earned From": reward.earned_from, } - prop_table = '\n'.join(tabulate(*table.items())) + prop_table = "\n".join(tabulate(*table.items())) self.blurb.content = prop_table - # Fulfilled - self.flufbox.component.default = (reward.fulfilled_at is not None) + self.flufbox.component.default = reward.fulfilled_at is not None # Notes - self.reference.component.default = reward.reference or '' - self.notes.component.default = reward.modnote or '' + self.reference.component.default = reward.reference or "" + self.notes.component.default = reward.modnote or "" return self @@ -134,7 +133,7 @@ class RewardList(MessageUI): 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) + currently_fluffed = reward.fulfilled_at is not None @modal.submit_callback() async def on_editor_submit(interaction: discord.Interaction): @@ -142,18 +141,18 @@ class RewardList(MessageUI): if modal.flufbox.component.value and not currently_fluffed: # Reward has been fluffed - update_args['fulfilled_at'] = utc_now() + update_args["fulfilled_at"] = utc_now() elif currently_fluffed and not modal.flufbox.component.value: # Reward has been unfluffed - update_args['fulfilled_at'] = None + update_args["fulfilled_at"] = None - new_ref_value = modal.reference.value or None + new_ref_value = modal.reference.component.value or None if new_ref_value != reward.reference: - update_args['reference'] = new_ref_value + update_args["reference"] = new_ref_value - new_notes_value = modal.notes.value or None + new_notes_value = modal.notes.component.value or None if new_notes_value != reward.modnote: - update_args['modnote'] = new_notes_value + update_args["modnote"] = new_notes_value if update_args: await interaction.response.defer(thinking=True, ephemeral=True) @@ -162,7 +161,6 @@ class RewardList(MessageUI): else: await interaction.response.defer(thinking=False) - await selection.response.send_modal(modal) await self.refresh() @@ -171,17 +169,13 @@ class RewardList(MessageUI): async def reward_menu_refresh(self): menu = self.reward_menu - rewards = self.page + rewards = self.page if rewards: - menu.options = [ - self._format_reward_option(r) for r in rewards - ] - menu.disabled = False + menu.options = [self._format_reward_option(r) for r in rewards] + menu.disabled = False else: - menu.options = [ - SelectOption(label='DUMMY') - ] - menu.disabled = True + menu.options = [SelectOption(label="DUMMY")] + menu.disabled = True # Meta buttons @button(emoji=conf.emojis.getemoji("forward")) @@ -217,23 +211,23 @@ class RewardList(MessageUI): name = f"Reward #{reward.earned_id} earned by {reward.twitch_user_name or reward.twitch_user_id}" if reward.fulfilled_at is not None: - fat = discord.utils.format_dt(reward.fulfilled_at, 'F') + fat = discord.utils.format_dt(reward.fulfilled_at, "F") if reward.fulfilled_note is not None: fluf = f"{fat} ({reward.fulfilled_note})" else: - fluf = fat + fluf = fat else: fluf = "*Not Fulfilled*" table = { - 'Reward': "Plus Campaign Sketch", - 'Earned At': discord.utils.format_dt(reward.earned_at, 'F'), - 'Earned From': reward.earned_from, - 'Fulfilled At': fluf, - 'Reference': reward.reference or "*No reference set*", - 'Further notes': reward.modnote or "*No notes*", + "Reward": "Plus Campaign Sketch", + "Earned At": discord.utils.format_dt(reward.earned_at, "F"), + "Earned From": reward.earned_from, + "Fulfilled At": fluf, + "Reference": reward.reference or "*No reference set*", + "Further notes": reward.modnote or "*No notes*", } - prop_table = '\n'.join(tabulate(*table.items())) + prop_table = "\n".join(tabulate(*table.items())) return (name, prop_table) @@ -246,14 +240,10 @@ class RewardList(MessageUI): name = f"Reward #{reward.earned_id} earned by {reward.twitch_user_name or reward.twitch_user_id}" value = reward.earned_id - return SelectOption( - label=name, value=str(value) - ) + return SelectOption(label=name, value=str(value)) async def refresh_layout(self): - to_refresh = ( - self.reward_menu_refresh(), - ) + to_refresh = (self.reward_menu_refresh(),) await asyncio.gather(*to_refresh) if self.page_count <= 1: @@ -264,13 +254,18 @@ class RewardList(MessageUI): self.next_page_button.disabled = False self.set_layout( - (self.prev_page_button, self.refresh_button, self.next_page_button, self.quit_button), + ( + self.prev_page_button, + self.refresh_button, + self.next_page_button, + self.quit_button, + ), (self.reward_menu,), ) async def make_message(self) -> MessageArgs: embed = discord.Embed(title=f"{self.campaign.row.campaign_name} Reward List") - embed.set_footer(text='Last Update') + embed.set_footer(text="Last Update") embed.timestamp = utc_now() campaign = self.campaign @@ -284,7 +279,6 @@ class RewardList(MessageUI): embed.description = description - for reward in self.page: name, value = self._format_reward_section(reward) embed.add_field(name=name, value=value, inline=False) @@ -296,6 +290,6 @@ class RewardList(MessageUI): # TODO: Consider filter by unfulfilled or reward type self.reward_blocks = [ - rewards[i:i+self.blocklen] + rewards[i : i + self.blocklen] for i in range(0, len(rewards), self.blocklen) ] or [[]]