From 98c277028e0ac7ffea02b6293677bbb9b1c9cfca Mon Sep 17 00:00:00 2001 From: "@m.danilin" Date: Wed, 14 Jan 2026 12:52:47 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B5=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8E=20admin=20=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/models/invitation.py | 2 +- db/models/participation.py | 2 +- handlers/admin/campaign_list.py | 54 +++++++++++++++++++------- handlers/admin/campaign_manage.py | 2 +- handlers/admin/character_management.py | 2 +- handlers/admin/create_campaign.py | 2 +- handlers/admin/edit_campaign.py | 2 +- handlers/admin/invitation.py | 2 +- handlers/admin/manage_master.py | 2 +- services/campaigns.py | 2 +- services/invitation.py | 2 +- utils/enums.py | 14 +++++++ utils/invitation.py | 2 +- utils/role.py | 7 ---- 14 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 utils/enums.py delete mode 100644 utils/role.py diff --git a/db/models/invitation.py b/db/models/invitation.py index a9fcba0..272ef47 100644 --- a/db/models/invitation.py +++ b/db/models/invitation.py @@ -4,7 +4,7 @@ from tortoise.fields import OnDelete from db.models.base import TimestampedModel, UuidModel -from utils.role import Role +from utils.enums import Role class Invitation(TimestampedModel, UuidModel): diff --git a/db/models/participation.py b/db/models/participation.py index 9b2f968..73b175a 100644 --- a/db/models/participation.py +++ b/db/models/participation.py @@ -1,6 +1,6 @@ from tortoise import fields -from utils.role import Role +from utils.enums import Role from .base import TimestampedModel, UuidModel diff --git a/handlers/admin/campaign_list.py b/handlers/admin/campaign_list.py index a5af689..3cb4dae 100644 --- a/handlers/admin/campaign_list.py +++ b/handlers/admin/campaign_list.py @@ -5,10 +5,11 @@ from aiogram import Router from aiogram.types import CallbackQuery from aiogram_dialog import Dialog, DialogManager, Window -from aiogram_dialog.widgets.kbd import Button, ScrollingGroup, Select, Start +from aiogram_dialog.widgets.kbd import Button, Row, ScrollingGroup, Select from aiogram_dialog.widgets.text import Const, Format from db.models.participation import Participation +from utils.enums import Mode from utils.redirect import redirect from . import states @@ -22,8 +23,24 @@ # === Гетеры === async def get_campaigns_data(dialog_manager: DialogManager, **kwargs): user: User = dialog_manager.middleware_data["user"] - campaigns = await Participation.filter(user=user).prefetch_related("campaign").all() - return {"campaigns": campaigns, "is_admin": user.admin, "has_campaigns": len(campaigns) > 0} + if "current_mode" not in dialog_manager.dialog_data: + value = Mode.Base + if user.admin: + value = Mode.Academy + dialog_manager.dialog_data["current_mode"] = value + + campaigns = ( + await Participation.filter(user=user) + .prefetch_related("campaign") + .filter(campaign__verified=dialog_manager.dialog_data["current_mode"] == Mode.Academy) + .all() + ) + return { + "campaigns": campaigns, + "is_admin": user.admin, + "has_campaigns": len(campaigns) > 0, + "view_mode": f"(режим {dialog_manager.dialog_data['current_mode']})" if user.admin else "", + } # === Кнопки === @@ -43,9 +60,20 @@ async def on_campaign_selected( ) +async def on_crete_campaign(msg: CallbackQuery, wdg: Button, mng: DialogManager): + await mng.start( + state=states.CreateCampaign.select_title, data={"verified": mng.dialog_data.get("mode") == Mode.Academy} + ) + + +async def on_change_mode(msg: CallbackQuery, wdg: Button, mng: DialogManager): + mng.dialog_data["current_mode"] = Mode.Academy if mng.dialog_data.get("current_mode") == Mode.Base else Mode.Base + await mng.show() + + # === Окна === campaign_list_window = Window( - Const("🏰 Ваши кампании\n\n"), + Format("🏰 Ваши кампании {view_mode}\n\n"), Const( "У вас пока нет доступных кампаний", when=lambda data, widget, dialog_manager: not data.get("has_campaigns", False), @@ -64,16 +92,14 @@ async def on_campaign_selected( height=5, id="campaigns", ), - Start( - Const("➕ Создать новую"), - id="create_campaign", - state=states.CreateCampaign.select_title, - ), - Button( - Const("➕ Создать новую (Для академии)"), - id="create_verified_campaign", - on_click=lambda c, b, d: d.start(states.CreateCampaign.select_title, data={"verified": True}), - when="is_admin", + Row( + Button( + Const("➕ Создать новую"), + id="create_verified_campaign", + on_click=on_crete_campaign, + when="is_admin", + ), + Button(Const("🔀 Сменить режим"), id="change_mode", on_click=on_change_mode), ), state=states.CampaignList.main, getter=get_campaigns_data, diff --git a/handlers/admin/campaign_manage.py b/handlers/admin/campaign_manage.py index 370fcee..63d041f 100644 --- a/handlers/admin/campaign_manage.py +++ b/handlers/admin/campaign_manage.py @@ -12,7 +12,7 @@ from db.models.campaign import Campaign from db.models.participation import Participation -from utils.role import Role +from utils.enums import Role from . import states diff --git a/handlers/admin/character_management.py b/handlers/admin/character_management.py index ee35e47..5219566 100644 --- a/handlers/admin/character_management.py +++ b/handlers/admin/character_management.py @@ -30,7 +30,7 @@ from services.settings import settings from utils.character import CharacterData as CharData from utils.character import parse_character_data -from utils.role import Role +from utils.enums import Role from . import states diff --git a/handlers/admin/create_campaign.py b/handlers/admin/create_campaign.py index 20dc3e1..27fb8c1 100644 --- a/handlers/admin/create_campaign.py +++ b/handlers/admin/create_campaign.py @@ -16,7 +16,7 @@ from db.models.campaign import Campaign from db.models.participation import Participation from services.settings import settings -from utils.role import Role +from utils.enums import Role from . import states diff --git a/handlers/admin/edit_campaign.py b/handlers/admin/edit_campaign.py index 2b2d9d8..c41e32f 100644 --- a/handlers/admin/edit_campaign.py +++ b/handlers/admin/edit_campaign.py @@ -14,7 +14,7 @@ from db.models.campaign import Campaign from db.models.participation import Participation from services.settings import settings -from utils.role import Role +from utils.enums import Role from . import states diff --git a/handlers/admin/invitation.py b/handlers/admin/invitation.py index 38806e5..92a979c 100644 --- a/handlers/admin/invitation.py +++ b/handlers/admin/invitation.py @@ -17,7 +17,7 @@ from services.invitation import handle_accept_invitation, invitation_getter from services.settings import settings from utils.invitation import generate_link, generate_qr -from utils.role import Role +from utils.enums import Role from . import states diff --git a/handlers/admin/manage_master.py b/handlers/admin/manage_master.py index ee6b7b9..cf70914 100644 --- a/handlers/admin/manage_master.py +++ b/handlers/admin/manage_master.py @@ -17,7 +17,7 @@ from db.models.campaign import Campaign from db.models.participation import Participation from services.settings import settings -from utils.role import Role +from utils.enums import Role from . import states diff --git a/services/campaigns.py b/services/campaigns.py index 3b46571..18479a2 100644 --- a/services/campaigns.py +++ b/services/campaigns.py @@ -3,7 +3,7 @@ from aiogram_dialog.api.entities import MediaAttachment from db.models import Campaign, Participation -from utils.role import Role +from utils.enums import Role async def campaign_getter(dialog_manager: DialogManager, **kwargs): diff --git a/services/invitation.py b/services/invitation.py index c150b2b..e367a3d 100644 --- a/services/invitation.py +++ b/services/invitation.py @@ -5,7 +5,7 @@ from db.models import Invitation, Participation, User from utils.invitation import get_invite_id -from utils.role import Role +from utils.enums import Role from .settings import settings diff --git a/utils/enums.py b/utils/enums.py new file mode 100644 index 0000000..75299a1 --- /dev/null +++ b/utils/enums.py @@ -0,0 +1,14 @@ +import enum + + +class Role(enum.IntEnum): + PLAYER = 0 + MASTER = 1 + OWNER = 2 + + +class Mode(enum.StrEnum): + """Режим работы основного меня admin бота""" + + Base = "Базовый" + Academy = "Академия" diff --git a/utils/invitation.py b/utils/invitation.py index 02aa0e2..7a0f0a8 100644 --- a/utils/invitation.py +++ b/utils/invitation.py @@ -9,7 +9,7 @@ from db.models import Invitation from services.settings import settings -from utils.role import Role +from utils.enums import Role async def generate_link(invitation: Invitation) -> str: diff --git a/utils/role.py b/utils/role.py deleted file mode 100644 index 5b32c5d..0000000 --- a/utils/role.py +++ /dev/null @@ -1,7 +0,0 @@ -import enum - - -class Role(enum.IntEnum): - PLAYER = 0 - MASTER = 1 - OWNER = 2 From 071513c50c4b1a6113eee9ef0001e5c708fe8a89 Mon Sep 17 00:00:00 2001 From: "@m.danilin" Date: Wed, 14 Jan 2026 13:41:16 +0300 Subject: [PATCH 2/3] ruff --- handlers/admin/invitation.py | 2 +- services/invitation.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/handlers/admin/invitation.py b/handlers/admin/invitation.py index 92a979c..6f10b6b 100644 --- a/handlers/admin/invitation.py +++ b/handlers/admin/invitation.py @@ -16,8 +16,8 @@ from db.models.user import User from services.invitation import handle_accept_invitation, invitation_getter from services.settings import settings -from utils.invitation import generate_link, generate_qr from utils.enums import Role +from utils.invitation import generate_link, generate_qr from . import states diff --git a/services/invitation.py b/services/invitation.py index e367a3d..7d51760 100644 --- a/services/invitation.py +++ b/services/invitation.py @@ -4,8 +4,8 @@ from aiogram_dialog import DialogManager from db.models import Invitation, Participation, User -from utils.invitation import get_invite_id from utils.enums import Role +from utils.invitation import get_invite_id from .settings import settings From c4cd19ced89875b1278080f668ad02f9d5909e9c Mon Sep 17 00:00:00 2001 From: "@m.danilin" Date: Wed, 14 Jan 2026 17:10:53 +0300 Subject: [PATCH 3/3] hot hix --- handlers/admin/campaign_list.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/handlers/admin/campaign_list.py b/handlers/admin/campaign_list.py index 3cb4dae..af3fb49 100644 --- a/handlers/admin/campaign_list.py +++ b/handlers/admin/campaign_list.py @@ -97,9 +97,13 @@ async def on_change_mode(msg: CallbackQuery, wdg: Button, mng: DialogManager): Const("➕ Создать новую"), id="create_verified_campaign", on_click=on_crete_campaign, + ), + Button( + Const("🔀 Сменить режим"), + id="change_mode", + on_click=on_change_mode, when="is_admin", ), - Button(Const("🔀 Сменить режим"), id="change_mode", on_click=on_change_mode), ), state=states.CampaignList.main, getter=get_campaigns_data,