It's version 0.5

This commit is contained in:
Niken
2025-10-29 21:46:06 +03:00
parent a71a7fbd0c
commit e56401bf1d
19 changed files with 582 additions and 7 deletions
+57
View File
@@ -0,0 +1,57 @@
import sqlite3
from datetime import datetime
DIR = "/Users/mac/myfirstprogramm/addons/todo/todo.db" # лучше указать полный путь
# создаём подключение
db = sqlite3.connect(DIR)
cursor = db.cursor()
# создаём таблицу, если её ещё нет
cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
who INTEGER NOT NULL,
task TEXT NOT NULL,
due_date TEXT NOT NULL
)
""")
db.commit()
# функция для добавления задачи
def add_task(who: int, task: str, due_date: str):
cursor.execute(
"INSERT INTO tasks (who, task, due_date) VALUES (?, ?, ?)",
(who, task, due_date)
)
db.commit()
# функция для получения всех задач пользователя
def get_tasks(who: int):
cursor.execute("SELECT id, task, due_date FROM tasks WHERE who = ?", (who,))
return cursor.fetchall()
# функция для удаления всех задач пользователя
def delete_tasks_by_who(who: int):
cursor.execute("DELETE FROM tasks WHERE who = ?", (who,))
db.commit()
# пример использования
if __name__ == "__main__":
# добавляем задачи
add_task(123456789, "Сделать бота", datetime.now().strftime("%d.%m.%Y %H:%M:%S"))
add_task(123456789, "Проверить базу", datetime.now().strftime("%d.%m.%Y %H:%M:%S"))
print("Задачи до удаления:")
tasks = get_tasks(123456789)
for t in tasks:
print(t)
# удаляем все задачи пользователя
delete_tasks_by_who(123456789)
print("\nЗадачи после удаления:")
tasks = get_tasks(123456789)
for t in tasks:
print(t)
+9
View File
@@ -0,0 +1,9 @@
def register(dp, state, bot):
from . import handlers
handlers.register_handlers(dp, state, bot)
def unregister(dp):
# Здесь можно удалить хендлеры, если нужно
dp.message_handlers.handlers.clear()
+68
View File
@@ -0,0 +1,68 @@
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)