6
6
7
7
8
8
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
10
10
from aiogram_dialog .widgets .text import Const , Format
11
11
from aiogram_dialog .widgets .input import TextInput , MessageInput
12
12
from aiogram_dialog .api .exceptions import UnknownIntent
13
13
14
- from src .db import Room , User
14
+ from src .db import Room , User , get_room
15
15
16
16
17
17
class ManageDialog (StatesGroup ):
18
18
greeting = State ()
19
19
change_name = State ()
20
20
change_limit = State ()
21
+ delete = State ()
21
22
22
23
23
24
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" ] )
26
27
27
28
return {
28
29
"visibility" : "🌏 public" if room .visibility else "❌ private" ,
@@ -34,8 +35,7 @@ async def getter(dialog_manager: DialogManager, **kwargs) -> dict:
34
35
35
36
async def change_visibility (c : CallbackQuery , _ : Button , manager : DialogManager , ** kwargs ):
36
37
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" ])
39
39
if c .from_user .id != room .owner .user_id :
40
40
return
41
41
@@ -44,10 +44,9 @@ async def change_visibility(c: CallbackQuery, _: Button, manager: DialogManager,
44
44
await c .answer ()
45
45
46
46
47
- async def change_name (m : Message , _ , manager : DialogManager , ** kwargs ):
47
+ async def change_name (m : Message , _ , manager : DialogManager , * args , * *kwargs ):
48
48
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" ])
51
50
if m .from_user .id != room .owner .user_id :
52
51
return
53
52
@@ -62,8 +61,7 @@ async def change_name(m: Message, _, manager: DialogManager, **kwargs):
62
61
63
62
async def change_limit (c : CallbackQuery , _ , manager : DialogManager , ** kwargs ):
64
63
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" ])
67
65
if c .from_user .id != room .owner .user_id :
68
66
return
69
67
counter : Counter = manager .find ("change_limit_counter" )
@@ -75,6 +73,22 @@ async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
75
73
await manager .switch_to (ManageDialog .greeting )
76
74
77
75
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
+
78
92
dialog = Dialog (
79
93
Window (
80
94
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):
92
106
id = "change_limit" ,
93
107
state = ManageDialog .change_limit
94
108
),
109
+ SwitchTo (
110
+ Const ("⚠️ Delete" ),
111
+ id = "delete" ,
112
+ state = ManageDialog .delete
113
+ ),
95
114
Cancel (),
96
115
state = ManageDialog .greeting ,
97
116
getter = getter
@@ -124,6 +143,22 @@ async def change_limit(c: CallbackQuery, _, manager: DialogManager, **kwargs):
124
143
state = ManageDialog .greeting
125
144
),
126
145
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
127
162
)
128
163
)
129
164
0 commit comments