Skip to content

Commit

Permalink
Add leaderboards for daily quests
Browse files Browse the repository at this point in the history
Iapetus-11 committed Jun 25, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 83e9ab4 commit ced0e61
Showing 11 changed files with 93 additions and 14 deletions.
46 changes: 46 additions & 0 deletions bot/cogs/commands/econ.py
Original file line number Diff line number Diff line change
@@ -1811,6 +1811,16 @@ async def leaderboards(self, ctx: Ctx):
value=f"`{ctx.prefix}leaderboard uniqueitems`",
)

embed.add_field(
name=f"{ctx.l.econ.lb.dq} {self.d.emojis.calendar}",
value=f"`{ctx.prefix}leaderboard dailyquests`",
)
embed.add_field(name="\ufeff", value="\ufeff")
embed.add_field(
name=f"{ctx.l.econ.lb.wdq} {self.d.emojis.calendar}",
value=f"`{ctx.prefix}leaderboard wdq`",
)

await ctx.reply(embed=embed, mention_author=False)

async def _lb_logic(
@@ -2074,6 +2084,42 @@ async def leaderboard_item(self, ctx: Ctx, *, item: str):

await ctx.reply(embed=embed, mention_author=False)

@leaderboards.command(name="dailyquests", aliases=["dq"])
async def leaderboard_daily_quests(self, ctx: Ctx):
async with SuppressCtxManager(ctx.typing()):
global_lb = await self.db.fetch_global_lb("daily_quests", ctx.author.id)
local_lb = await self.db.fetch_local_lb(
"daily_quests",
ctx.author.id,
[m.id for m in ctx.guild.members if not m.bot],
)

await self._lb_logic(
ctx,
global_lb=global_lb,
local_lb=local_lb,
row_fmt=f"\n`{{}}.` **{{}}** {self.d.emojis.calendar} {{}}",
title=ctx.l.econ.lb.lb_dq.format(f" {self.d.emojis.calendar} "),
)

@leaderboards.command(name="weeklydailyquests", aliases=["wdq"])
async def leaderboard_weekly_daily_quests(self, ctx: Ctx):
async with SuppressCtxManager(ctx.typing()):
global_lb = await self.db.fetch_global_lb("week_daily_quests", ctx.author.id)
local_lb = await self.db.fetch_local_lb(
"week_daily_quests",
ctx.author.id,
[m.id for m in ctx.guild.members if not m.bot],
)

await self._lb_logic(
ctx,
global_lb=global_lb,
local_lb=local_lb,
row_fmt=f"\n`{{}}.` **{{}}** {self.d.emojis.calendar} {{}}",
title=ctx.l.econ.lb.lb_wdq.format(f" {self.d.emojis.calendar} "),
)

@commands.group(name="farm", case_insensitive=True)
@commands.max_concurrency(1, per=commands.BucketType.user, wait=False)
@commands.guild_only()
30 changes: 18 additions & 12 deletions bot/cogs/core/quests.py
Original file line number Diff line number Diff line change
@@ -103,18 +103,21 @@ def get_quest_embed(
completion_percent: float = quest.value / quest.target_value if quest.value else 0
close_to_completion = completion_percent > 0.75

completion_bar = make_progress_bar(
self.d,
completion_percent,
10,
(
"red"
if completion_percent < 0.4
else "purple"
if completion_percent < 0.75
else "green"
),
) + "\n"
completion_bar = (
make_progress_bar(
self.d,
completion_percent,
10,
(
"red"
if completion_percent < 0.4
else "purple"
if completion_percent < 0.75
else "green"
),
)
+ "\n"
)

encouragements = (
lang.econ.daily_quests.encouragements.done
@@ -230,6 +233,9 @@ async def quest_completed(
else:
raise NotImplementedError(f"Couldn't reward item {quest.reward_item} to user {user_id}")

await self.db.update_lb(user_id, "daily_quests", 1)
await self.db.update_lb(user_id, "week_daily_quests", 1)

embed = self.get_quest_embed(loc, quest)
view = DailyQuestDoneView(bot=self.bot, loc=loc, user_id=user_id)
message = await loc.send(embed=embed, view=view)
4 changes: 4 additions & 0 deletions bot/data/text/en.json
Original file line number Diff line number Diff line change
@@ -2106,6 +2106,8 @@
"trash": "Trash Emptied",
"wems": "Weekly Emeralds",
"wcmds": "Weekly Commands",
"dq": "Completed Daily Quests",
"wdq": "Weekly Completed Daily Quests",
"lb_ems": "{0}__**Emerald Leaderboard**__{0}",
"lb_item": "{0}__**{1} Leaderboard**__{0}",
"lb_unique_items": "{0}__**Unique Items Leaderboard**__{0}",
@@ -2118,6 +2120,8 @@
"lb_trash": "{0}__**Trash Emptied Leaderboard**__{0}",
"lb_wems": "{0}__**Weekly Emeralds**__{0}",
"lb_wcmds": "{0}__**Weekly Commands**__{0}",
"lb_dq": "{0}__**Completed Daily Quests**__{0}",
"lb_wdq": "{0}__**Weekly Completed Daily Quests**__{0}",
"no_item_lb": "No leaderboard exists for this item",
"item_lb_stats": "*total of {total_count:,} owned by {user_count:,} different users*"
},
4 changes: 4 additions & 0 deletions bot/data/text/es.json
Original file line number Diff line number Diff line change
@@ -2106,6 +2106,8 @@
"trash": "Basura Tirada",
"wems": "Esmeraldas Semanales",
"wcmds": "Comandos Semanales",
"dq": "Misiones diarias completadas",
"wdq": "Misiones diarias semanales completadas",
"lb_ems": "{0}__**Tabla de clasificación de esmeraldas**__{0}",
"lb_item": "{0}__**Tabla de clasificación de {1}**__{0}",
"lb_unique_items": "{0}__**Tabla de Clasificaciones de Ítems Únicos**__{0}",
@@ -2118,6 +2120,8 @@
"lb_trash": "{0}__**Clasificaciones de basura tirada**__{0}",
"lb_wems": "{0}__**Esmeraldas Semanales**__{0}",
"lb_wcmds": "{0}__**Comandos Semanales**__{0}",
"lb_dq": "{0}__**Misiones diarias completadas**__{0}",
"lb_wdq": "{0}__**Misiones diarias semanales completadas**__{0}",
"no_item_lb": "No existe una clasificacion para ese item",
"item_lb_stats": "*total de {total_count:,} propiedad de {user_count:,} usuarios diferentes*"
},
4 changes: 4 additions & 0 deletions bot/data/text/fr.json
Original file line number Diff line number Diff line change
@@ -2106,6 +2106,8 @@
"trash": "Poubelle vidée",
"wems": "Émeraudes Hebdomadaires",
"wcmds": "Commandes Hebdomadaires",
"dq": "terminé quête de quotidien",
"wdq": "de la semaine terminé quête de quotidien",
"lb_ems": "{0}__**Leaderboard d'émeraudes**__{0}",
"lb_item": "{0}__**Leaderboard des {1}**__{0}",
"lb_unique_items": "{0}__**Unique Items Leaderboard**__{0}",
@@ -2118,6 +2120,8 @@
"lb_trash": "{0}__**Classement des poubelles vidées**__{0}",
"lb_wems": "{0}__**émeraudes Hebdomadaires**__{0}",
"lb_wcmds": "{0}__**Commandes Hebdomadaires**__{0}",
"lb_dq": "{0}__**terminé quête de quotidien**__{0}",
"lb_wdq": "{0}__**de la semaine terminée quête de quotidienne**__{0}",
"no_item_lb": "Il n’y a pas de leaderboard pour cet objet",
"item_lb_stats": "*total de {total_count:,} détenus par {user_count:,} différents utilisateurs*"
},
4 changes: 4 additions & 0 deletions bot/data/text/pt.json
Original file line number Diff line number Diff line change
@@ -2106,6 +2106,8 @@
"trash": "Lixo Esvaziado",
"wems": "Esmeraldas da Semana",
"wcmds": "Comandos Semanais",
"dq": "Missões Diárias Concluídas",
"wdq": "Missões Diárias Semanais Concluídas",
"lb_ems": "{0}__**Tabela de Classificação de Esmeraldas**__{0}",
"lb_item": "{0}__**Tabela de Classificação de {1}**__{0}",
"lb_unique_items": "{0}__**Tabela de Classificação de Itens Exclusivos**__{0}",
@@ -2118,6 +2120,8 @@
"lb_trash": "{0}__**Classificação de Lixo Esvaziado**__{0}",
"lb_wems": "{0}__**Esmeraldas da Semana**__{0}",
"lb_wcmds": "{0}__**Comandos Semanais**__{0}",
"lb_dq": "{0}__**Missões Diárias Concluídas**__{0}",
"lb_wdq": "{0}__**Missões Diárias Semanais Concluídas**__{0}",
"no_item_lb": "Não existe tabela de classificação para esse item",
"item_lb_stats": "*total de {total_count:,} possuídos por {user_count:,} usuários diferentes*"
},
4 changes: 4 additions & 0 deletions bot/models/translation.py
Original file line number Diff line number Diff line change
@@ -723,6 +723,8 @@ class Econ_Lb(ImmutableBaseModel):
trash: str
wems: str
wcmds: str
dq: str
wdq: str
lb_ems: str
lb_item: str
lb_unique_items: str
@@ -735,6 +737,8 @@ class Econ_Lb(ImmutableBaseModel):
lb_trash: str
lb_wems: str
lb_wcmds: str
lb_dq: str
lb_wdq: str
no_item_lb: str
item_lb_stats: str

