It's version 0.5
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user