Skip to content

Commit d51217c

Browse files
authored
Merge pull request #27 from gnatykdm/Settings-Configuration
Settings-Configuration[Evening-Routine-Logic]
2 parents 27292a0 + 4a55b8e commit d51217c

File tree

5 files changed

+128
-38
lines changed

5 files changed

+128
-38
lines changed

β€Žtelegram_bot_project/bot/buttons.pyβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,12 @@ def morning_routine_keyboard() -> ReplyKeyboardMarkup:
121121
drop_btn = KeyboardButton(text=MORNING_ROUTINE_DELETE_BTN)
122122
all_btn = KeyboardButton(text=MY_MORNING_ROUTINE_BTN)
123123
settings_btn = KeyboardButton(text=BUTTON_SETTINGS)
124+
evening_switch_btn = KeyboardButton(text=ROUTINE_EVENING_VIEW)
124125

125126
keyboard = [
126127
[add_btn, edit_btn],
127128
[drop_btn, all_btn],
129+
[evening_switch_btn],
128130
[settings_btn]
129131
]
130132

@@ -141,10 +143,12 @@ def evening_routine_keyboard() -> ReplyKeyboardMarkup:
141143
drop_btn = KeyboardButton(text=EVENING_ROUTINE_DELETE_BTN)
142144
all_btn = KeyboardButton(text=MY_EVENING_ROUTINE_BTN)
143145
settings_btn = KeyboardButton(text=BUTTON_SETTINGS)
146+
morning_switch_btn = KeyboardButton(text=ROUTINE_MORNING_VIEW)
144147

145148
keyboard = [
146149
[add_btn, edit_btn],
147150
[drop_btn, all_btn],
151+
[morning_switch_btn],
148152
[settings_btn]
149153
]
150154

β€Žtelegram_bot_project/bot/commands.pyβ€Ž

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ async def show_morning_routines(message: types.Message):
337337
await message.answer(formatted_morning_routine, reply_markup=morning_routine_keyboard())
338338

339339
# Delete Morning Routine Command Handler
340-
async def delete_morning_routine(message: types.Message, state: FSMContext):
340+
async def delete_morning_routine(message: types.Message, state: FSMContext, type: str):
341341
user_id: int = message.from_user.id
342342
user_find: Any = await UserService.get_user_by_id(user_id)
343343
language: str = await UserService.get_user_language(user_id) or "ENGLISH"
@@ -346,7 +346,7 @@ async def delete_morning_routine(message: types.Message, state: FSMContext):
346346
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
347347
else:
348348

349-
morning_routine = await RoutineService.get_user_routines(user_id, routine_type="morning")
349+
morning_routine = await RoutineService.get_user_routines(user_id, routine_type=type)
350350
if not morning_routine:
351351
await message.answer(MESSAGES[language]['NO_MORNING_ROUTINE'])
352352
return
@@ -356,19 +356,50 @@ async def delete_morning_routine(message: types.Message, state: FSMContext):
356356
await state.set_state(DialogStates.delete_morning_routine)
357357

358358
# Update Morning Routine Command Handler
359-
async def update_morning_routine(message: types.Message, state: FSMContext):
359+
async def update_morning_routine(message: types.Message, state: FSMContext, type: str):
360360
user_id: int = message.from_user.id
361361
user_find: Any = await UserService.get_user_by_id(user_id)
362362
language: str = await UserService.get_user_language(user_id) or "ENGLISH"
363363

