Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions telegram_bot_project/bot/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,3 +171,38 @@ 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)

#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)
65 changes: 64 additions & 1 deletion telegram_bot_project/bot/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,4 +189,67 @@ async def process_task_deadline(message: Message, state: FSMContext):
await state.clear()

except ValueError:
await message.answer(MESSAGES[language]['TASK_DEADLINE_INVALID'])
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
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())
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()
43 changes: 22 additions & 21 deletions telegram_bot_project/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -89,10 +70,26 @@ 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)

@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)
Expand Down Expand Up @@ -121,6 +118,10 @@ 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)
elif current_state == DialogStates.complete_task:
await process_task_complete(message, state)

# Main Function
async def main():
Expand Down
16 changes: 16 additions & 0 deletions telegram_bot_project/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@
"TASK_MENU": "Меню задач",
"NO_TASKS": "Наразі у вас немає задач. Для добалення - /task",
"YOUR_TASKS": "Ваші задачі:",
"TASK_DELETE_MSG": "Будьласка введіть номер задачі яку зочете видалити",
"INVALID_TASK_NUM": "Поганий номер задачі",
"TASK_DELETED": "Завдання №{} '{}' було видалено.",
"TASK_DELETE_PROBLEM": "Проблема з видаленням завдання. Спробуйте пізніше.",
"COMPLETE_TASK_MSG": "Введіть номер завдання, яке ви хочете позначити як виконане",
"COMPLETE_TASK_INVALID": "Невірний номер завдання. Спробуйте ще раз.",
"COMPLETE_TASK_SUCCESS": "Завдання №{} '{}' успішно позначено як виконане.",
"COMPLETE_TASK_PROBLEM": "Проблема з позначенням завдання як виконаного. Спробуйте пізніше.",
"LANGUAGE_ASK": (
"🌐 **Оберіть мову інтерфейсу:**\n"
"Натисніть кнопку нижче, щоб продовжити:"
Expand Down Expand Up @@ -86,6 +94,14 @@
"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.",
"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:"
Expand Down
4 changes: 3 additions & 1 deletion telegram_bot_project/states.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ class DialogStates(StatesGroup):
update_idea = State()
waiting_for_update_text = State()
confirm_task = State()
task_deadline = State()
task_deadline = State()
delete_task = State()
complete_task = State()