Skip to content

Commit a8ae4f6

Browse files
AmbratolmAmbratolm
authored andcommitted
Fixed leaderboard & actions workflow
1 parent 6092b89 commit a8ae4f6

File tree

9 files changed

+90
-103
lines changed

9 files changed

+90
-103
lines changed

.github/workflows/deploy.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ jobs:
1919
host: ${{ secrets.EC2_HOST }}
2020
username: ${{ secrets.EC2_USER }}
2121
key: ${{ secrets.EC2_SSH_KEY }}
22+
command_timeout: "20m"
2223
script: |
23-
pkill -f "uv"
24-
cd /home/ubuntu/TACT/
24+
cd /home/ubuntu/ACT/
2525
git pull fork ft-rework
26-
nohup uv run task app-prod &
26+
sudo systemctl restart act-app.service
27+
sleep 3
28+
sudo systemctl status act-app.service --no-pager

bot/cogs/act_cog.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
import discord
22
from colorama import Fore
3-
from discord import Color, Embed, Guild, Interaction, Message, Status, app_commands
3+
from discord import (
4+
Color,
5+
Embed,
6+
Guild,
7+
Interaction,
8+
Message,
9+
Permissions,
10+
Status,
11+
app_commands,
12+
)
413
from discord.ext import commands
514
from discord.ext.commands import Bot, Cog, GroupCog
15+
from humanize import naturaltime
616
from pymongo.database import Database
717

818
from bot.main import ActBot
9-
from bot.ui import EmbedX
1019
from db.main import ActDb
1120
from utils.log import logger
1221
from utils.misc import import_classes, text_block
@@ -26,6 +35,22 @@ def __init__(self, bot: ActBot):
2635
async def hi(self, interaction: Interaction):
2736
await interaction.response.send_message("Hello 🙋‍♀️")
2837

29-
@app_commands.command(description="Its cat wow!")
30-
async def cat(self, interaction: Interaction):
31-
await interaction.response.send_message("Meow! 🐱")
38+
@app_commands.guild_only
39+
@app_commands.command(description="Show all roles")
40+
async def roles(self, interaction: Interaction):
41+
await interaction.response.defer()
42+
guild = interaction.guild
43+
roles = (
44+
sorted(guild.roles, key=lambda role: role.position, reverse=True)
45+
if guild
46+
else []
47+
)
48+
embed = Embed(title="🎭 Roles", color=Color.blue())
49+
embed.add_field(name="", value="", inline=False)
50+
for role in roles:
51+
embed.add_field(name="", value="", inline=False)
52+
embed.add_field(name=role.name, value="")
53+
embed.add_field(name=f"👥 {len(role.members)}", value="")
54+
if not len(embed.fields):
55+
embed.description = "_No roles found in this server._"
56+
await interaction.followup.send(embed=embed)

bot/cogs/board.py

Lines changed: 18 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import asyncio
22

33
from discord import Color, Embed, Interaction, Member, User, app_commands
4-
from discord.app_commands import command, guild_only
54
from discord.ext.commands import Cog
65
from humanize import naturaltime
7-
from odmantic import AIOEngine, Model, query
6+
from odmantic import query
87

98
from bot.main import ActBot
10-
from bot.ui import EmbedX
119
from db.actor import Actor
1210

1311

@@ -16,7 +14,9 @@ def __init__(self, bot: ActBot):
1614
self.bot = bot
1715

1816
@app_commands.guild_only()
19-
@app_commands.command(description="Get your or another member's information")
17+
@app_commands.command(
18+
description="View your or another member's profile information"
19+
)
2020
async def profile(
2121
self, interaction: Interaction, member: Member | User | None = None
2222
):
@@ -57,7 +57,7 @@ async def profile(
5757
await interaction.followup.send(embed=embed)
5858

5959
@app_commands.guild_only()
60-
@app_commands.command(description="View leaderboard")
60+
@app_commands.command(description="View top members")
6161
async def leaderboard(self, interaction: Interaction):
6262
# Check guild (not needed but just for type-checking)
6363
guild = interaction.guild
@@ -82,56 +82,26 @@ async def leaderboard(self, interaction: Interaction):
8282
)
8383
if not actors:
8484
await interaction.followup.send(
85-
embed=EmbedX.info("", "No members found for the leaderboard.")
85+
embed=Embed(
86+
title="❔",
87+
description="No members found.",
88+
color=Color.yellow(),
89+
)
8690
)
8791
return
8892

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
93+
# Create embed while fetching memebrs associated with actors
12094
embed = Embed(title="🏆 Leaderboard", color=Color.blue())
12195
for i, actor in enumerate(actors):
122-
member = members[i]
123-
member_name = member.display_name if member else f"{actor.display_name} (⚠)"
124-
embed.add_field(
125-
name="",
126-
value=10 * "➖",
127-
inline=False,
128-
)
96+
separator = 10 * "‎ "
97+
embed.add_field(name="", value="", inline=False)
12998
embed.add_field(
130-
name=f"**{i + 1}** {member_name}",
131-
value=f" ",
99+
name=f"# **{i + 1}** {separator} {actor.display_name}",
100+
value=f"",
132101
)
102+
embed.add_field(name="", value="")
133103
embed.add_field(
134-
name=f"🏅 {actor.level}{actor.xp} 💰 {actor.gold}",
135-
value="",
104+
name=f"",
105+
value=f"-# 🏅 {actor.level} {separator}{actor.xp} {separator} 💰 {actor.gold}",
136106
)
137107
await interaction.followup.send(embed=embed)

