From b49d62c19d9afc7973a346d49b1b686d8357df05 Mon Sep 17 00:00:00 2001 From: gnatykdm Date: Thu, 17 Jul 2025 18:07:50 +0200 Subject: [PATCH 1/2] Task-Configuration[Task-Delete-Command] C:7 --- telegram_bot_project/bot/commands.py | 17 ++++++++++++++ telegram_bot_project/bot/handlers.py | 34 +++++++++++++++++++++++++++- telegram_bot_project/main.py | 33 ++++++++++----------------- telegram_bot_project/messages.py | 8 +++++++ telegram_bot_project/states.py | 3 ++- 5 files changed, 72 insertions(+), 23 deletions(-) diff --git a/telegram_bot_project/bot/commands.py b/telegram_bot_project/bot/commands.py index 7ce0374..7d22bfb 100644 --- a/telegram_bot_project/bot/commands.py +++ b/telegram_bot_project/bot/commands.py @@ -171,3 +171,20 @@ async def tasks_show_command(message: types.Message): await message.answer(response_text, parse_mode="Markdown", reply_markup=task_menu_keyboard()) +#Delete Task Command +async def delete_task_command(message: types.Message, state: FSMContext): + 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: + tasks = await TaskService.get_user_tasks(user_id) + if not tasks: + await message.answer(MESSAGES[language]['NO_TASKS'], reply_markup=task_menu_keyboard()) + return + + await message.answer(MESSAGES[language]['TASK_DELETE_MSG']) + await state.set_state(DialogStates.delete_task) + await state.update_data(tasks=tasks) \ No newline at end of file diff --git a/telegram_bot_project/bot/handlers.py b/telegram_bot_project/bot/handlers.py index 6f9c12e..ca40b75 100644 --- a/telegram_bot_project/bot/handlers.py +++ b/telegram_bot_project/bot/handlers.py @@ -189,4 +189,36 @@ async def process_task_deadline(message: Message, state: FSMContext): await state.clear() except ValueError: - await message.answer(MESSAGES[language]['TASK_DEADLINE_INVALID']) \ No newline at end of file + await message.answer(MESSAGES[language]['TASK_DEADLINE_INVALID']) + +async def process_task_delete(message: Message, state: FSMContext): + user_id = message.from_user.id + user_find = await UserService.get_user_by_id(user_id) + language = await UserService.get_user_language(user_id) or "ENGLISH" + + if not user_find: + await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM']) + return + + data = await state.get_data() + tasks = data.get("tasks") + + try: + max_task_num = len(tasks) + user_number = int(message.text.strip()) + + if user_number > max_task_num or user_number < 1: + await message.answer(MESSAGES[language]['INVALID_TASK_NUM'], reply_markup=task_menu_keyboard()) + return + + task_to_delete = tasks[user_number - 1] + real_id = task_to_delete["id"] + + print(f"--[INFO] User with id: {user_id} deleted task with id: {real_id}") + await TaskService.delete_task(real_id) + await message.answer(MESSAGES[language]['TASK_DELETED'].format(user_number, task_to_delete['task_name']), reply_markup=task_menu_keyboard()) + await state.clear() + + except ValueError: + await message.answer(MESSAGES[language]['TASK_DELETE_PROBLEM'], reply_markup=task_menu_keyboard()) + diff --git a/telegram_bot_project/main.py b/telegram_bot_project/main.py index e2a1b4e..a72f21c 100644 --- a/telegram_bot_project/main.py +++ b/telegram_bot_project/main.py @@ -9,27 +9,8 @@ callback_idea_process, callback_task_deadline ) -from bot.commands import ( - start_command, - help_command, - menu_command, - language_command, - idea_command, - ideas_command, - delete_idea_command, - update_idea_command, - task_command, - task_menu_command, - tasks_show_command -) -from bot.handlers import ( - process_idea_save, - process_idea_delete, - process_idea_update, - process_save_updated_idea_text, - process_task_save, - process_task_deadline -) +from bot.commands import * +from bot.handlers import * from config import TOKEN from messages import * from states import DialogStates @@ -93,6 +74,14 @@ async def show_tasks(message: Message): async def show_all_tasks(message: Message): await tasks_show_command(message) +@dp.message(lambda m: m.text == BUTTON_DELETE_TASK) +async def delete_task(message: Message, state: FSMContext): + await delete_task_command(message, state) + +@dp.message(Command("droptask")) +async def drop_task(message: Message, state: FSMContext): + await delete_task_command(message, state) + @dp.callback_query(F.data.in_({"lang_ua", "lang_en"})) async def callback_language(callback_query: CallbackQuery): await start_callback_language(callback_query) @@ -121,6 +110,8 @@ async def process_fallback(message: Message, state: FSMContext): await process_task_save(message, state) elif current_state == DialogStates.task_deadline: await process_task_deadline(message, state) + elif current_state == DialogStates.delete_task: + await process_task_delete(message, state) # Main Function async def main(): diff --git a/telegram_bot_project/messages.py b/telegram_bot_project/messages.py index e248c61..61764b7 100644 --- a/telegram_bot_project/messages.py +++ b/telegram_bot_project/messages.py @@ -37,6 +37,10 @@ "TASK_MENU": "Меню задач", "NO_TASKS": "Наразі у вас немає задач. Для добалення - /task", "YOUR_TASKS": "Ваші задачі:", + "TASK_DELETE_MSG": "Будьласка введіть номер задачі яку зочете видалити", + "INVALID_TASK_NUM": "Поганий номер задачі", + "TASK_DELETED": "Завдання №{} '{}' було видалено.", + "TASK_DELETE_PROBLEM": "Проблема з видаленням завдання. Спробуйте пізніше.", "LANGUAGE_ASK": ( "🌐 **Оберіть мову інтерфейсу:**\n" "Натисніть кнопку нижче, щоб продовжити:" @@ -86,6 +90,10 @@ "TASK_MENU": "Task menu", "NO_TASKS": "You are actually dont have any tasks yet. Be the first to add one! /task", "YOUR_TASKS": "Your tasks:", + "TASK_DELETE_MSG": "Please enter the task number you want to delete", + "INVALID_TASK_NUM": "Invalid task number", + "TASK_DELETED": "Task #{} '{}' has been deleted.", + "TASK_DELETE_PROBLEM": "Problem with deleting task. Please try again later.", "LANGUAGE_ASK": ( "🌐 **Please choose your interface language:**\n" "Tap a button below to continue:" diff --git a/telegram_bot_project/states.py b/telegram_bot_project/states.py index c93c925..38e7efb 100644 --- a/telegram_bot_project/states.py +++ b/telegram_bot_project/states.py @@ -7,4 +7,5 @@ class DialogStates(StatesGroup): update_idea = State() waiting_for_update_text = State() confirm_task = State() - task_deadline = State() \ No newline at end of file + task_deadline = State() + delete_task = State() \ No newline at end of file From 0b331b63783e361701c1eacbc1199993b27940a6 Mon Sep 17 00:00:00 2001 From: gnatykdm Date: Thu, 17 Jul 2025 18:17:40 +0200 Subject: [PATCH 2/2] Task-Configuration[Task-Complete-Command] C:8 --- telegram_bot_project/bot/commands.py | 18 ++++++++++++++++ telegram_bot_project/bot/handlers.py | 31 ++++++++++++++++++++++++++++ telegram_bot_project/main.py | 10 +++++++++ telegram_bot_project/messages.py | 8 +++++++ telegram_bot_project/states.py | 3 ++- 5 files changed, 69 insertions(+), 1 deletion(-) diff --git a/telegram_bot_project/bot/commands.py b/telegram_bot_project/bot/commands.py index 7d22bfb..4b7b1ae 100644 --- a/telegram_bot_project/bot/commands.py +++ b/telegram_bot_project/bot/commands.py @@ -187,4 +187,22 @@ async def delete_task_command(message: types.Message, state: FSMContext): await message.answer(MESSAGES[language]['TASK_DELETE_MSG']) await state.set_state(DialogStates.delete_task) + await state.update_data(tasks=tasks) + +#Complete Task Command +async def complete_task_command(message: types.Message, state: FSMContext): + 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: + tasks = await TaskService.get_user_tasks(user_id) + if not tasks: + await message.answer(MESSAGES[language]['NO_TASKS'], reply_markup=task_menu_keyboard()) + return + + await message.answer(MESSAGES[language]['COMPLETE_TASK_MSG']) + await state.set_state(DialogStates.complete_task) await state.update_data(tasks=tasks) \ No newline at end of file diff --git a/telegram_bot_project/bot/handlers.py b/telegram_bot_project/bot/handlers.py index ca40b75..85e4cb9 100644 --- a/telegram_bot_project/bot/handlers.py +++ b/telegram_bot_project/bot/handlers.py @@ -190,6 +190,7 @@ async def process_task_deadline(message: Message, state: FSMContext): except ValueError: await message.answer(MESSAGES[language]['TASK_DEADLINE_INVALID']) + await state.clear() async def process_task_delete(message: Message, state: FSMContext): user_id = message.from_user.id @@ -221,4 +222,34 @@ async def process_task_delete(message: Message, state: FSMContext): except ValueError: await message.answer(MESSAGES[language]['TASK_DELETE_PROBLEM'], reply_markup=task_menu_keyboard()) + await state.clear() + +async def process_task_complete(message: Message, state: FSMContext): + user_id = message.from_user.id + user_find = await UserService.get_user_by_id(user_id) + language = await UserService.get_user_language(user_id) or "ENGLISH" + + if not user_find: + await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM']) + return + data = await state.get_data() + tasks = data.get("tasks") + max_task_num = len(tasks) + + try: + user_number = int(message.text.strip()) + if user_number > max_task_num or user_number < 1: + await message.answer(MESSAGES[language]['COMPLETE_TASK_INVALID'], reply_markup=task_menu_keyboard()) + return + else: + task_to_complete = tasks[user_number - 1] + real_id = task_to_complete["id"] + + print(f"--[INFO] User with id: {user_id} completed task with id: {real_id}") + await TaskService.toggle_task_status(real_id) + await message.answer(MESSAGES[language]['COMPLETE_TASK_SUCCESS'].format(user_number, task_to_complete['task_name']), reply_markup=task_menu_keyboard()) + await state.clear() + except ValueError: + await message.answer(MESSAGES[language]['COMPLETE_TASK_PROBLEM'], reply_markup=task_menu_keyboard()) + await state.clear() \ No newline at end of file diff --git a/telegram_bot_project/main.py b/telegram_bot_project/main.py index a72f21c..b7cca2d 100644 --- a/telegram_bot_project/main.py +++ b/telegram_bot_project/main.py @@ -70,6 +70,14 @@ async def task_menu(message: Message): async def show_tasks(message: Message): await tasks_show_command(message) +@dp.message(Command("complete")) +async def complete_task(message: Message, state: FSMContext): + await complete_task_command(message, state) + +@dp.message(lambda m: m.text == BUTTON_TOGGLE_STATUS) +async def toggle_task_status(message: Message, state: FSMContext): + await complete_task_command(message, state) + @dp.message(lambda m: m.text == BUTTON_ALL_TASKS) async def show_all_tasks(message: Message): await tasks_show_command(message) @@ -112,6 +120,8 @@ async def process_fallback(message: Message, state: FSMContext): await process_task_deadline(message, state) elif current_state == DialogStates.delete_task: await process_task_delete(message, state) + elif current_state == DialogStates.complete_task: + await process_task_complete(message, state) # Main Function async def main(): diff --git a/telegram_bot_project/messages.py b/telegram_bot_project/messages.py index 61764b7..896e81a 100644 --- a/telegram_bot_project/messages.py +++ b/telegram_bot_project/messages.py @@ -41,6 +41,10 @@ "INVALID_TASK_NUM": "Поганий номер задачі", "TASK_DELETED": "Завдання №{} '{}' було видалено.", "TASK_DELETE_PROBLEM": "Проблема з видаленням завдання. Спробуйте пізніше.", + "COMPLETE_TASK_MSG": "Введіть номер завдання, яке ви хочете позначити як виконане", + "COMPLETE_TASK_INVALID": "Невірний номер завдання. Спробуйте ще раз.", + "COMPLETE_TASK_SUCCESS": "Завдання №{} '{}' успішно позначено як виконане.", + "COMPLETE_TASK_PROBLEM": "Проблема з позначенням завдання як виконаного. Спробуйте пізніше.", "LANGUAGE_ASK": ( "🌐 **Оберіть мову інтерфейсу:**\n" "Натисніть кнопку нижче, щоб продовжити:" @@ -94,6 +98,10 @@ "INVALID_TASK_NUM": "Invalid task number", "TASK_DELETED": "Task #{} '{}' has been deleted.", "TASK_DELETE_PROBLEM": "Problem with deleting task. Please try again later.", + "COMPLETE_TASK_MSG": "Please enter the task number you want to mark as complete", + "COMPLETE_TASK_INVALID": "Invalid task number. Please try again later.", + "COMPLETE_TASK_SUCCESS": "Task #{} '{}' marked as complete successfully.", + "COMPLETE_TASK_PROBLEM": "Problem with marking task as complete. Please try again later.", "LANGUAGE_ASK": ( "🌐 **Please choose your interface language:**\n" "Tap a button below to continue:" diff --git a/telegram_bot_project/states.py b/telegram_bot_project/states.py index 38e7efb..65923a2 100644 --- a/telegram_bot_project/states.py +++ b/telegram_bot_project/states.py @@ -8,4 +8,5 @@ class DialogStates(StatesGroup): waiting_for_update_text = State() confirm_task = State() task_deadline = State() - delete_task = State() \ No newline at end of file + delete_task = State() + complete_task = State() \ No newline at end of file