/
agorlov
/
task-cards-bot
Обзор
Документация
Войти
/
agorlov
/
task-cards-bot
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/started_task_controller.py
110 строк
3 KB
Alexandr Gorlov
кнопка Готово; доп. цитаты
20 мар 2024, 22:57
20 мар 2024, 22:57
620432c
Код
Авторство
О чём код?
from telebot import types import random import traceback class StartedTaskController: """ Выбрать дело и начать его Отрабатывает команду "дело", выбирает для пользователя задачу и запускает её Если уже есть запущенное задание, то выдает сообщение "У вас уже есть задача в работе." Если есть задача на паузе, то продолжает работу над ней. Author: Alexander Gorlov """ def __init__(self, db, bot, chat_id, user_id): self.bot = bot self.db = db self.chat_id = chat_id self.user_id = user_id def startTask(self): """ Начать работу над задачей """ bot = self.bot db = self.db cursor = db.cursor() cursor.execute( """ SELECT COUNT(*) FROM tasks WHERE status IN ('в работе') AND owner_id = %s """, (self.user_id,) ) count_in_progress = cursor.fetchone()[0] if count_in_progress > 0: bot.send_message(self.chat_id, "У вас уже есть задача в работе.") return cursor.execute( """ SELECT task_number, task_text FROM tasks WHERE status IN ('ожидает выполнения', 'на паузе') AND owner_id = %s AND planned_date <= NOW() """, (self.user_id,) ) available_tasks = cursor.fetchall() if len(available_tasks) <= 0: bot.send_message( self.chat_id, f"У вас закончились задачи, придумайте новое дело." ) return cursor.execute( """ SELECT task_number, task_text FROM tasks WHERE status IN ('на паузе') AND owner_id = %s AND planned_date <= NOW() """, (self.user_id,) ) paused_task = cursor.fetchall() if len(paused_task) > 0: task_number, task_text = paused_task[0] else: task_number, task_text = random.sample(available_tasks, 1)[0] task_text = task_text.strip() cursor.execute( """ UPDATE tasks SET status = 'в работе', start_time = NOW() WHERE task_number = %s AND owner_id = %s """, (task_number, self.user_id,) ) cursor.close() # Кнопка готово, с действием соответствующим команде /done reply_markup = types.InlineKeyboardMarkup() reply_markup.add( types.InlineKeyboardButton( "Готово", callback_data=f"done_task_btn" ) ) bot.send_message( self.chat_id, f"{task_text}", reply_markup=reply_markup )