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
18 changes: 18 additions & 0 deletions telegram_bot_project/bot/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,4 +205,22 @@ async def complete_task_command(message: types.Message, state: FSMContext):

await message.answer(MESSAGES[language]['COMPLETE_TASK_MSG'])
await state.set_state(DialogStates.complete_task)
await state.update_data(tasks=tasks)

#Update Task Command
async def update_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]['UPDATE_TASK_MSG'])
await state.set_state(DialogStates.update_task_id)
await state.update_data(tasks=tasks)
45 changes: 45 additions & 0 deletions telegram_bot_project/bot/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,4 +252,49 @@ async def process_task_complete(message: Message, state: FSMContext):
await state.clear()
except ValueError:
await message.answer(MESSAGES[language]['COMPLETE_TASK_PROBLEM'], reply_markup=task_menu_keyboard())
await state.clear()

async def process_task_update(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]['INVALID_TASK_NUM'], reply_markup=task_menu_keyboard())
else:
task_to_update = tasks[user_number - 1]
real_id = task_to_update["id"]

await message.answer(MESSAGES[language]['UPDATE_TASK_NAME_MSG'])
await state.update_data(task_id=real_id, u_number=user_number)
await state.set_state(DialogStates.update_task_name)

except ValueError:
await message.answer(MESSAGES[language]['UPDATE_TASK_PROBLEM'], reply_markup=task_menu_keyboard())
await state.clear()

async def process_save_updated_task_name(message: Message, state: FSMContext):
data = await state.get_data()
task_id = data.get("task_id")
user_number = data.get("u_number")

new_task_name = message.text.strip()

if not new_task_name:
await message.answer(MESSAGES["ENGLISH"]['UPDATE_TASK_NAME_INVALID'], reply_markup=task_menu_keyboard())
return
else:
print(f"--[INFO] User with id: {message.from_user.id} updated task name: {new_task_name}")
await TaskService.update_task(task_id=task_id, task_name=new_task_name)
await message.answer(MESSAGES["ENGLISH"]['UPDATE_TASK_SUCCESS'].format(user_number), reply_markup=task_menu_keyboard())
await state.clear()
14 changes: 14 additions & 0 deletions telegram_bot_project/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.types import CallbackQuery, Message
from aiogram.fsm.context import FSMContext
from sqlalchemy import lambda_stmt

from bot.callbacks import (
start_callback_language,
callback_idea_process,
Expand Down Expand Up @@ -90,6 +92,14 @@ async def delete_task(message: Message, state: FSMContext):
async def drop_task(message: Message, state: FSMContext):
await delete_task_command(message, state)

@dp.message(Command("updatetask"))
async def update_task(message: Message, state: FSMContext):
await update_task_command(message, state)

@dp.message(lambda m: m.text == BUTTON_EDIT_TASK)
async def edit_task(message: Message, state: FSMContext):
await update_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 @@ -122,6 +132,10 @@ async def process_fallback(message: Message, state: FSMContext):
await process_task_delete(message, state)
elif current_state == DialogStates.complete_task:
await process_task_complete(message, state)
elif current_state == DialogStates.update_task_id:
await process_task_update(message, state)
elif current_state == DialogStates.update_task_name:
await process_save_updated_task_name(message, state)

# Main Function
async def main():
Expand Down
Loading