Skip to content

Commit 175be30

Browse files
committed
Отладка записи слов для отслеживания
1 parent d2f1156 commit 175be30

File tree

1 file changed

+87
-27
lines changed

1 file changed

+87
-27
lines changed

handlers/entering_keyword.py

Lines changed: 87 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
from loguru import logger
66

77
from database.database import User, create_keywords_model
8-
from keyboards.keyboards import (back_keyboard)
8+
from keyboards.keyboards import back_keyboard
99
from locales.locales import get_text
1010
from states.states import MyStates
1111
from system.dispatcher import router
1212

1313

1414
@router.message(F.text == "Ввод ключевого слова")
15-
async def entering_keyword(message: Message, state: FSMContext):
15+
async def handle_enter_keyword_menu(message: Message, state: FSMContext):
1616
"""Ввод ключевого слова"""
17-
user_tg = message.from_user
18-
user = User.get(User.user_id == user_tg.id)
17+
telegram_user = message.from_user
18+
user = User.get(User.user_id == telegram_user.id)
1919

2020
logger.info(
21-
f"Пользователь {user_tg.id} {user_tg.username} {user_tg.first_name} {user_tg.last_name} перешел в меню Ввод ключевого слова")
21+
f"Пользователь {telegram_user.id} {telegram_user.username} {telegram_user.first_name} {telegram_user.last_name} перешел в меню Ввод ключевого слова")
2222

2323
await message.answer(
2424
get_text(user.language, "enter_keyword"),
@@ -28,35 +28,95 @@ async def entering_keyword(message: Message, state: FSMContext):
2828

2929

3030
@router.message(MyStates.entering_keyword)
31-
async def handle_keyword(message: Message, state: FSMContext):
31+
async def handle_keywords_submission(message: Message, state: FSMContext):
3232
"""Обработка введённого ключевого слова, словосочетания"""
3333

34-
user_keyword = message.text.strip()
35-
user_tg = message.from_user
36-
logger.info(f"Пользователь ввёл ключевое слово: {user_keyword}")
34+
raw_input = message.text.strip()
35+
telegram_user = message.from_user
36+
logger.info(f"Пользователь ввёл ключевое слово: {raw_input}")
37+
38+
keywords_list = [
39+
keyword.strip()
40+
for keyword in raw_input.split('\n')
41+
if keyword.strip()
42+
]
43+
44+
if not keywords_list:
45+
await message.answer("⚠️ Вы не указали ни одного ключевого слова.")
46+
await state.clear()
47+
return
3748

3849
# Создаём модель с таблицей, уникальной для конкретного пользователя
39-
Keywords = create_keywords_model(user_id=user_tg.id) # Создаём таблицу для групп / ключевых слов
50+
KeywordsModel = create_keywords_model(user_id=telegram_user.id) # Создаём таблицу для групп / ключевых слов
4051

4152
# Проверяем, существует ли таблица (если нет — создаём)
42-
if not Keywords.table_exists():
43-
Keywords.create_table()
44-
logger.info(f"Создана новая таблица для пользователя {user_tg.id}")
45-
46-
# Добавляем запись в таблицу
47-
try:
48-
keywords = Keywords.create(user_keyword=user_keyword)
49-
await message.answer(f"✅ Слово / словосочетание {user_keyword} добавлено в отслеживание.")
50-
logger.info(f"Ключевое слово {user_keyword} добавлено пользователем {user_tg.id}")
51-
except Exception as e:
52-
if "UNIQUE constraint failed" in str(e):
53-
await message.answer("⚠️ Такое слово / словосочетание уже есть в отслеживаемых.")
54-
else:
55-
await message.answer("⚠️ Ошибка при добавлении слова / словосочетания.")
56-
logger.error(f"Ошибка при добавлении ключевого слова: {e}")
57-
await state.clear() # Очищаем состояние
53+
if not KeywordsModel.table_exists():
54+
KeywordsModel.create_table()
55+
logger.info(f"Создана новая таблица для пользователя {telegram_user.id}")
56+
57+
added_keywords = []
58+
skipped_keywords = []
59+
error_keywords = []
60+
61+
# Add each keyword one by one
62+
for keyword in keywords_list:
63+
try:
64+
KeywordsModel.create(user_keyword=keyword)
65+
added_keywords.append(keyword)
66+
except Exception as e:
67+
if "UNIQUE constraint failed" in str(e):
68+
skipped_keywords.append(keyword)
69+
else:
70+
error_keywords.append((keyword, str(e)))
71+
logger.error(f"Error adding keyword {keyword}: {e}")
72+
73+
# Format response message
74+
response_parts = []
75+
76+
if added_keywords:
77+
keywords_preview = added_keywords[:10] # Show first 10
78+
keywords_text = "\n".join(f"• {kw}" for kw in keywords_preview)
79+
if len(added_keywords) > 10:
80+
keywords_text += f"\n... и ещё {len(added_keywords) - 10}"
81+
response_parts.append(
82+
f"✅ Добавлено ключевых слов: {len(added_keywords)}\n{keywords_text}"
83+
)
84+
85+
if skipped_keywords:
86+
skipped_preview = skipped_keywords[:5] # Show first 5
87+
skipped_text = "\n".join(f"• {kw}" for kw in skipped_preview)
88+
if len(skipped_keywords) > 5:
89+
skipped_text += f"\n... и ещё {len(skipped_keywords) - 5}"
90+
response_parts.append(
91+
f"⚠️ Уже были добавлены ({len(skipped_keywords)}):\n{skipped_text}"
92+
)
93+
94+
if error_keywords:
95+
error_text = "\n".join(f"• {kw}: {err}" for kw, err in error_keywords[:3])
96+
if len(error_keywords) > 3:
97+
error_text += f"\n... и ещё {len(error_keywords) - 3} ошибок"
98+
response_parts.append(f"❌ Ошибки при добавлении:\n{error_text}")
99+
100+
# Summary
101+
summary = (
102+
f"\n📊 Итого:\n"
103+
f"• Добавлено: {len(added_keywords)}\n"
104+
f"• Пропущено (дубликаты): {len(skipped_keywords)}\n"
105+
f"• Ошибки: {len(error_keywords)}"
106+
)
107+
response_parts.append(summary)
108+
109+
await message.answer("\n\n".join(response_parts))
110+
111+
# Log statistics
112+
logger.info(
113+
f"Keywords import for user {telegram_user.id}: "
114+
f"added={len(added_keywords)}, skipped={len(skipped_keywords)}, errors={len(error_keywords)}"
115+
)
116+
117+
await state.clear()
58118

59119

60120
def register_entering_keyword_handler():
61121
"""Регистрация обработчиков"""
62-
router.message.register(entering_keyword) # Регистрация обработчика
122+
router.message.register(handle_enter_keyword_menu) # Регистрация обработчика

0 commit comments

Comments
 (0)