Skip to content

Commit 7f1ed29

Browse files
AmbratolmAmbratolm
authored andcommitted
Optimized leaderboard cmd
1 parent da80a29 commit 7f1ed29

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ jobs:
2020
username: ${{ secrets.EC2_USER }}
2121
key: ${{ secrets.EC2_SSH_KEY }}
2222
script: |
23+
pkill -f "uv"
2324
cd /home/ubuntu/TACT/
24-
sudo -u ubuntu kill -9 $(pgrep -o -f "uv") || true
25-
sleep 3
2625
git pull fork ft-rework
27-
sleep 3
2826
nohup uv run task app-prod &

bot/cogs/board.py

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import asyncio
2+
13
from discord import Color, Embed, Interaction, Member, User, app_commands
24
from discord.app_commands import command, guild_only
35
from discord.ext.commands import Cog
@@ -57,6 +59,12 @@ async def profile(
5759
@app_commands.guild_only()
5860
@app_commands.command(description="View leaderboard")
5961
async def leaderboard(self, interaction: Interaction):
62+
# Check guild (not needed but just for type-checking)
63+
guild = interaction.guild
64+
if not guild:
65+
return
66+
67+
# Get top actors
6068
await interaction.response.defer()
6169
db = self.bot.get_db(interaction.guild)
6270
actors = (
@@ -77,14 +85,41 @@ async def leaderboard(self, interaction: Interaction):
7785
embed=EmbedX.info("", "No members found for the leaderboard.")
7886
)
7987
return
88+
89+
# Get associated members
90+
members = []
91+
for actor in actors:
92+
member = guild.get_member(actor.id) # Try get from cache
93+
if member:
94+
members.append(member)
95+
else:
96+
members.append(None) # placeholder to fetch later concurrently
97+
98+
# Fetch missing members concurrently
99+
members_futures = [
100+
guild.fetch_member(actor.id)
101+
for i, actor in enumerate(actors)
102+
if members[i] is None
103+
]
104+
try:
105+
fetched_members = await asyncio.gather(*members_futures)
106+
except Exception as e:
107+
await interaction.followup.send(
108+
embed=EmbedX.error(description="Could not fetch members.")
109+
)
110+
return
111+
112+
# Update members list with fetched members
113+
fetched_index = 0
114+
for i, actor in enumerate(actors):
115+
if members[i] is None:
116+
members[i] = fetched_members[fetched_index]
117+
fetched_index += 1
118+
119+
# Create embed
80120
embed = Embed(title="🏆 Leaderboard", color=Color.blue())
81121
for i, actor in enumerate(actors):
82-
guild = interaction.guild
83-
member = (
84-
(guild.get_member(actor.id) or await guild.fetch_member(actor.id))
85-
if guild
86-
else None
87-
)
122+
member = members[i]
88123
member_name = member.display_name if member else f"{actor.display_name} (⚠)"
89124
embed.add_field(
90125
name="",

bot/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async def on_ready(self):
5252
log.info("\n" + self.app_commands_info_text)
5353
log.info("\n" + await self.app_commands_remote_info_text)
5454
log.info("\n" + self.commands_info_text)
55-
await self.sync_commands()
55+
# await self.sync_commands()
5656

5757
@Cog.listener()
5858
async def on_message(self, message: Message):

0 commit comments

Comments
 (0)