Skip to content

Commit de95ec3

Browse files
committed
🛠 0.3 Better management
1 parent f7754f2 commit de95ec3

File tree

5 files changed

+55
-15
lines changed

5 files changed

+55
-15
lines changed

src/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = (0, 2)
1+
version = (0, 3)

src/db/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
from .models import User, Room
2-
from .requests import get_user
2+
from .requests import get_user, get_room

src/db/requests.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
from .models import User
1+
from beanie import PydanticObjectId
2+
from .models import User, Room
23

34

45
async def get_user(user_id: int):
56
return await User.find_one(User.user_id == user_id, fetch_links=True)
7+
8+
9+
async def get_room(room_id: PydanticObjectId):
10+
return await Room.get(room_id, fetch_links=True)

src/dialogs/manage.py

+46-11
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,24 @@
66

77

88
from aiogram_dialog import Dialog, DialogManager, Window
9-
from aiogram_dialog.widgets.kbd import Button, Next, Cancel, Back, SwitchTo, Counter
9+
from aiogram_dialog.widgets.kbd import Button, Next, Cancel, Back, SwitchTo, Counter, Row
1010
from aiogram_dialog.widgets.text import Const, Format
1111
from aiogram_dialog.widgets.input import TextInput, MessageInput
1212
from aiogram_dialog.api.exceptions import UnknownIntent
1313

14-
from src.db import Room, User
14+
from src.db import Room, User, get_room
1515

1616

1717
class ManageDialog(StatesGroup):
1818
greeting = State()
1919
change_name = State()
2020
change_limit = State()
21+
delete = State()
2122

2223

2324
async def getter(dialog_manager: DialogManager, **kwargs) -> dict:
24-
with suppress(Exception):
25-
room: Room = await Room.get(kwargs["user"].current_room)
25+
with suppress(TypeError):
26+
room: Room = await get_room(dialog_manager.start_data["room_id"])
2627

2728
return {
2829
"visibility": "🌏 public" if room.visibility else "❌ private",
@@ -34,8 +35,7 @@ async def getter(dialog_manager: DialogManager, **kwargs) -> dict:
3435

3536
async def change_visibility(c: CallbackQuery, _: Button, manager: DialogManager, **kwargs):
3637
with suppress(TypeError):
37-
user: User = kwargs["user"]
38-
room: Room = await Room.get(user.current_room)
38+
room: Room = await get_room(manager.start_data["room_id"])
3939
if c.from_user.id != room.owner.user_id:
4040
return
4141

@@ -44,10 +44,9 @@ async def change_visibility(c: CallbackQuery, _: Button, manager: DialogManager,
4444
await c.answer()
4545

4646

47-
async def change_name(m: Message, _, manager: DialogManager, **kwargs):
47+
async def change_name(m: Message, _, manager: DialogManager, *args, **kwargs):
4848
with suppress(TypeError):
49-
user: User = kwargs["user"]
50-
room: Room = await Room.get(user.current_room)
49+
room: Room = await get_room(manager.start_data["room_id"])
5150
if m.from_user.id != room.owner.user_id:
5251
return
5352

@@ -62,8 +61,7 @@ async def change_name(m: Message, _, manager: DialogManager, **kwargs):
6261

6362
async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
6463
with suppress(TypeError):
65-
user: User = kwargs["user"]
66-
room: Room = await Room.get(user.current_room)
64+
room: Room = await get_room(manager.start_data["room_id"])
6765
if c.from_user.id != room.owner.user_id:
6866
return
6967
counter: Counter = manager.find("change_limit_counter")
@@ -75,6 +73,22 @@ async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
7573
await manager.switch_to(ManageDialog.greeting)
7674

7775

76+
async def delete_room(c: CallbackQuery, _, manager: DialogManager, **kwargs):
77+
with suppress(TypeError):
78+
room: Room = await get_room(manager.start_data["room_id"])
79+
if c.from_user.id != room.owner.user_id:
80+
return
81+
82+
await room.send("This room has been deleted by owner", c.bot, not_to_user_id=c.from_user.id)
83+
for user in room.users:
84+
user.current_room = None
85+
await user.save()
86+
await room.delete()
87+
88+
await c.answer("Room successfully deleted!", True)
89+
await manager.done()
90+
91+
7892
dialog = Dialog(
7993
Window(
8094
Format("<b>📎 Managing group {name}</b>\n<i>Total {users} users</i>\n<i>Limit: {limit}</i>"),
@@ -92,6 +106,11 @@ async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
92106
id="change_limit",
93107
state=ManageDialog.change_limit
94108
),
109+
SwitchTo(
110+
Const("⚠️ Delete"),
111+
id="delete",
112+
state=ManageDialog.delete
113+
),
95114
Cancel(),
96115
state=ManageDialog.greeting,
97116
getter=getter
@@ -124,6 +143,22 @@ async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
124143
state=ManageDialog.greeting
125144
),
126145
state=ManageDialog.change_limit
146+
),
147+
Window(
148+
Const("⚠️ <b>Are you sure you want to delete this room?</b>"),
149+
Row(
150+
Button(
151+
Const("yes"),
152+
id="delete_yes",
153+
on_click=delete_room
154+
),
155+
SwitchTo(
156+
Const("no"),
157+
id="delete_no",
158+
state=ManageDialog.greeting,
159+
)
160+
),
161+
state=ManageDialog.delete
127162
)
128163
)
129164

src/handlers/manage.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async def manage_cmd(message: Message, dialog_manager: DialogManager, user: User
2727
await message.answer("<b><i>You aren't owner of this room!</i></b>")
2828
return
2929

30-
await dialog_manager.start(ManageDialog.greeting, data={"user_id": user.user_id})
30+
await dialog_manager.start(ManageDialog.greeting, data={"user_id": user.user_id, "room_id": room.id}, mode=StartMode.RESET_STACK)
3131

3232

3333
@router.errors(ExceptionTypeFilter(UnknownState))

0 commit comments

Comments
 (0)