bot/cogs/farm.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import random
33
import re
44

5-
from discord import Member, Message, TextChannel, User, utils
5+
from discord import Color, Embed, Member, Message, TextChannel, User, utils
66
from discord.ext.commands import Bot, Cog
77

88
from bot.main import ActBot
@@ -47,9 +47,16 @@ async def on_message(self, message: Message):
4747
if actor.try_level_up():
4848
gold_reward = random.randint(1, 500) * actor.level
4949
actor.gold += gold_reward
50-
await message.channel.send(
51-
f"🎉 {member.mention}! You have reached **🏅 Level {actor.level}** and earned **💰 {gold_reward} Gold**."
50+
embed = Embed(
51+
title=f"🎉 Level Up",
52+
description=f"{member.display_name} {member.mention} has reached a new level and has been rewarded.",
53+
color=Color.green(),
5254
)
55+
embed.add_field(name="", value="", inline=False)
56+
embed.add_field(name="Level", value=f"🏅 **{actor.level}**")
57+
embed.add_field(name="Gold 🔼", value=f"💰 **+{gold_reward}**")
58+
embed.set_thumbnail(url=member.display_avatar.url)
59+
await message.channel.send(embed=embed)
5360

5461
# Try role-up
5562
awarded_role = await self.award_role(member, actor.rank_name)

bot/cogs/filter_cog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async def on_message(self, message: Message):
8383
# Notice
8484
embed = Embed(
8585
title=f"🚨 Penalty",
86-
description=f"{member.display_name} ({member.mention}) has been penalized for repeated use of offensive language.",
86+
description=f"{member.display_name} {member.mention} has been penalized for repeated use of offensive language.",
8787
color=Color.red(),
8888
)
8989
embed.add_field(name="", value="", inline=False)

bot/cogs/test_cog.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from discord import Interaction, Message, app_commands
1+
from discord import Color, Embed, Interaction, Message, app_commands
22
from discord.ext import commands
33
from discord.ext.commands import Cog
44

55
from bot.main import ActBot
6-
from bot.ui import EmbedX
76

87

98
# ----------------------------------------------------------------------------------------------------
@@ -18,8 +17,10 @@ def __init__(self, bot: ActBot):
1817
async def sync(self, interaction: Interaction):
1918
count = await self.bot.sync_commands()
2019
await interaction.response.send_message(
21-
embed=EmbedX.success(
22-
"Commands Sync", f"{count[0]}/{count[1]} commands synced."
20+
embed=Embed(
21+
title="Commands Sync",
22+
description=f"{count[0]}/{count[1]} commands synced.",
23+
color=Color.green(),
2324
)
2425
)
2526

@@ -28,7 +29,9 @@ async def sync_error(
2829
self, interaction: Interaction, error: app_commands.AppCommandError
2930
):
3031
await interaction.response.send_message(
31-
embed=EmbedX.error("Commands Sync", f"{error}.")
32+
embed=Embed(
33+
title="Commands Sync", description=f"{error}.", color=Color.red()
34+
)
3235
)
3336

3437
# ----------------------------------------------------------------------------------------------------

bot/main.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
import pathlib
22

33
from colorama import Fore
4-
from discord import Guild, Interaction, Member, Message, User, VoiceClient, app_commands
4+
from discord import (
5+
Color,
6+
Embed,
7+
Guild,
8+
Interaction,
9+
Member,
10+
Message,
11+
User,
12+
VoiceClient,
13+
app_commands,
14+
)
515
from discord.ext.commands import Bot, Cog
616
from odmantic import SyncEngine
717

8-
from bot.ui import EmbedX
918
from db.actor import Actor
1019
from db.main import ActDb, DbRef
1120
from utils.log import logger
@@ -48,10 +57,10 @@ async def setup_hook(self):
4857
@Cog.listener()
4958
async def on_ready(self):
5059
log.success(f"🎮 Bot client connected as {self.user}.")
51-
log.info("\n" + self.cogs_info_text)
60+
# log.info("\n" + self.cogs_info_text)
5261
log.info("\n" + self.app_commands_info_text)
53-
log.info("\n" + await self.app_commands_remote_info_text)
54-
log.info("\n" + self.commands_info_text)
62+
# log.info("\n" + await self.app_commands_remote_info_text)
63+
# log.info("\n" + self.commands_info_text)
5564
# await self.sync_commands()
5665

5766
@Cog.listener()
@@ -62,7 +71,9 @@ async def on_message(self, message: Message):
6271
async def on_error(
6372
self, interaction: Interaction, error: app_commands.AppCommandError
6473
):
65-
await interaction.response.send_message(embed=EmbedX.error("Error", f"{error}"))
74+
await interaction.response.send_message(
75+
embed=Embed(title="⛔ Error", description=f"{error}.", color=Color.red())
76+
)
6677

6778
# ----------------------------------------------------------------------------------------------------
6879

bot/ui.py

Lines changed: 0 additions & 31 deletions
This file was deleted.

db/actor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def try_rank_up(self) -> bool:
9494

9595
@property
9696
def level_bar(self) -> str:
97-
return text_progress_bar(self.level, self.MAX_LEVEL, 5, "⭐", "☆")
97+
return text_progress_bar(self.level, self.next_rank_level, 5, "⭐", "☆")
9898

9999
@property
100100
def xp_bar(self) -> str:

0 commit comments

Comments
 (0)