Skip to content

Commit

Permalink
better level keys render
Browse files Browse the repository at this point in the history
  • Loading branch information
bomzheg committed Mar 6, 2025
1 parent 43b20fd commit 0332576
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 deletions.
9 changes: 2 additions & 7 deletions shvatka/tgbot/dialogs/level_manage/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from shvatka.tgbot.views.hint_sender import HintSender
from shvatka.tgbot.views.user import render_small_card_link
from .getters import get_level_and_org, get_org
from ...views.keys import render_level_keys


async def edit_level(c: CallbackQuery, button: Button, manager: DialogManager):
Expand All @@ -43,13 +44,7 @@ async def show_level(c: CallbackQuery, button: Button, manager: DialogManager):


async def show_all_hints(author: dto.Player, hint_sender: HintSender, bot: Bot, level: dto.Level):
keys_text = "Ключи уровня:\n🔑{keys}".format(keys="\n🔑".join(level.get_keys()))
if level.get_bonus_keys():
keys_text += "\n\nБонусные ключи:\n💰{bonus_keys}".format(
bonus_keys="\n💰".join(
[f"{key.text} ({key.bonus_minutes:+.2f}) мин." for key in level.get_bonus_keys()]
)
)
keys_text = f"Ключи уровня:\n{render_level_keys(level.scenario)}"
await bot.send_message(author.get_chat_id(), keys_text)
for hint in level.scenario.time_hints:
await hint_sender.send_hints(
Expand Down
17 changes: 17 additions & 0 deletions shvatka/tgbot/views/keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from telegraph.aio import Telegraph

from shvatka.core.models import dto, enums
from shvatka.core.models.dto import scn
from shvatka.core.services.game_stat import get_typed_keys
from shvatka.core.utils.datetime_utils import tz_game, DATETIME_FORMAT
from shvatka.infrastructure.db.dao.holder import HolderDao
Expand Down Expand Up @@ -81,3 +82,19 @@ async def get_or_create_keys_page(
game.results.keys_url = page["url"]
assert game.results.keys_url is not None
return game.results.keys_url


def render_level_keys(level: scn.LevelScenario) -> str:
text = ""
for c in level.conditions:
text += f"🗝🗝🗝{' -> ' + c.next_level if c.next_level else ''}\n"
for k in c.keys:
text += f"🔑 {k}\n"
if level.get_bonus_keys():
text += "\nБонусные ключи:\n💰 " + "\n💰 ".join(
[
f"{b.text} ({b.bonus_minutes} мин.)"
for b in level.get_bonus_keys()
]
)
return text
11 changes: 2 additions & 9 deletions shvatka/tgbot/views/results/scenario.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from shvatka.core.utils.datetime_utils import DATE_FORMAT
from shvatka.tgbot.config.models.bot import BotConfig
from shvatka.tgbot.views.hint_sender import HintSender
from shvatka.tgbot.views.keys import render_log_keys
from shvatka.tgbot.views.keys import render_log_keys, render_level_keys
from shvatka.tgbot.views.results.level_times import export_results


Expand Down Expand Up @@ -100,15 +100,8 @@ async def publish(self):
if hint.time == 0:
text = (
f"🔒 <b>Уровень № {self.level.number_in_game + 1}</b>\n"
f"Ключи уровня:\n🔑 " + "\n🔑 ".join(self.level.scenario.get_keys())
f"Ключи уровня:\n{render_level_keys(self.level.scenario)}"
)
if self.level.scenario.get_bonus_keys():
text += "\nБонусные ключи:\n💰 " + "\n💰 ".join(
[
f"{b.text} ({b.bonus_minutes} мин.)"
for b in self.level.scenario.get_bonus_keys()
]
)
elif hint_number == len(self.level.scenario.time_hints) - 1:
text = (
f"🔖 Последняя подсказка уровня №{self.level.number_in_game + 1} "
Expand Down

0 comments on commit 0332576

Please sign in to comment.