Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions telegram_bot_project/bot/buttons.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# bot/buttons.py
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton
from messages import *
from typing import Optional, List

def get_language_keyboard() -> InlineKeyboardMarkup:
inline_markup = InlineKeyboardMarkup(inline_keyboard=[], row_width=2)
Expand Down Expand Up @@ -120,7 +121,7 @@ def morning_routine_keyboard() -> ReplyKeyboardMarkup:
settings_btn = KeyboardButton(text=BUTTON_SETTINGS)
evening_switch_btn = KeyboardButton(text=ROUTINE_EVENING_VIEW)

keyboard = [
keyboard: List[List[KeyboardButton]] = [
[add_btn, edit_btn],
[drop_btn, all_btn],
[evening_switch_btn],
Expand Down Expand Up @@ -153,4 +154,28 @@ def evening_routine_keyboard() -> ReplyKeyboardMarkup:
keyboard=keyboard,
resize_keyboard=True,
row_width=2
)
)

def focus_menu_keyboard(started: Optional[bool] = False) -> ReplyKeyboardMarkup:
menu_btn = KeyboardButton(text=MENU_BUTTON)
focus_btn = KeyboardButton(text=FOCUS_ZONE_END if started else FOCUS_ZONE_START)

keyboard = [
[focus_btn],
[menu_btn]
]

return ReplyKeyboardMarkup(
keyboard=keyboard,
resize_keyboard=True
)

def focus_save_question_keyboard() -> InlineKeyboardMarkup:
inline_markup = InlineKeyboardMarkup(inline_keyboard=[], row_width=2)

save_focus_btn: InlineKeyboardButton = InlineKeyboardButton(text=FOCUS_INLINE_YES, callback_data="save_focus")
not_save_focus_btn: InlineKeyboardButton = InlineKeyboardButton(text=FOCUS_INLINE_NO, callback_data="not_save_focus")

inline_markup.add(save_focus_btn)
inline_markup.add(not_save_focus_btn)
return inline_markup
14 changes: 13 additions & 1 deletion telegram_bot_project/bot/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,4 +434,16 @@ async def show_daily_stats_command(message: types.Message):
created_tasks = stats.get("created_tasks", 0)

text = generate_daily_stats_message(language, created_ideas, completed_tasks, created_tasks)
await message.answer(text, parse_mode="Markdown", reply_markup=menu_reply_keyboard())
await message.answer(text, parse_mode="Markdown", reply_markup=menu_reply_keyboard())

# Focus Zone Menu Handler
async def show_focus_menu(message: types.Message) -> None:
user_id: int = message.from_user.id
user_find: Any = await UserService.get_user_by_id(user_id)
language: str = await UserService.get_user_language(user_id)

if not user_find:
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
else:
print(f"[INFO] - User with id: {user_id} - opened /focus.")
await message.answer(MESSAGES[language]['WELCOME_TO_FOCUS'], reply_markup=focus_menu_keyboard())
1 change: 0 additions & 1 deletion telegram_bot_project/bot/fallbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
# Fallback
async def fallback(message: types.Message, state: FSMContext):
current_state = await state.get_state()
print(f"[DEBUG] - Current state: {current_state}")
if current_state == DialogStates.waiting_for_idea.state:
await process_idea_save(message, state)
elif current_state == DialogStates.delete_idea.state:
Expand Down
65 changes: 64 additions & 1 deletion telegram_bot_project/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import asyncio
from datetime import datetime
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.fsm.storage.memory import MemoryStorage
Expand All @@ -15,6 +16,9 @@
storage: MemoryStorage = MemoryStorage()
dp = Dispatcher(storage=storage)

focus_times = {}
FOCUS_ZONE_START_TIME: int = None

# Command Handlers
@dp.message(Command("start"))
async def start(message: Message):
Expand Down Expand Up @@ -86,7 +90,7 @@ async def update_task(message: Message, state: FSMContext):
async def settings(message: Message):
await setting_menu_command(message)

@dp.message(Command("time"))
@dp.message(Command("time_manage"))
@dp.message(lambda m: m.text == ROUTINE_MY_TIME)
@dp.message(lambda m: m.text == SETTINGS_BUTTON_ROUTINE_TIME)
async def my_routine_time(message: Message):
Expand Down Expand Up @@ -163,6 +167,65 @@ async def feedback(message: Message, state: FSMContext):
async def my_day(message: Message):
await show_daily_stats_command(message)

@dp.message(Command("focus"))
async def focus(message: Message):
await show_focus_menu(message)

@dp.message(lambda m: m.text == FOCUS_ZONE_START)
async def focus_start(message: Message):
user_id = message.from_user.id
user_find = await UserService.get_user_by_id(user_id)
language = await UserService.get_user_language(user_id)

if not user_find:
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
return

global FOCUS_STATUS
FOCUS_STATUS = True
focus_times[user_id] = datetime.now()

await message.answer(
MESSAGES[language]['START_FOCUS_MSG'],
reply_markup=focus_menu_keyboard(FOCUS_STATUS)
)


@dp.message(lambda m: m.text == FOCUS_ZONE_END)
async def focus_end(message: Message):
user_id = message.from_user.id
user_find = await UserService.get_user_by_id(user_id)
language = await UserService.get_user_language(user_id)

if not user_find:
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
return

global FOCUS_STATUS
FOCUS_STATUS = False

start_time = focus_times.get(user_id)

if not start_time:
await message.answer("❗ Не знайдено початку фокус-сесії.")
return

end_time = datetime.now()
delta = end_time - start_time

total_seconds = int(delta.total_seconds())
minutes = total_seconds // 60
seconds = total_seconds % 60

focus_times.pop(user_id, None)

await message.answer(
MESSAGES[language]['STOP_FOCUS_MSG'].format(minutes, seconds),
reply_markup=focus_menu_keyboard(FOCUS_STATUS)
)



@dp.callback_query(F.data.in_({"morning_view", "evening_view"}))
async def callback_routine(callback_query: CallbackQuery):
await callback_routines(callback_query)
Expand Down
Loading