Skip to content

Commit 1dc2ec2

Browse files
authored
Система режимов для разделения работы с академией и базовыми режимами (#35)
* Обновил оновное меню admin бота * ruff * hot hix
1 parent a127458 commit 1dc2ec2

File tree

14 files changed

+69
-32
lines changed

14 files changed

+69
-32
lines changed

db/models/invitation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from tortoise.fields import OnDelete
55

66
from db.models.base import TimestampedModel, UuidModel
7-
from utils.role import Role
7+
from utils.enums import Role
88

99

1010
class Invitation(TimestampedModel, UuidModel):

db/models/participation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from tortoise import fields
22

3-
from utils.role import Role
3+
from utils.enums import Role
44

55
from .base import TimestampedModel, UuidModel
66

handlers/admin/campaign_list.py

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
from aiogram import Router
66
from aiogram.types import CallbackQuery
77
from aiogram_dialog import Dialog, DialogManager, Window
8-
from aiogram_dialog.widgets.kbd import Button, ScrollingGroup, Select, Start
8+
from aiogram_dialog.widgets.kbd import Button, Row, ScrollingGroup, Select
99
from aiogram_dialog.widgets.text import Const, Format
1010

1111
from db.models.participation import Participation
12+
from utils.enums import Mode
1213
from utils.redirect import redirect
1314

1415
from . import states
@@ -22,8 +23,24 @@
2223
# === Гетеры ===
2324
async def get_campaigns_data(dialog_manager: DialogManager, **kwargs):
2425
user: User = dialog_manager.middleware_data["user"]
25-
campaigns = await Participation.filter(user=user).prefetch_related("campaign").all()
26-
return {"campaigns": campaigns, "is_admin": user.admin, "has_campaigns": len(campaigns) > 0}
26+
if "current_mode" not in dialog_manager.dialog_data:
27+
value = Mode.Base
28+
if user.admin:
29+
value = Mode.Academy
30+
dialog_manager.dialog_data["current_mode"] = value
31+
32+
campaigns = (
33+
await Participation.filter(user=user)
34+
.prefetch_related("campaign")
35+
.filter(campaign__verified=dialog_manager.dialog_data["current_mode"] == Mode.Academy)
36+
.all()
37+
)
38+
return {
39+
"campaigns": campaigns,
40+
"is_admin": user.admin,
41+
"has_campaigns": len(campaigns) > 0,
42+
"view_mode": f"(режим {dialog_manager.dialog_data['current_mode']})" if user.admin else "",
43+
}
2744

2845

2946
# === Кнопки ===
@@ -43,9 +60,20 @@ async def on_campaign_selected(
4360
)
4461

4562

63+
async def on_crete_campaign(msg: CallbackQuery, wdg: Button, mng: DialogManager):
64+
await mng.start(
65+
state=states.CreateCampaign.select_title, data={"verified": mng.dialog_data.get("mode") == Mode.Academy}
66+
)
67+
68+
69+
async def on_change_mode(msg: CallbackQuery, wdg: Button, mng: DialogManager):
70+
mng.dialog_data["current_mode"] = Mode.Academy if mng.dialog_data.get("current_mode") == Mode.Base else Mode.Base
71+
await mng.show()
72+
73+
4674
# === Окна ===
4775
campaign_list_window = Window(
48-
Const("🏰 Ваши кампании\n\n"),
76+
Format("🏰 Ваши кампании {view_mode}\n\n"),
4977
Const(
5078
"У вас пока нет доступных кампаний",
5179
when=lambda data, widget, dialog_manager: not data.get("has_campaigns", False),
@@ -64,16 +92,18 @@ async def on_campaign_selected(
6492
height=5,
6593
id="campaigns",
6694
),
67-
Start(
68-
Const("➕ Создать новую"),
69-
id="create_campaign",
70-
state=states.CreateCampaign.select_title,
71-
),
72-
Button(
73-
Const("➕ Создать новую (Для академии)"),
74-
id="create_verified_campaign",
75-
on_click=lambda c, b, d: d.start(states.CreateCampaign.select_title, data={"verified": True}),
76-
when="is_admin",
95+
Row(
96+
Button(
97+
Const("➕ Создать новую"),
98+
id="create_verified_campaign",
99+
on_click=on_crete_campaign,
100+
),
101+
Button(
102+
Const("🔀 Сменить режим"),
103+
id="change_mode",
104+
on_click=on_change_mode,
105+
when="is_admin",
106+
),
77107
),
78108
state=states.CampaignList.main,
79109
getter=get_campaigns_data,

handlers/admin/campaign_manage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from db.models.campaign import Campaign
1414
from db.models.participation import Participation
15-
from utils.role import Role
15+
from utils.enums import Role
1616

1717
from . import states
1818

handlers/admin/character_management.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from services.settings import settings
3131
from utils.character import CharacterData as CharData
3232
from utils.character import parse_character_data
33-
from utils.role import Role
33+
from utils.enums import Role
3434

3535
from . import states
3636

handlers/admin/create_campaign.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from db.models.campaign import Campaign
1717
from db.models.participation import Participation
1818
from services.settings import settings
19-
from utils.role import Role
19+
from utils.enums import Role
2020

2121
from . import states
2222

handlers/admin/edit_campaign.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from db.models.campaign import Campaign
1515
from db.models.participation import Participation
1616
from services.settings import settings
17-
from utils.role import Role
17+
from utils.enums import Role
1818

1919
from . import states
2020

handlers/admin/invitation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
from db.models.user import User
1717
from services.invitation import handle_accept_invitation, invitation_getter
1818
from services.settings import settings
19+
from utils.enums import Role
1920
from utils.invitation import generate_link, generate_qr
20-
from utils.role import Role
2121

2222
from . import states
2323

handlers/admin/manage_master.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from db.models.campaign import Campaign
1818
from db.models.participation import Participation
1919
from services.settings import settings
20-
from utils.role import Role
20+
from utils.enums import Role
2121

2222
from . import states
2323

services/campaigns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from aiogram_dialog.api.entities import MediaAttachment
44

55
from db.models import Campaign, Participation
6-
from utils.role import Role
6+
from utils.enums import Role
77

88

99
async def campaign_getter(dialog_manager: DialogManager, **kwargs):

0 commit comments

Comments
 (0)