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
3 changes: 1 addition & 2 deletions telegram_bot_project/bot/buttons.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton
from messages import *


def get_language_keyboard() -> InlineKeyboardMarkup:
inline_markup = InlineKeyboardMarkup(inline_keyboard=[], row_width=2)

Expand Down Expand Up @@ -42,7 +41,7 @@ def idea_reply_keyboard() -> ReplyKeyboardMarkup:
idea_reply_keyboard = ReplyKeyboardMarkup(keyboard=[], resize_keyboard=True, row_width=2)

button_menu = KeyboardButton(text=MENU_BUTTON)
button_delete = KeyboardButton(text=DEL_BUTTON)
button_delete = KeyboardButton(text=DEL_IDEA_BUTTON)
button_add = KeyboardButton(text=BUTTON_IDEA)
button_all_ideas = KeyboardButton(text=ALL_IDEAS)

Expand Down
12 changes: 12 additions & 0 deletions telegram_bot_project/bot/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,15 @@ async def ideas_command(message: types.Message):
)

await message.answer(formatted_ideas, reply_markup=idea_reply_keyboard())

# Delete Idea Handler
async def delete_idea_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:
await message.answer(MESSAGES[language]['DELETE_IDEA'])
await state.set_state(DialogStates.delete_idea)
35 changes: 34 additions & 1 deletion telegram_bot_project/bot/handlers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from aiogram.fsm.context import FSMContext
from aiogram.types import Message

from bot.buttons import get_idea_conf_keyboard, menu_reply_keyboard
from bot.buttons import get_idea_conf_keyboard, menu_reply_keyboard, idea_reply_keyboard
from messages import MESSAGES
from service.idea import IdeaService
from service.user import UserService
Expand Down Expand Up @@ -46,3 +46,36 @@ async def process_idea_save(message: Message, state: FSMContext) -> None:
"⚠️ Error saving the idea. Please try again later."
)
)

async def process_idea_delete(message: Message, state: FSMContext) -> None:
user_id = message.from_user.id
user_find = await UserService.get_user_by_id(user_id)
if not user_find or not user_find.get("id"):
await message.answer(MESSAGES["ENGLISH"]['AUTHORIZATION_PROBLEM'])
return

language = await UserService.get_user_language(user_id) or "ENGLISH"
ideas = await IdeaService.get_all_ideas_by_user_id(user_id)

print(f"--[DEBUG] User {user_id} ideas: {ideas}")

try:
user_number = int(message.text.strip())
except ValueError:
await message.answer(MESSAGES[language]['NOT_VALID_IDEA_NUM'], reply_markup=idea_reply_keyboard())
return

index = user_number - 1
if not (0 <= index < len(ideas)):
await message.answer(MESSAGES[language]['INVALID_IDEA_NUM'], reply_markup=idea_reply_keyboard())
return

idea_to_delete = ideas[index]
real_id = idea_to_delete["id"]

print(f"--[DEBUG] Deleting idea with id {real_id} for user {user_id}")

await IdeaService.delete_user_idea(real_id)

await message.answer(MESSAGES[language]['IDEA_DELETED'].format(user_number, idea_to_delete['idea_name']), reply_markup=idea_reply_keyboard())
await state.clear()
14 changes: 11 additions & 3 deletions telegram_bot_project/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
from aiogram.types import Message, CallbackQuery
from config import TOKEN
from bot.commands import *
from bot.handlers import process_idea_save
from bot.handlers import process_idea_save, process_idea_delete
from bot.callbacks import start_callback_language, callback_idea_process
from messages import BUTTON_IDEA
from messages import *
from states import DialogStates

storage: MemoryStorage = MemoryStorage()
Expand All @@ -24,6 +24,7 @@ async def help(message: Message):
await help_command(message)

@dp.message(Command("menu"))
@dp.message(lambda m: m.text == MENU_BUTTON)
async def menu(message: Message):
await menu_command(message)

