Skip to content

Commit af4ce01

Browse files
committed
feat: room data in meeting_change
1 parent 7e3b976 commit af4ce01

File tree

5 files changed

+65
-8
lines changed

5 files changed

+65
-8
lines changed

src/bot/dialogs/change_meeting/getters.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from aiogram_dialog import DialogManager
22

3+
from src.bot.dialogs.meetings.getters import meeting_info_getter
34
from src.bot.dto import *
45
from src.bot.filters import *
56
from src.bot.utils import *
@@ -23,3 +24,6 @@ async def meeting_info_with_tutors_getter(dialog_manager: DialogManager, **kwarg
2324
"tutor_username": meeting.tutor.username if meeting.tutor else None,
2425
"tutors": list(enumerate(tutors)),
2526
}
27+
28+
29+
__all__ = ["meeting_info_getter", "meeting_info_with_tutors_getter"]

src/bot/dialogs/change_meeting/handles.py

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from datetime import date, datetime
2+
from typing import Any
23

34
from aiogram.exceptions import TelegramBadRequest
45
from aiogram.types import CallbackQuery, Message
56
from aiogram_dialog import DialogManager, ShowMode
67
from aiogram_dialog.widgets.input import MessageInput
78
from aiogram_dialog.widgets.kbd import Button
89

10+
from src.bot.dto import *
911
from src.bot.scheduling import update_meeting_schedule
1012
from src.bot.utils import *
11-
from src.db.repositories import meetings_repo
13+
from src.db.repositories import meetings_repo, tutors_repo
1214

1315
from .getters import *
1416
from .keyboards import *
@@ -108,9 +110,14 @@ async def get_assigned_tutor(message: Message, _: MessageInput, dialog_manager:
108110

109111

110112
async 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

127133
async 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 ⚠️\nThe 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)

src/bot/dialogs/change_meeting/states.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class ChangeStates(StatesGroup):
55
init = State()
66
title = State()
77
description = State()
8+
room = State()
89
date = State()
910
time = State()
1011
duration = State()

src/bot/dialogs/change_meeting/windows.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
Format("Date: {date}"),
1919
Format("Duration: {duration}"),
2020
Format("Tutor: @{tutor_username}"),
21+
Format("Room: {room}"),
2122
Format("Description: {description}", when="description"),
2223
Column(
2324
SwitchTo(Const("Set Title"), id="change_title", state=ChangeStates.title),
2425
SwitchTo(Const("Set Description"), id="set_description", state=ChangeStates.description),
26+
SwitchTo(Const("Set Room"), id="set_room", state=ChangeStates.room),
2527
SwitchTo(Const("Set Date"), id="choose_date", state=ChangeStates.date),
2628
SwitchTo(Const("Set Duration"), id="choose_duration", state=ChangeStates.duration),
2729
SwitchTo(
@@ -56,6 +58,15 @@
5658
)
5759

5860

61+
set_room_ww = Window(
62+
Format('Enter new Room for "{title}"'),
63+
Row(BTN_INIT, BTN_BLANK),
64+
MessageInput(get_meeting_room),
65+
state=ChangeStates.room,
66+
getter=meeting_info_getter,
67+
)
68+
69+
5970
set_date_ww = Window(
6071
Format('Enter new Date for "{title}"'),
6172
Calendar(id="set_date_calendar", on_click=on_date_selected), # type: ignore

src/bot/dialogs/meetings/getters.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ async def meeting_info_getter(dialog_manager: DialogManager, **kwargs):
6969
"status": meeting.status,
7070
"date": meeting.date_human,
7171
"duration": meeting.duration_human,
72+
"room": meeting.room if meeting.room else "---",
7273
"attendance_count": len(meeting.attendance) if meeting.attendance else None,
7374
"tutor_username": meeting.tutor.username if meeting.tutor else None,
7475
"can_be_changed": is_authorized and meeting.status < MeetingStatus.CLOSED,

0 commit comments

Comments
 (0)