wow-token-app-bot

An interactions.py Discord bot for getting and alerting on the WoW Token Price
git clone https://git.emily.sh/wowtoken-app/wow-token-app-bot.git
Log | Files | Refs | README | LICENSE

commit 3a06464c2961c2dccb8c48f16ca4c6b3151f7fe6
parent 62c205aa358df25bd6f4e58f155fd1ac07e3b495
Author: Emily Doherty <git@emily.sh>
Date:   Sun,  8 Dec 2024 16:48:05 -0800

General tracker.py improvements

Mostly speed-ups by awaiting multiple awaits where there's not a dependency on each other's results, and bounds checks

Diffstat:
Mtoken_bot/tracker.py | 24+++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/token_bot/tracker.py b/token_bot/tracker.py @@ -157,7 +157,7 @@ class Tracker(Extension): @slash_command( name="add-alert", - description="List all alerts you have signed up for" + description="Add an alert listener" ) async def add_alert(self, ctx: SlashContext): if not await self._users.exists(ctx.user.id): @@ -184,8 +184,10 @@ class Tracker(Extension): else: alert = Alert(alert_type, flavor, user.region) if not await self._users.is_subscribed(user, alert): - await self._users.add_alert(user, alert) - await self._alerts.add_user(alert, user) + await asyncio.gather( + self._users.add_alert(user, alert), + self._alerts.add_user(alert, user) + ) await ctx.send("Successfully added alert", ephemeral=True) else: @@ -197,14 +199,26 @@ class Tracker(Extension): description="Remove an alert you have signed up for" ) async def remove_alert(self, ctx: SlashContext): + if not await self._users.exists(ctx.user.id): + await ctx.send("You are not registered with any region\n" + "Please register with /register before adding alerts", + ephemeral=True) + return user = await self._users.get(ctx.user.id) + alerts = await self._users.list_alerts(user) + if len(alerts) == 0: + await ctx.send("You do not have any alerts registered", ephemeral=True) + return + try: alert = await self.remove_alert_select_menu(ctx, user) except TimeoutError: return else: - await self._users.remove_alert(user, alert) - await self._alerts.remove_user(alert, user) + await asyncio.gather( + self._users.remove_alert(user, alert), + self._alerts.remove_user(alert, user) + ) await ctx.send("Successfully removed alert", ephemeral=True)