Expand All @@ -32,13 +33,19 @@ async def language(message: Message):
await language_command(message)

@dp.message(Command("idea"))
@dp.message(lambda m: m.text == BUTTON_IDEA)
async def idea(message: Message, state: FSMContext):
await idea_command(message, state)

@dp.message(Command("ideas"))
@dp.message(lambda m: m.text == ALL_IDEAS)
async def ideas(message: Message):
await ideas_command(message)

@dp.message(lambda m: m.text == DEL_IDEA_BUTTON)
async def delete_idea(message: Message, state: FSMContext):
await delete_idea_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 All @@ -53,7 +60,8 @@ async def process_idea_fallback(message: Message, state: FSMContext):
print(f"[DEBUG] Current state: {current_state}")
if current_state == DialogStates.waiting_for_idea.state:
await process_idea_save(message, state)

elif current_state == DialogStates.delete_idea.state:
await process_idea_delete(message, state)
# Main Function
async def main():
bot = Bot(token=TOKEN)
Expand Down
19 changes: 14 additions & 5 deletions telegram_bot_project/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
"IDEAS_SHOW": "💡 Усі ваші ідеї: ",
"IDEA_EXISTS": "⚠️ Ця ідея вже існує.",
"NO_IDEAS": "📝 Ви ще не маєте ідей.",
"DELETE_IDEA": "ℹ️ Вкажіть номер ідеї, яку хочете видалити",
"NOT_VALID_IDEA_NUM": "❌ Будь ласка, введіть дійсний номер.",
"INVALID_IDEA_NUM": "❌ Неправильний номер. Спробуйте ще раз.",
"IDEA_DELETED": "🗑️ Ідею №{} '{}' було видалено.",
"LANGUAGE_ASK": (
"🌐 **Оберіть мову інтерфейсу:**\n"
"Натисніть кнопку нижче, щоб продовжити:"
Expand Down Expand Up @@ -51,7 +55,11 @@
"IDEA_PROBLEM": "⚠️ There was an issue saving your idea. Please try again.",
"IDEAS_SHOW": "💡 Here are your ideas: ",
"IDEA_EXISTS": "⚠️ This idea already exists",
"DELETE_IDEA": "ℹ️ Enter the idea number you want to delete",
"NOT_VALID_IDEA_NUM": "❌ Please enter a valid number.",
"INVALID_IDEA_NUM": "❌ Invalid number. Please try again.",
"NO_IDEAS": "📝 You don't have any ideas yet. Be the first to save one!",
"IDEA_DELETED": "🗑️ Idea #{} '{}' has been deleted.",
"LANGUAGE_ASK": (
"🌐 **Please choose your interface language:**\n"
"Tap a button below to continue:"
Expand All @@ -67,14 +75,15 @@
}
}

BUTTON_ADD_TASK: str = "➕ Add Task"
BUTTON_ADD_TASK: str = "➕ New Task"
BUTTON_IDEA: str = "💡 Save Idea"
BUTTON_MYDAY: str = "📅 My Day"
BUTTON_SETTINGS: str = "⚙️ Settings"
BUTTON_HELP: str = "❓ Help"
BUTTON_UA_LANG: str = "🇺🇦 Ukrainian"
BUTTON_UA_LANG: str = "🌻 Українська"
BUTTON_EN_LANG: str = "🇬🇧 English"
DEL_BUTTON: str = "🗑️ Delete"
DEL_BUTTON: str = "🗑️ Delete Idea"
DEL_IDEA_BUTTON: str = "🗑️ Delete"
SAVE_BUTTON: str = "💾 Save"
MENU_BUTTON: str = "Menu"
ALL_IDEAS: str = "All ideas"
MENU_BUTTON: str = "📂 Menu"
ALL_IDEAS: str = "📝 All Ideas"
3 changes: 2 additions & 1 deletion telegram_bot_project/states.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

class DialogStates(StatesGroup):
waiting_for_idea = State()
confirm_idea = State()
confirm_idea = State()
delete_idea = State()