Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion handlers/player/other_games.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from db.models import Campaign, Character, Participation, User
from states.other_games import OtherGames
from states.other_games_campaign import OtherGamesCampaign
from states.other_games_character import OtherGamesCharacter
from utils.character import CharacterData, parse_character_data

router = Router()
Expand Down Expand Up @@ -45,7 +46,12 @@ async def available_campaigns_getter(dialog_manager: DialogManager, **kwargs) ->


async def on_character_selected(c: CallbackQuery, b: Button, m: DialogManager, character_id: UUID):
pass
await m.start(
OtherGamesCharacter.preview,
data={
"character_id": character_id,
},
)


async def on_available_games(c: CallbackQuery, b: Button, m: DialogManager):
Expand Down
51 changes: 51 additions & 0 deletions handlers/player/other_games_character.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import json

from aiogram import Router
from aiogram.types import CallbackQuery
from aiogram_dialog import Dialog, DialogManager, Window
from aiogram_dialog.widgets.kbd import Button, Cancel
from aiogram_dialog.widgets.media import DynamicMedia
from aiogram_dialog.widgets.text import Const, Format

from db.models import Campaign, Character, Participation, User
from services.character_data import character_preview_getter
from states.other_games_campaign import OtherGamesCampaign
from states.other_games_character import OtherGamesCharacter

router = Router()


async def character_data_getter(dialog_manager: DialogManager, **kwargs) -> dict:
character = await Character.get(id=dialog_manager.start_data["character_id"])
data = json.loads(character.data["data"])

return character_preview_getter(character, data)


async def on_campaign_info(c: CallbackQuery, b: Button, m: DialogManager):
user: User = m.middleware_data["user"]
character = await Character.get(id=m.start_data["character_id"]).prefetch_related("campaign")
campaign: Campaign = character.campaign
participation = await Participation.get(user=user, campaign=campaign)
await m.start(
OtherGamesCampaign.preview,
data={
**m.start_data,
"campaign_id": campaign.id,
"participation_id": participation.id,
},
)


router.include_router(
Dialog(
Window(
DynamicMedia("avatar", when="avatar"),
Format("{character_data_preview}", when="character_data_preview"),
Button(Const("Информация о кампании"), id="campaign_info", on_click=on_campaign_info),
Cancel(Const("Назад")),
getter=character_data_getter,
state=OtherGamesCharacter.preview,
)
)
)
3 changes: 1 addition & 2 deletions services/character_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from aiogram.enums import ContentType
from aiogram_dialog.api.entities import MediaAttachment

from db.models import User
from db.models.base import CharacterData as BaseCharacterData
from utils.character import CharacterData, parse_character_data

Expand All @@ -15,7 +14,7 @@ async def update_char_data(holder: BaseCharacterData, data: dict):
await holder.save()


def character_preview_getter(user: User, data: dict):
def character_preview_getter(user: BaseCharacterData, data: dict):
ret = {}
info: CharacterData = parse_character_data(data)
ret["character_data_preview"] = info.preview()
Expand Down
5 changes: 5 additions & 0 deletions states/other_games_character.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from aiogram.fsm.state import State, StatesGroup


class OtherGamesCharacter(StatesGroup):
preview = State()