1 change: 1 addition & 0 deletions common/data/data.json
Original file line number Diff line number Diff line change
@@ -1445,6 +1445,7 @@
"rich_person_trophy": "<:rich_person_trophy:1247339664721969265>",
"fishing_trophy": "<:fishing_trophy:1247339663853879407>",
"slime_trophy": "<:slime_trophy:1247339662146666499>",
"calendar": "<:calendar:1254931644931113063>",
"farming": {
"growing": {
"emerald_fruit": "<:emerald_fruit_growing:927292976756031551>",
1 change: 1 addition & 0 deletions common/models/data.py
Original file line number Diff line number Diff line change
@@ -240,6 +240,7 @@ class ProgressBarSetEmojis(ImmutableBaseModel):
rich_person_trophy: str
fishing_trophy: str
slime_trophy: str
calendar: str
farming: FarmingEmojis
reees: list[str]
fish: FishEmojis
7 changes: 5 additions & 2 deletions karen/karen.py
Original file line number Diff line number Diff line change
@@ -283,8 +283,11 @@ async def loop_remind_reminders(self):
@recurring_task(minutes=30, sleep_first=False)
async def loop_clear_weekly_leaderboards(self):
await self.db.execute(
"UPDATE leaderboards "
"SET week_emeralds = 0, week_commands = 0, week = DATE_TRUNC('WEEK', NOW()) "
"UPDATE leaderboards SET "
"week_emeralds = 0, "
"week_commands = 0, "
"week_daily_quests = 0, "
"week = DATE_TRUNC('WEEK', NOW()) "
"WHERE DATE_TRUNC('WEEK', NOW()) > week",
)

2 changes: 2 additions & 0 deletions setup.sql
Original file line number Diff line number Diff line change
@@ -63,6 +63,8 @@ CREATE TABLE IF NOT EXISTS leaderboards ( -- stores leaderboards which aren't s
trash_emptied BIGINT NOT NULL DEFAULT 0,
week_emeralds BIGINT NOT NULL DEFAULT 0,
week_commands BIGINT NOT NULL DEFAULT 0,
daily_quests INTEGER NOT NULL DEFAULT 0,
week_daily_quests SMALLINT NOT NULL DEFAULT 0,
week TIMESTAMPTZ NOT NULL DEFAULT DATE_TRUNC('WEEK', NOW())
);

0 comments on commit ced0e61

Please sign in to comment.