364364
if not user_find:
365365
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
366366
else:
367-
morning_routine = await RoutineService.get_user_routines(user_id, routine_type="morning")
367+
morning_routine = await RoutineService.get_user_routines(user_id, routine_type=type)
368368
if not morning_routine:
369369
await message.answer(MESSAGES[language]['NO_MORNING_ROUTINE'])
370370
return
371371
else:
372-
await message.answer(MESSAGES[language]['NEW_ROUTINE_NAME'])
372+
await message.answer(MESSAGES[language]['PROVIDE_ROUTINE_ID'])
373373
await state.update_data(morning_routine=morning_routine)
374-
await state.set_state(DialogStates.update_morning_routine_id)
374+
await state.set_state(DialogStates.update_morning_routine_id)
375+
376+
# Show Evening Routine Command Handler
377+
async def show_evening_routines(message: types.Message):
378+
user_id: int = message.from_user.id
379+
user_find: Any = await UserService.get_user_by_id(user_id)
380+
language: str = await UserService.get_user_language(user_id) or "ENGLISH"
381+
382+
if not user_find:
383+
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
384+
return
385+
386+
print(f"--[INFO] - User with id: {user_id} - opened /evening_routines.")
387+
evening_routine = await RoutineService.get_user_routines(user_id, routine_type="evening")
388+
if not evening_routine:
389+
await message.answer(MESSAGES[language]['NO_MORNING_ROUTINE'])
390+
return
391+
392+
dividers: str = "\n" + ("-" * int(len(MESSAGES[language]['EVENING_ROUTINE_SHOW']) * 1.65))
393+
formatted_routine_items = "\n".join(
394+
f"# {idx}. {routine['routine_name']}"
395+
for idx, routine in enumerate(evening_routine, start=1)
396+
)
397+
398+
formatted_morning_routine = (
399+
MESSAGES[language]['EVENING_ROUTINE_SHOW'] +
400+
dividers +
401+
"\n" +
402+
formatted_routine_items
403+
)
404+
405+
await message.answer(formatted_morning_routine, reply_markup=evening_routine_keyboard())

β€Žtelegram_bot_project/bot/handlers.pyβ€Ž

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ async def process_set_sleep_time(message: Message, state: FSMContext):
370370
)
371371
await state.clear()
372372

373-
async def process_set_routine_time(message: Message, state: FSMContext):
373+
async def process_set_routine(message: Message, state: FSMContext, type: str):
374374
user_id = message.from_user.id
375375
user_find = await UserService.get_user_by_id(user_id)
376376
language = await UserService.get_user_language(user_id) or "ENGLISH"
@@ -380,31 +380,33 @@ async def process_set_routine_time(message: Message, state: FSMContext):
380380
return
381381

382382
routine_title: str = message.text.strip()
383+
routine_keyboard: ReplyKeyboardMarkup = morning_routine_keyboard() if type == "morning" else evening_routine_keyboard()
383384
if not validate_text(routine_title):
384-
await message.answer(MESSAGES[language]['INVALID_MORNING_ROUTINE'], reply_markup=morning_routine_keyboard())
385+
await message.answer(MESSAGES[language]['INVALID_MORNING_ROUTINE'], reply_markup=routine_keyboard)
385386
return
386387

387388
try:
388-
await RoutineService.create_routine(user_id, routine_type="morning", routine_name=routine_title)
389+
await RoutineService.create_routine(user_id, routine_type=type, routine_name=routine_title)
389390

390391
print(f"User with id: {user_id} set routine title: {routine_title}")
391-
await message.answer(MESSAGES[language]['ROUTINE_SAVED'].format(routine_title), reply_markup=morning_routine_keyboard())
392+
await message.answer(MESSAGES[language]['ROUTINE_SAVED'].format(routine_title), reply_markup=routine_keyboard)
392393
await state.clear()
393394
except:
394-
await message.answer(MESSAGES[language]['ROUTINE_EXISTS'], reply_markup=morning_routine_keyboard())
395+
await message.answer(MESSAGES[language]['ROUTINE_EXISTS'], reply_markup=routine_keyboard)
395396

396-
async def process_delete_morning_routine(message: Message, state: FSMContext):
397+
async def process_delete_morning_routine(message: Message, state: FSMContext, type: str):
397398
user_id = message.from_user.id
398399
user_find = await UserService.get_user_by_id(user_id)
399400
language = await UserService.get_user_language(user_id) or "ENGLISH"
401+
routine_keyboard: ReplyKeyboardMarkup = morning_routine_keyboard() if type == "morning" else evening_routine_keyboard()
400402

401403
if not user_find:
402404
await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM'])
403405
return
404406

405407
routine_num: int = int(message.text.strip())
406408
if (routine_num < 1):
407-
await message.answer(MESSAGES[language]['COMPLETE_TASK_INVALID'], reply_markup=morning_routine_keyboard())
409+
await message.answer(MESSAGES[language]['COMPLETE_TASK_INVALID'], reply_markup=routine_keyboard)
408410
return
409411
else:
410412
data = await state.get_data()
@@ -416,21 +418,22 @@ async def process_delete_morning_routine(message: Message, state: FSMContext):
416418
await RoutineService.delete_routine(real_id)
417419
print(f"User with id: {user_id} deleted routine with id: {real_id}")
418420

