11from datetime import date , datetime
2+ from typing import Any
23
34from aiogram .exceptions import TelegramBadRequest
45from aiogram .types import CallbackQuery , Message
56from aiogram_dialog import DialogManager , ShowMode
67from aiogram_dialog .widgets .input import MessageInput
78from aiogram_dialog .widgets .kbd import Button
89
10+ from src .bot .dto import *
911from src .bot .scheduling import update_meeting_schedule
1012from src .bot .utils import *
11- from src .db .repositories import meetings_repo
13+ from src .db .repositories import meetings_repo , tutors_repo
1214
1315from .getters import *
1416from .keyboards import *
@@ -108,9 +110,14 @@ async def get_assigned_tutor(message: Message, _: MessageInput, dialog_manager:
108110
109111
110112async def get_meeting_title (message : Message , _ : MessageInput , dialog_manager : DialogManager ):
113+ await clear_messages (dialog_manager )
114+ await message .delete ()
111115 state = get_state (dialog_manager )
116+
112117 if not message .text :
113- raise ValueError ("No message.text" )
118+ to_delete = await message .answer ("There is no text in your message" )
119+ await track_message (to_delete , dialog_manager )
120+ return await dialog_manager .switch_to (ChangeStates .title , show_mode = ShowMode .DELETE_AND_SEND )
114121
115122 meeting = dto_to_meeting (await state .get_value ("meeting" ))
116123 if not meeting :
@@ -120,15 +127,19 @@ async def get_meeting_title(message: Message, _: MessageInput, dialog_manager: D
120127 await meetings_repo .save (meeting )
121128
122129 await state .update_data ({"meeting" : meeting_to_dto (meeting )})
123- await message .delete ()
124130 await dialog_manager .switch_to (state = ChangeStates .init , show_mode = ShowMode .DELETE_AND_SEND )
125131
126132
127133async def get_meeting_description (message : Message , _ : MessageInput , dialog_manager : DialogManager ):
134+ await clear_messages (dialog_manager )
135+ await message .delete ()
136+
128137 state = get_state (dialog_manager )
129138
130139 if not message .text :
131- raise ValueError ("message.text is None" )
140+ to_delete = await message .answer ("There is no text in your message" )
141+ await track_message (to_delete , dialog_manager )
142+ return await dialog_manager .switch_to (ChangeStates .description , show_mode = ShowMode .DELETE_AND_SEND )
132143
133144 meeting = dto_to_meeting (await state .get_value ("meeting" ))
134145 if not meeting :
@@ -138,7 +149,6 @@ async def get_meeting_description(message: Message, _: MessageInput, dialog_mana
138149 await meetings_repo .save (meeting )
139150
140151 await state .update_data ({"meeting" : meeting_to_dto (meeting )})
141- await message .delete ()
142152 await dialog_manager .switch_to (state = ChangeStates .init , show_mode = ShowMode .DELETE_AND_SEND )
143153
144154
@@ -158,7 +168,9 @@ async def get_meeting_time(message: Message, _: MessageInput, dialog_manager: Di
158168 await message .delete ()
159169
160170 if not message .text :
161- raise ValueError ("No message.text" )
171+ to_delete = await message .answer ("There is no text in your message" )
172+ await track_message (to_delete , dialog_manager )
173+ return await dialog_manager .switch_to (ChangeStates .time , show_mode = ShowMode .DELETE_AND_SEND )
162174
163175 try :
164176 selected_time = parse_time (message .text )
@@ -190,7 +202,7 @@ async def get_meeting_time(message: Message, _: MessageInput, dialog_manager: Di
190202
191203 if (datetime_obj - datetime .now ()).days < 1 :
192204 await message .answer (
193- text = ("Warning ⚠️\n " "The meeting would be conducted in less than 24H\n " ), reply_markup = DELETE_WARNING_KB
205+ text = ("Warning ⚠️\n The meeting would be conducted in less than 24H\n " ), reply_markup = DELETE_WARNING_KB
194206 )
195207
196208 await dialog_manager .switch_to (state = ChangeStates .init )
@@ -201,7 +213,9 @@ async def get_meeting_duration(message: Message, _: MessageInput, dialog_manager
201213 await message .delete ()
202214
203215 if not message .text :
204- raise ValueError ("message.text is None" )
216+ to_delete = await message .answer ("There is no text in your message" )
217+ await track_message (to_delete , dialog_manager )
218+ return await dialog_manager .switch_to (ChangeStates .duration , show_mode = ShowMode .DELETE_AND_SEND )
205219
206220 try :
207221 selected_time = parse_time (message .text )
@@ -292,3 +306,29 @@ async def on_tutor_assign(query: CallbackQuery, widget: Any, dialog_manager: Dia
292306
293307 except Exception as e :
294308 return await query .answer (f"Unknown Error: { e } " , show_alert = True )
309+
310+
311+ async def get_meeting_room (message : Message , _ : MessageInput , dialog_manager : DialogManager ):
312+ state = get_state (dialog_manager )
313+ await clear_messages (dialog_manager )
314+ await message .delete ()
315+
316+ if not message .text :
317+ to_delete = await message .answer ("There is no text in your message" )
318+ await track_message (to_delete , dialog_manager )
319+ return await dialog_manager .switch_to (ChangeStates .room , show_mode = ShowMode .DELETE_AND_SEND )
320+
321+ if len (message .text ) > 64 :
322+ to_delete = await message .answer ("Length must not be more than 64 simbols" )
323+ await track_message (to_delete , dialog_manager )
324+ return await dialog_manager .switch_to (ChangeStates .room , show_mode = ShowMode .DELETE_AND_SEND )
325+
326+ meeting = dto_to_meeting (await state .get_value ("meeting" ))
327+ if not meeting :
328+ raise ValueError ("No meeting" )
329+
330+ meeting .room = message .text
331+ await meetings_repo .save (meeting )
332+
333+ await state .update_data ({"meeting" : meeting_to_dto (meeting )})
334+ await dialog_manager .switch_to (state = ChangeStates .init , show_mode = ShowMode .DELETE_AND_SEND )
0 commit comments