Skip to content

Commit 7d45b1a

Browse files
authored
Merge pull request #29 from gnatykdm/My-Day-Configuration
My-Day-Configuration[Refactoring+Logic-Skeleton]
2 parents 5756158 + d71ab4a commit 7d45b1a

File tree

9 files changed

+93
-131
lines changed

9 files changed

+93
-131
lines changed

telegram_bot_project/.idea/dictionaries/project.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

telegram_bot_project/bot/buttons.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ def get_language_keyboard() -> InlineKeyboardMarkup:
1111

1212
return inline_markup
1313

14-
15-
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
16-
17-
1814
def menu_reply_keyboard() -> ReplyKeyboardMarkup:
1915
menu_reply_keyboard = ReplyKeyboardMarkup(keyboard=[], resize_keyboard=True, row_width=2)
2016

telegram_bot_project/bot/callbacks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional, Any
1+
from typing import Optional
22
from aiogram import types
33
from aiogram.fsm.context import FSMContext
44

@@ -73,6 +73,7 @@ async def callback_idea_process(callback_query: types.CallbackQuery, state: FSMC
7373
await callback_query.message.answer(MESSAGES[language]["IDEA_SAVED"], reply_markup=idea_reply_keyboard())
7474
await state.clear()
7575
except Exception as e:
76+
print(f"--[ERROR] - User {user_id} ({user_name}) failed to save idea: {e}")
7677
await callback_query.message.answer(MESSAGES[language]["IDEA_PROBLEM"])
7778
case _:
7879
print(f"--[INFO] - User {user_id} ({user_name}) sent invalid callback: {callback_query.data}")

telegram_bot_project/bot/commands.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
from time import sleep
2-
from typing import Any, List
1+
from typing import List
32
from aiogram import types
43
from aiogram.fsm.context import FSMContext
54

65
from bot.utills import format_date, calculate_awake_hours
7-
from messages import MESSAGES
86
from service.idea import IdeaService
97
from service.routine import RoutineService
108
from service.task import TaskService
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import aiogram.types as types
2+
3+
from bot.handlers import *
4+
from states import DialogStates
5+
6+
# Fallback
7+
async def fallback(message: types.Message, state: FSMContext):
8+
current_state = await state.get_state()
9+
print(f"-- [DEBUG] - Current state: {current_state}")
10+
if current_state == DialogStates.waiting_for_idea.state:
11+
await process_idea_save(message, state)
12+
elif current_state == DialogStates.delete_idea.state:
13+
await process_idea_delete(message, state)
14+
elif current_state == DialogStates.update_idea.state:
15+
await process_idea_update(message, state)
16+
elif current_state == DialogStates.waiting_for_update_text:
17+
await process_save_updated_idea_text(message, state)
18+
elif current_state == DialogStates.confirm_task:
19+
await process_task_save(message, state)
20+
elif current_state == DialogStates.task_deadline:
21+
await process_task_deadline(message, state)
22+
elif current_state == DialogStates.delete_task:
23+
await process_task_delete(message, state)
24+
elif current_state == DialogStates.complete_task:
25+
await process_task_complete(message, state)
26+
elif current_state == DialogStates.update_task_id:
27+
await process_task_update(message, state)
28+
elif current_state == DialogStates.update_task_name:
29+
await process_save_updated_task_name(message, state)
30+
elif current_state == DialogStates.set_wake_time:
31+
await process_set_wake_time(message, state)
32+
elif current_state == DialogStates.set_sleep_time:
33+
await process_set_sleep_time(message, state)
34+
elif current_state == DialogStates.add_morning_routine:
35+
data = await state.get_data()
36+
routine_type = data.get("routine_type", "morning")
37+
await process_set_routine(message, state, type=routine_type)
38+
elif current_state == DialogStates.delete_morning_routine:
39+
data = await state.get_data()
40+
routine_type = data.get("routine_type", "morning")
41+
await process_delete_morning_routine(message, state, type=routine_type)
42+
elif current_state == DialogStates.update_morning_routine:
43+
data = await state.get_data()
44+
routine_type = data.get("routine_type", "morning")
45+
await process_save_updated_morning_routine(message, state, type=routine_type)
46+
elif current_state == DialogStates.update_morning_routine_id:
47+
data = await state.get_data()
48+
routine_type = data.get("routine_type", "morning")
49+
await process_update_morning_routine(message, state, type=routine_type)
50+
elif current_state == DialogStates.feedback_message:
51+
await process_feedback_message(message, state)

telegram_bot_project/bot/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from aiogram.fsm.context import FSMContext
2-
from aiogram.types import Message, message
2+
from aiogram.types import Message
33

44
from service.smtp import SmtpService
55
from bot.buttons import *

telegram_bot_project/bot/utills.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta, time
1+
from datetime import datetime, timedelta
22

33
def format_date(dt: datetime) -> str:
44
return dt.strftime("%d.%m.%Y %H:%M")

telegram_bot_project/main.py

Lines changed: 23 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import asyncio
2-
from aiogram import Dispatcher, Bot, F
2+
3+
from aiogram import Bot, Dispatcher, F
34
from aiogram.filters import Command
45
from aiogram.fsm.storage.memory import MemoryStorage
5-
from aiogram.types import CallbackQuery, Message
6-
from aiogram.fsm.context import FSMContext
7-
from sqlalchemy import lambda_stmt
8-
from sqlalchemy.util import await_fallback
6+
from aiogram.types import CallbackQuery
97

10-
from bot.callbacks import *
11-
from bot.commands import *
12-
from bot.handlers import *
138
from config import TOKEN
14-
from messages import *
15-
from states import DialogStates
9+
10+
from bot.commands import *
11+
from bot.callbacks import *
12+
from bot.fallbacks import *
1613

1714
storage: MemoryStorage = MemoryStorage()
1815
dp = Dispatcher(storage=storage)
@@ -32,9 +29,6 @@ async def menu(message: Message):
3229
await menu_command(message)
3330

3431
@dp.message(Command("language"))
35-
async def language(message: Message):
36-
await language_command(message)
37-
3832
@dp.message(lambda m: m.text == SETTINGS_BUTTON_LANGUAGE)
3933
async def language(message: Message):
4034
await language_command(message)
@@ -58,81 +52,45 @@ async def update_idea(message: Message, state: FSMContext):
5852
await update_idea_command(message, state)
5953

6054
@dp.message(Command("task"))
61-
async def task(message: Message, state: FSMContext):
62-
await task_command(message, state)
63-
6455
@dp.message(lambda m: m.text == BUTTON_ADD_TASK)
65-
async def add_task(message: Message, state: FSMContext):
56+
async def task(message: Message, state: FSMContext):
6657
await task_command(message, state)
6758

6859
@dp.message(Command("taskmenu"))
6960
async def task_menu(message: Message):
7061
await task_menu_command(message)
7162

7263
@dp.message(Command("tasks"))
64+
@dp.message(lambda m: m.text == BUTTON_ALL_TASKS)
7365
async def show_tasks(message: Message):
7466
await tasks_show_command(message)
7567

7668
@dp.message(Command("complete"))
77-
async def complete_task(message: Message, state: FSMContext):
78-
await complete_task_command(message, state)
79-
8069
@dp.message(lambda m: m.text == BUTTON_TOGGLE_STATUS)
81-
async def toggle_task_status(message: Message, state: FSMContext):
70+
async def complete_task(message: Message, state: FSMContext):
8271
await complete_task_command(message, state)
8372

84-
@dp.message(lambda m: m.text == BUTTON_ALL_TASKS)
85-
async def show_all_tasks(message: Message):
86-
await tasks_show_command(message)
87-
88-
@dp.message(lambda m: m.text == BUTTON_DELETE_TASK)
89-
async def delete_task(message: Message, state: FSMContext):
90-
await delete_task_command(message, state)
91-
9273
@dp.message(Command("droptask"))
74+
@dp.message(lambda m: m.text == BUTTON_DELETE_TASK)
9375
async def drop_task(message: Message, state: FSMContext):
9476
await delete_task_command(message, state)
9577

9678
@dp.message(Command("updatetask"))
97-
async def update_task(message: Message, state: FSMContext):
98-
await update_task_command(message, state)
99-
10079
@dp.message(lambda m: m.text == BUTTON_EDIT_TASK)
101-
async def edit_task(message: Message, state: FSMContext):
80+
async def update_task(message: Message, state: FSMContext):
10281
await update_task_command(message, state)
10382

104-
@dp.message(lambda m: m.text == BUTTON_SETTINGS)
105-
async def settings(message: Message):
106-
await setting_menu_command(message)
107-
10883
@dp.message(Command("settings"))
84+
@dp.message(lambda m: m.text == BUTTON_SETTINGS)
10985
async def settings(message: Message):
11086
await setting_menu_command(message)
11187

112-
@dp.message(Command("routinetime"))
113-
async def waketime(message: Message):
114-
await routine_time_command(message)
115-
116-
@dp.message(lambda m: m.text == SETTINGS_BUTTON_ROUTINE_TIME)
117-
async def waketime(message: Message):
118-
await routine_time_command(message)
119-
120-
@dp.message(lambda m: m.text == ROUTINE_MY_TIME)
121-
async def my_routine_time(message: Message):
122-
await routine_time_command(message)
123-
124-
@dp.message(Command("setwake"))
125-
async def set_waketime(message: Message, state: FSMContext):
126-
await set_wake_time_command(message, state)
127-
12888
@dp.message(Command("time"))
89+
@dp.message(lambda m: m.text == ROUTINE_MY_TIME)
90+
@dp.message(lambda m: m.text == SETTINGS_BUTTON_ROUTINE_TIME)
12991
async def my_routine_time(message: Message):
13092
await routine_time_command(message)
13193

132-
@dp.message(Command("setsleep"))
133-
async def set_sleep_time(message: Message, state: FSMContext):
134-
await set_sleep_time_command(message, state)
135-
13694
@dp.message(lambda m: m.text == ROUTINE_SET_SLEEP_BUTTON)
13795
async def set_sleep_time(message: Message, state: FSMContext):
13896
await set_sleep_time_command(message, state)
@@ -142,9 +100,6 @@ async def set_waketime(message: Message, state: FSMContext):
142100
await set_wake_time_command(message, state)
143101

144102
@dp.message(Command("routine"))
145-
async def routine(message: Message):
146-
await routine_menu_command(message)
147-
148103
@dp.message(lambda m: m.text == SETTINGS_BUTTON_ROUTINE)
149104
async def routine(message: Message):
150105
await routine_menu_command(message)
@@ -156,15 +111,9 @@ async def morning_add(message: Message, state: FSMContext):
156111
await set_morning_routine(message, state)
157112

158113
@dp.message(Command("morning_routines"))
159-
async def morning_routines(message: Message):
160-
await show_morning_routines(message)
161-
162114
@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-
166115
@dp.message(lambda m: m.text == MY_MORNING_ROUTINE_BTN)
167-
async def morning_routines_show(message: types.Message):
116+
async def morning_routines(message: Message):
168117
await show_morning_routines(message)
169118

170119
@dp.message(lambda m: m.text == MORNING_ROUTINE_DELETE_BTN)
@@ -197,25 +146,21 @@ async def evening_routines_edit(message: types.Message, state: FSMContext):
197146
await state.update_data(routine_type="evening")
198147
await update_morning_routine(message, state, type="evening")
199148

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-
204149
@dp.message(Command("evening_routines"))
150+
@dp.message(lambda m: m.text == ROUTINE_EVENING_VIEW)
151+
@dp.message(lambda m: m.text == MY_EVENING_ROUTINE_BTN)
205152
async def morning_routines(message: Message):
206153
await show_evening_routines(message)
207154

208155
@dp.message(Command("feedback"))
209-
async def feedback(message: Message, state: FSMContext):
210-
await send_feedback_command(message, state)
211-
212156
@dp.message(lambda m: m.text == SETTINGS_BUTTON_FEEDBACK)
213157
async def feedback(message: Message, state: FSMContext):
214158
await send_feedback_command(message, state)
215159

216-
@dp.message(lambda m: m.text == ROUTINE_EVENING_VIEW)
217-
async def evening_routines_view(message: types.Message):
218-
await show_evening_routines(message)
160+
@dp.message(Command("myday"))
161+
@dp.message(lambda m: m.text == BUTTON_MYDAY)
162+
async def my_day():
163+
pass
219164

220165
@dp.callback_query(F.data.in_({"morning_view", "evening_view"}))
221166
async def callback_routine(callback_query: CallbackQuery):
@@ -235,50 +180,7 @@ async def callback_idea(callback_query: CallbackQuery, state: FSMContext):
235180

236181
@dp.message()
237182
async def process_fallback(message: Message, state: FSMContext):
238-
current_state = await state.get_state()
239-
print(f"-- [DEBUG] - Current state: {current_state}")
240-
if current_state == DialogStates.waiting_for_idea.state:
241-
await process_idea_save(message, state)
242-
elif current_state == DialogStates.delete_idea.state:
243-
await process_idea_delete(message, state)
244-
elif current_state == DialogStates.update_idea.state:
245-
await process_idea_update(message, state)
246-
elif current_state == DialogStates.waiting_for_update_text:
247-
await process_save_updated_idea_text(message, state)
248-
elif current_state == DialogStates.confirm_task:
249-
await process_task_save(message, state)
250-
elif current_state == DialogStates.task_deadline:
251-
await process_task_deadline(message, state)
252-
elif current_state == DialogStates.delete_task:
253-
await process_task_delete(message, state)
254-
elif current_state == DialogStates.complete_task:
255-
await process_task_complete(message, state)
256-
elif current_state == DialogStates.update_task_id:
257-
await process_task_update(message, state)
258-
elif current_state == DialogStates.update_task_name:
259-
await process_save_updated_task_name(message, state)
260-
elif current_state == DialogStates.set_wake_time:
261-
await process_set_wake_time(message, state)
262-
elif current_state == DialogStates.set_sleep_time:
263-
await process_set_sleep_time(message, state)
264-
elif current_state == DialogStates.add_morning_routine:
265-
data = await state.get_data()
266-
routine_type = data.get("routine_type", "morning")
267-
await process_set_routine(message, state, type=routine_type)
268-
elif current_state == DialogStates.delete_morning_routine:
269-
data = await state.get_data()
270-
routine_type = data.get("routine_type", "morning")
271-
await process_delete_morning_routine(message, state, type=routine_type)
272-
elif current_state == DialogStates.update_morning_routine:
273-
data = await state.get_data()
274-
routine_type = data.get("routine_type", "morning")
275-
await process_save_updated_morning_routine(message, state, type=routine_type)
276-
elif current_state == DialogStates.update_morning_routine_id:
277-
data = await state.get_data()
278-
routine_type = data.get("routine_type", "morning")
279-
await process_update_morning_routine(message, state, type=routine_type)
280-
elif current_state == DialogStates.feedback_message:
281-
await process_feedback_message(message, state)
183+
await fallback(message, state)
282184

283185
# Main Function
284186
async def main():
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from sqlalchemy import text
2+
from typing import Optional
3+
from config import get_session
4+
5+
from abc import ABC, abstractmethod
6+
7+
# Will be implemented later
8+
class MyDayService(ABC):
9+
@staticmethod
10+
@abstractmethod
11+
async def get_myday_by_user_id(user_id: int) -> Optional[dict]:
12+
pass

0 commit comments

Comments
 (0)