from aiogram import Dispatcher, Bot from aiogram.types import Message from aiogram.filters import Command from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.context import FSMContext import logging from .DB import get_tasks, add_task, delete_tasks_by_who from storage.message_storage import save_message from datetime import datetime logger = logging.getLogger(__name__) class TodoForm(StatesGroup): waiting_for_task = State() def register_handlers(dp: Dispatcher, state, bot: Bot): # /todos — начать добавление задачи @dp.message(Command("todos")) async def cmd_todos(message: Message, state: FSMContext): save_message(message.chat.id, message.message_id) # сохраняем сообщение await message.answer("Введите текст задачи:") await state.set_state(TodoForm.waiting_for_task) # обработка текста задачи @dp.message(TodoForm.waiting_for_task) async def process_task(message: Message, state: FSMContext): save_message(message.chat.id, message.message_id) # сохраняем сообщение task_text = message.text user_id = message.from_user.id try: created_at = datetime.now().strftime("%d.%m.%Y %H:%M:%S") add_task(user_id, task_text, created_at) reply = await message.answer(f"Задача сохранена ✅\n{task_text}") save_message(reply.chat.id, reply.message_id) # сохраняем ответ бота except Exception as e: logger.error(f"Ошибка при добавлении задачи: {e}") reply = await message.answer("Не удалось сохранить задачу ❌") save_message(reply.chat.id, reply.message_id) finally: await state.clear() # /todor — показать список задач @dp.message(Command("todor")) async def cmd_todor(message: Message): save_message(message.chat.id, message.message_id) # сохраняем сообщение user_id = message.from_user.id try: tasks = get_tasks(user_id) if not tasks: reply = await message.answer("У вас пока нет задач 📝") save_message(reply.chat.id, reply.message_id) return text = "Ваши задачи:\n\n" for tid, task, created_at in tasks: text += f"• {task} (создана {created_at})\n" reply = await message.answer(text) save_message(reply.chat.id, reply.message_id) except Exception as e: logger.error(f"Ошибка при чтении задач: {e}") reply = await message.answer("Не удалось получить список задач ❌") save_message(reply.chat.id, reply.message_id) @dp.message(Command("todod")) async def del_todo(message: Message): delete_tasks_by_who(message.from_user.id)