Compare commits

..

1 Commits

Author SHA1 Message Date
conatum a18885511a fix: Many typos 2026-07-30 09:45:03 +03:00
6 changed files with 49 additions and 24 deletions
+2
View File
@@ -2,8 +2,10 @@ BEGIN;
-- Version dependency checks
DO $$
BEGIN
ASSERT current_module_version('PROFILES') = 1, 'Dependency version mismatch: PROFILES';
ASSERT current_module_version('EVENT_TRACKER') = 2, 'Dependency version mismatch: EVENT_TRACKER';
END;
$$ LANGUAGE plpgsql;
-- Plugin version history
+15 -10
View File
@@ -2,6 +2,8 @@ from typing import Any, Optional
import datetime as dt
from datetime import datetime, timedelta
import aiohttp
from data import ORDER, Condition
from data.conditions import NULL, condition
from utils.lib import utc_now
@@ -16,8 +18,9 @@ from . import logger
class RewardCampaign:
def __init__(self, row: Campaign):
def __init__(self, row: Campaign, session: aiohttp.ClientSession | None = None):
self.row = row
self._session = session
self._webhook: ThreadedWebhook | None = None
self._cached_webhookurl: str | None = None
@@ -33,7 +36,7 @@ class RewardCampaign:
if url is not None:
# TODO: I don't know if these needs a client
# Might be hard if so given we need to run this from Twitch client as well
self._webhook = ThreadedWebhook.from_url(url)
self._webhook = ThreadedWebhook.from_url(url, session=self._session)
else:
self._webhook = None
return self._webhook
@@ -170,8 +173,10 @@ class RewardCampaign:
class CampaignRegistry:
VERSION = CampaignData.VERSION
def __init__(self, data: CampaignData):
def __init__(self, data: CampaignData, session: aiohttp.ClientSession | None = None):
self.data = data
# TODO: Actually pass in a session
self._session = aiohttp.ClientSession()
async def init(self):
await self.data.init()
@@ -183,7 +188,7 @@ class CampaignRegistry:
row = await Campaign.fetch(campaign_id)
if row is None:
raise ValueError("Campign %s doesn't exist." % campaign_id)
camp = RewardCampaign(row)
camp = RewardCampaign(row, session=self._session)
return camp
async def fetch_campaigns(
@@ -207,7 +212,7 @@ class CampaignRegistry:
condition = condition and ~active_condition
rows = await Campaign.fetch_where(condition)
campaigns = [RewardCampaign(row) for row in rows]
campaigns = [RewardCampaign(row, session=self._session) for row in rows]
return campaigns
@@ -221,13 +226,13 @@ class CampaignRegistry:
"""
results = await Campaign.fetch_where(
Condition._expression_equality(
LOWER(Campaign.campaign_name.expr), LOWER(asexpr(name))
LOWER(Campaign.campaign_name), LOWER(asexpr(name))
),
campaignid=cid,
communityid=cid,
)
if results:
row = results[0]
camp = RewardCampaign(row)
camp = RewardCampaign(row, session=self._session)
else:
camp = None
return camp
@@ -247,7 +252,7 @@ class CampaignRegistry:
campaign_name=campaign_name,
**kwargs
)
return RewardCampaign(row)
return RewardCampaign(row, session=self._session)
async def update_campaign(
self,
@@ -261,4 +266,4 @@ class CampaignRegistry:
"""
campaign = await Campaign.fetch(campaign_id)
await campaign.update(**kwargs)
return RewardCampaign(campaign)
return RewardCampaign(campaign, session=self._session)
+5 -3
View File
@@ -1,6 +1,7 @@
from typing import Optional
import asyncio
from aiohttp import client
import discord
from discord.ext import commands as cmds
from discord import Forbidden, User, app_commands as appcmds
@@ -193,6 +194,7 @@ class CampaignCog(LionCog):
moderator_role_id=moderator_role.id if moderator_role else None,
logging_webhook_url=logging_webhook,
)
await campaign.start()
# Ack creation
# TODO: Can also show dashboard
@@ -256,7 +258,7 @@ class CampaignCog(LionCog):
# If logging webhook is given, check that it works
if logging_webhook is not None:
webhook = ThreadedWebhook.from_url(logging_webhook)
webhook = ThreadedWebhook.from_url(logging_webhook, client=self.bot)
try:
await webhook.test_webhook()
except (discord.HTTPException, discord.Forbidden):
@@ -276,9 +278,9 @@ class CampaignCog(LionCog):
)
# Ack creation
# TODO: Can also show dashboard
await ctx.reply(
f"Setup and started your reward campaign {campaign.row.campaign_name}! Good luck"
"Updated your campaign, good luck!",
ephemeral=True
)
campaign_configure_cmd.autocomplete("campaign_name")(_campaign_acmpl)
+3 -4
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
@@ -54,7 +53,7 @@ class CampaignDashboard(MessageUI):
await widget.wait()
self._slaves.remove(widget)
@button(emoji=conf.emojis.cancel, style=ButtonStyle.red)
@button(emoji=conf.emojis.cancel)
async def quit_button(self, press: discord.Interaction, pressed: Button):
"""Close the UI and all children."""
await press.response.defer(thinking=False)
@@ -124,7 +123,7 @@ class CampaignDashboard(MessageUI):
embed.add_field(
name="Rewards Summary",
value=blocks[0] or 'No Rewards Earned',
value=blocks[0] if blocks else 'No Rewards Earned',
inline=True
)
for block in blocks[1:]:
+21 -4
View File
@@ -196,7 +196,7 @@ class RewardList(MessageUI):
self.pagen -= 1
await self.refresh()
@button(emoji=conf.emojis.cancel, style=ButtonStyle.red)
@button(emoji=conf.emojis.cancel)
async def quit_button(self, press: discord.Interaction, pressed: Button):
"""Close the UI and all children."""
await press.response.defer(thinking=False)
@@ -247,7 +247,7 @@ class RewardList(MessageUI):
value = reward.earned_id
return SelectOption(
label=name, value=value
label=name, value=str(value)
)
async def refresh_layout(self):
@@ -256,7 +256,7 @@ class RewardList(MessageUI):
)
await asyncio.gather(*to_refresh)
if self.page_count > 1:
if self.page_count <= 1:
self.prev_page_button.disabled = True
self.next_page_button.disabled = True
else:
@@ -270,7 +270,24 @@ class RewardList(MessageUI):
async def make_message(self) -> MessageArgs:
embed = discord.Embed(title=f"{self.campaign.row.campaign_name} Reward List")
# embed.set_footer with last update
embed.set_footer(text='Last Update')
embed.timestamp = utc_now()
campaign = self.campaign
all_rewards = await campaign.get_rewards()
rewards_earned = len(all_rewards)
reward_cap = campaign.row.target_rewards
if reward_cap is not None:
description = f"{rewards_earned} earned out of {reward_cap} available"
else:
description = f"{rewards_earned} earned so far"
embed.description = description
for reward in self.page:
name, value = self._format_reward_section(reward)
embed.add_field(name=name, value=value, inline=False)
return MessageArgs(embed=embed)
+1 -1
View File
@@ -62,4 +62,4 @@ class ThreadedWebhook(discord.Webhook):
)
result = await self.send(embed=embed, wait=True, silent=True)
asyncio.create_task(fire_and_forget(result.delete()))
await result
return result