419-
await message.answer(MESSAGES[language]['ROUTINE_DELETED'].format(routine_num, routine_to_delete['routine_name']), reply_markup=morning_routine_keyboard())
421+
await message.answer(MESSAGES[language]['ROUTINE_DELETED'].format(routine_num, routine_to_delete['routine_name']), reply_markup=routine_keyboard)
420422
await state.clear()
421423

422-
async def process_update_morning_routine(message: Message, state: FSMContext):
424+
async def process_update_morning_routine(message: Message, state: FSMContext, type: str):
423425
user_id = message.from_user.id
424426
user_find = await UserService.get_user_by_id(user_id)
425427
language = await UserService.get_user_language(user_id) or "ENGLISH"
428+
routine_keyboard: ReplyKeyboardMarkup = morning_routine_keyboard() if type == "morning" else evening_routine_keyboard()
426429

427430
if not user_find:
428431
await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM'])
429432
return
430433

431434
routine_num: int = int(message.text.strip())
432435
if (routine_num < 1):
433-
await message.answer(MESSAGES[language]['COMPLETE_TASK_INVALID'], reply_markup=morning_routine_keyboard())
436+
await message.answer(MESSAGES[language]['COMPLETE_TASK_INVALID'], reply_markup=routine_keyboard)
434437
return
435438
else:
436439
data = await state.get_data()
@@ -439,22 +442,23 @@ async def process_update_morning_routine(message: Message, state: FSMContext):
439442
routine_to_update = routines[routine_num - 1]
440443
real_id = routine_to_update["id"]
441444

442-
await message.answer(MESSAGES[language]['NEW_ROUTINE_NAME'])
445+
await message.answer(MESSAGES[language]['NEW_ROUTINE_NAME'], reply_markup=routine_keyboard)
443446
await state.update_data(routine_id=real_id)
444447
await state.set_state(DialogStates.update_morning_routine)
445448

446-
async def process_save_updated_morning_routine(message: Message, state: FSMContext):
449+
async def process_save_updated_morning_routine(message: Message, state: FSMContext, type: str):
447450
user_id = message.from_user.id
448451
user_find = await UserService.get_user_by_id(user_id)
449452
language = await UserService.get_user_language(user_id) or "ENGLISH"
453+
routine_keyboard: ReplyKeyboardMarkup = morning_routine_keyboard() if type == "morning" else evening_routine_keyboard()
450454

451455
if not user_find:
452456
await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM'])
453457
return
454458

455459
routine_title: str = message.text.strip()
456460
if not validate_text(routine_title):
457-
await message.answer(MESSAGES[language]['INVALID_MORNING_ROUTINE'], reply_markup=morning_routine_keyboard())
461+
await message.answer(MESSAGES[language]['INVALID_MORNING_ROUTINE'], reply_markup=routine_keyboard)
458462
return
459463

460464
data = await state.get_data()
@@ -463,7 +467,7 @@ async def process_save_updated_morning_routine(message: Message, state: FSMConte
463467
try:
464468
await RoutineService.update_routine(routine_id, routine_title)
465469
print(f"User with id: {user_id} updated routine title: {routine_title}")
466-
await message.answer(MESSAGES[language]['ROUTINE_NAME_SET'].format(routine_title), reply_markup=morning_routine_keyboard())
470+
await message.answer(MESSAGES[language]['ROUTINE_NAME_SET'].format(routine_title), reply_markup=routine_keyboard)
467471
await state.clear()
468472
except:
469-
await message.answer(MESSAGES[language]['ROUTINE_EXISTS'], reply_markup=morning_routine_keyboard())
473+
await message.answer(MESSAGES[language]['ROUTINE_EXISTS'], reply_markup=routine_keyboard)

β€Žtelegram_bot_project/main.pyβ€Ž

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,23 +151,63 @@ async def routine(message: Message):
151151

152152
@dp.message(lambda m: m.text == MORNINGG_ROUTINE_ADD_BTN)
153153
async def morning_add(message: Message, state: FSMContext):
154+
await state.set_state(DialogStates.add_morning_routine)
155+
await state.update_data(routine_type="morning")
154156
await set_morning_routine(message, state)
155157

156158
@dp.message(Command("morning_routines"))
157159
async def morning_routines(message: Message):
158160
await show_morning_routines(message)
159161

162+
@dp.message(lambda m: m.text == ROUTINE_MORNING_VIEW)
163+
async def morning_routines_view(message: types.Message):
164+
await show_morning_routines(message)
165+
160166
@dp.message(lambda m: m.text == MY_MORNING_ROUTINE_BTN)
161167
async def morning_routines_show(message: types.Message):
162168
await show_morning_routines(message)
163169

164170
@dp.message(lambda m: m.text == MORNING_ROUTINE_DELETE_BTN)
165171
async def morning_routines_delete(message: types.Message, state: FSMContext):
166-
await delete_morning_routine(message, state)
172+
await state.set_state(DialogStates.delete_morning_routine)
173+
await state.update_data(routine_type="morning")
174+
await delete_morning_routine(message, state, type="morning")
167175

168176
@dp.message(lambda m: m.text == MORNING_ROUTINE_EDIT_BTN)
169177
async def morning_routines_edit(message: types.Message, state: FSMContext):
170-
await update_morning_routine(message, state)
178+
await state.set_state(DialogStates.update_morning_routine)
179+
await state.update_data(routine_type="morning")
180+
await update_morning_routine(message, state, type="morning")
181+
182+
@dp.message(lambda m: m.text == EVENING_ROUTINE_ADD_BTN)
183+
async def evening_routine_add(message: Message, state: FSMContext):
184+
await state.set_state(DialogStates.add_morning_routine)
185+
await state.update_data(routine_type="evening")
186+
await set_morning_routine(message, state)
187+
188+
@dp.message(lambda m: m.text == EVENING_ROUTINE_DELETE_BTN)
189+
async def evening_routines_delete(message: types.Message, state: FSMContext):
190+
await state.set_state(DialogStates.delete_morning_routine)
191+
await state.update_data(routine_type="evening")
192+
await delete_morning_routine(message, state, type="evening")
193+
194+
@dp.message(lambda m: m.text == EVENING_ROUTINE_EDIT_BTN)
195+
async def evening_routines_edit(message: types.Message, state: FSMContext):
196+
await state.set_state(DialogStates.update_morning_routine)
197+
await state.update_data(routine_type="evening")
198+
await update_morning_routine(message, state, type="evening")
199+
200+
@dp.message(lambda m: m.text == MY_EVENING_ROUTINE_BTN)
201+
async def evening_routines_show(message: types.Message):
202+
await show_evening_routines(message)
203+
204+
@dp.message(Command("evening_routines"))
205+
async def morning_routines(message: Message):
206+
await show_evening_routines(message)
207+
208+
@dp.message(lambda m: m.text == ROUTINE_EVENING_VIEW)
209+
async def evening_routines_view(message: types.Message):
210+
await show_evening_routines(message)
171211

172212
@dp.callback_query(F.data.in_({"morning_view", "evening_view"}))
173213
async def callback_routine(callback_query: CallbackQuery):
@@ -188,7 +228,7 @@ async def callback_idea(callback_query: CallbackQuery, state: FSMContext):
188228
@dp.message()
189229
async def process_fallback(message: Message, state: FSMContext):
190230
current_state = await state.get_state()
191-
print(f"[DEBUG] Current state: {current_state}")
231+
print(f"-- [DEBUG] - Current state: {current_state}")
192232
if current_state == DialogStates.waiting_for_idea.state:
193233
await process_idea_save(message, state)
194234
elif current_state == DialogStates.delete_idea.state:
@@ -214,13 +254,21 @@ async def process_fallback(message: Message, state: FSMContext):
214254
elif current_state == DialogStates.set_sleep_time:
215255
await process_set_sleep_time(message, state)
216256
elif current_state == DialogStates.add_morning_routine:
217-
await process_set_routine_time(message, state)
257+
data = await state.get_data()
258+
routine_type = data.get("routine_type", "morning")
259+
await process_set_routine(message, state, type=routine_type)
218260
elif current_state == DialogStates.delete_morning_routine:
219-
await process_delete_morning_routine(message, state)
261+
data = await state.get_data()
262+
routine_type = data.get("routine_type", "morning")
263+
await process_delete_morning_routine(message, state, type=routine_type)
220264
elif current_state == DialogStates.update_morning_routine:
221-
await process_save_updated_morning_routine(message, state)
265+
data = await state.get_data()
266+
routine_type = data.get("routine_type", "morning")
267+
await process_save_updated_morning_routine(message, state, type=routine_type)
222268
elif current_state == DialogStates.update_morning_routine_id:
223-
await process_update_morning_routine(message, state)
269+
data = await state.get_data()
270+
routine_type = data.get("routine_type", "morning")
271+
await process_update_morning_routine(message, state, type=routine_type)
224272

225273
# Main Function
226274
async def main():

β€Žtelegram_bot_project/messages.pyβ€Ž

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"UPDATE_TASK_SUCCESS": "βœ… Завдання β„–{} ΠΎΠ½ΠΎΠ²Π»Π΅Π½ΠΎ! πŸ†",
5151
"UPDATE_TASK_PROBLEM": "⚠️ Помилка ΠΏΡ–Π΄ час оновлСння. πŸ˜•",
5252
"UPDATE_TASK_NAME_MSG": "πŸ“ Π’Π²Π΅Π΄Ρ–Ρ‚ΡŒ Π½ΠΎΠ²Ρƒ Π½Π°Π·Π²Ρƒ завдання:",
53+
"EVENING_ROUTINE_SHOW": "Бписок Ρ‚Π²ΠΎΡ—Ρ… Π²Π΅Ρ‡Ρ–Ρ€Π½Ρ–Ρ… розпорядків",
5354
"UPDATE_TASK_NAME_INVALID": "❌ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π° Π½Π°Π·Π²Π°! πŸ”„",
5455
"SETTINGS_MENU": "βš™οΈ Ласкаво просимо Π² ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ",
5556
"ROUTINE_MENU_DAY": "Π’ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ розпорядок Π·Π° ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ -> Morning / Evening",
@@ -150,7 +151,8 @@
150151
"ROUTINE_EXISTS": "Routine with this title already exists.",
151152
"ROUTINE_SAVED": "Routine - {} successfully saved!",
152153
"MORNING_ROUTINE_SHOW": "Your Morning Routine List",
153-
"NO_MORNING_ROUTINE": "You already doesn't have a morning routine set yet. Set it to keep your routine on track!",
154+
"EVENING_ROUTINE_SHOW": "Your Evening Routine List",
155+
"NO_MORNING_ROUTINE": "You already doesn't have a routine set yet. Set it to keep your routine on track!",
154156
"PROVIDE_ROUTINE_ID": "Please provide the Number of the routine:",
155157
"ROUTINE_DELETED": "Routine deleted",
156158
"NEW_ROUTINE_NAME": "Please enter the new routine name:",
@@ -208,15 +210,16 @@
208210
ROUTINE_SET_SLEEP_BUTTON = "πŸŒ™ Set Sleep Time"
209211
ROUTINE_MY_TIME = "πŸ•’ My Routine"
210212
ROUTINE_MORNING_VIEW = "Morning Routine"
211-
ROUTINE_EVENING_VIEW = "Afternoon Routine"
213+
ROUTINE_EVENING_VIEW = "Evening Routine"
212214

213-
MORNINGG_ROUTINE_ADD_BTN = "Add"
214-
MORNING_ROUTINE_DELETE_BTN = "Delete"
215-
MORNING_ROUTINE_EDIT_BTN = "Edit"
216-
MY_MORNING_ROUTINE_BTN = "My Morning Routine"
215+
MORNINGG_ROUTINE_ADD_BTN = "βž• Add Morning"
216+
MORNING_ROUTINE_DELETE_BTN = "πŸ—‘οΈ Delete Morning"
217+
MORNING_ROUTINE_EDIT_BTN = "✏️ Edit Morning"
218+
MY_MORNING_ROUTINE_BTN = "πŸŒ… My Morning Routine"
219+
220+
EVENING_ROUTINE_ADD_BTN = "βž• Add Evening"
221+
EVENING_ROUTINE_DELETE_BTN = "πŸ—‘οΈ Delete Evening"
222+
EVENING_ROUTINE_EDIT_BTN = "✏️ Edit Evening"
223+
MY_EVENING_ROUTINE_BTN = "πŸŒ™ My Evening Routine"
217224

218-
EVENING_ROUTINE_ADD_BTN = "Add"
219-
EVENING_ROUTINE_DELETE_BTN = "Delete"
220-
EVENING_ROUTINE_EDIT_BTN = "Edit"
221-
MY_EVENING_ROUTINE_BTN = "My Evening Routine"
222225

0 commit comments

Comments
Β (0)