diff --git a/backend/src/application/use_cases/document_use_cases.py b/backend/src/application/use_cases/document_use_cases.py
index f5356c2..536b7a6 100644
--- a/backend/src/application/use_cases/document_use_cases.py
+++ b/backend/src/application/use_cases/document_use_cases.py
@@ -115,8 +115,9 @@ class DocumentUseCases:
await self._send_telegram_notification(
telegram_id,
"🔄 Начинаю индексацию документа...\n\n"
- f"Документ: {title}\n"
- "Это может занять некоторое время."
+ f"📄 Документ: {title}\n\n"
+ f"Это может занять некоторое время.\n"
+ f"Вы получите уведомление по завершении."
)
chunks = await self.rag_service.index_document(document)
@@ -124,9 +125,12 @@ class DocumentUseCases:
await self._send_telegram_notification(
telegram_id,
"✅ Индексация завершена!\n\n"
- f"Документ: {title}\n"
- f"Проиндексировано чанков: {len(chunks)}\n\n"
- "Теперь вы можете задавать вопросы по этому документу."
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"📄 Документ: {title}\n"
+ f"📊 Проиндексировано чанков: {len(chunks)}\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"💡 Теперь вы можете задавать вопросы по этому документу!\n"
+ f"Просто напишите ваш вопрос, и я найду ответ на основе загруженного документа."
)
except Exception as e:
print(f"Ошибка при автоматической индексации документа {document.document_id}: {e}")
diff --git a/tg_bot/infrastructure/telegram/handlers/question_handler.py b/tg_bot/infrastructure/telegram/handlers/question_handler.py
index ab1a1c7..b775e86 100644
--- a/tg_bot/infrastructure/telegram/handlers/question_handler.py
+++ b/tg_bot/infrastructure/telegram/handlers/question_handler.py
@@ -3,6 +3,8 @@ from aiogram.types import Message
from tg_bot.config.settings import settings
from tg_bot.domain.user_service import UserService, User
from tg_bot.application.services.rag_service import RAGService
+import re
+
router = Router()
rag_service = RAGService()
@@ -60,22 +62,37 @@ async def process_premium_question(message: Message, user: User, question_text:
# Беседа уже сохранена в бэкенде через API /rag/question
+ import re
+ formatted_answer = answer
+ formatted_answer = re.sub(r'\*\*(.+?)\*\*', r'\1', formatted_answer)
+ formatted_answer = re.sub(r'^(\d+)\.\s+', r'\1. ', formatted_answer, flags=re.MULTILINE)
+ formatted_answer = formatted_answer.replace("- ", "• ")
+
response = (
f"Ваш вопрос:\n"
f"{question_text[:200]}\n\n"
- f"Ответ:\n{answer}\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"💬 Ответ:\n\n"
+ f"{formatted_answer}\n\n"
)
if sources:
- response += f"Источники:\n"
+ response += f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ response += f"📚 Источники:\n"
for idx, source in enumerate(sources[:5], 1):
title = source.get('title', 'Без названия')
- response += f"{idx}. {title}\n"
- response += "\nИспользуйте /mycollections для просмотра всех коллекций\n\n"
+ try:
+ from urllib.parse import unquote
+ title = unquote(title)
+ except:
+ pass
+ response += f" {idx}. {title}\n"
+ response += "\n💡 Используйте /mycollections для просмотра всех коллекций\n\n"
response += (
- f"Статус: Premium (вопросов безлимитно)\n"
- f"Всего вопросов: {user.questions_used}"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"✨ Статус: Premium (вопросов безлимитно)\n"
+ f"📊 Всего вопросов: {user.questions_used}"
)
except Exception as e:
@@ -83,9 +100,12 @@ async def process_premium_question(message: Message, user: User, question_text:
response = (
f"Ваш вопрос:\n"
f"{question_text[:200]}\n\n"
- f"Ошибка при генерации ответа. Попробуйте позже.\n\n"
- f"Статус: Premium\n"
- f"Всего вопросов: {user.questions_used}"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"❌ Ошибка при генерации ответа.\n"
+ f"Попробуйте позже.\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"✨ Статус: Premium\n"
+ f"📊 Всего вопросов: {user.questions_used}"
)
await message.answer(response, parse_mode="HTML")
@@ -109,40 +129,56 @@ async def process_free_question(message: Message, user: User, question_text: str
# Уже все сохранили через /rag/question
+ formatted_answer = answer
+ formatted_answer = re.sub(r'\*\*(.+?)\*\*', r'\1', formatted_answer)
+ formatted_answer = re.sub(r'^(\d+)\.\s+', r'\1. ', formatted_answer, flags=re.MULTILINE)
+ formatted_answer = formatted_answer.replace("- ", "• ")
response = (
f"Ваш вопрос:\n"
f"{question_text[:200]}\n\n"
- f"Ответ:\n{answer}\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"💬 Ответ:\n\n"
+ f"{formatted_answer}\n\n"
)
if sources:
- response += f"Источники:\n"
+ response += f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ response += f"📚 Источники:\n"
for idx, source in enumerate(sources[:5], 1):
title = source.get('title', 'Без названия')
- response += f"{idx}. {title}\n"
- response += "\nИспользуйте /mycollections для просмотра всех коллекций\n\n"
+ try:
+ from urllib.parse import unquote
+ title = unquote(title)
+ except:
+ pass
+ response += f" {idx}. {title}\n"
+ response += "\n💡 Используйте /mycollections для просмотра всех коллекций\n\n"
response += (
- f"Статус: Бесплатный доступ\n"
- f"Использовано вопросов: {user.questions_used}/{settings.FREE_QUESTIONS_LIMIT}\n"
- f"Осталось бесплатных: {remaining}\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"📊 Статус: Бесплатный доступ\n"
+ f"📈 Использовано вопросов: {user.questions_used}/{settings.FREE_QUESTIONS_LIMIT}\n"
+ f"🎯 Осталось бесплатных: {remaining}\n\n"
)
if remaining <= 3 and remaining > 0:
- response += f"Осталось мало вопросов! Для продолжения используйте /buy\n\n"
+ response += f"⚠️ Осталось мало вопросов! Для продолжения используйте /buy\n\n"
- response += f"Для безлимитного доступа: /buy"
+ response += f"💎 Для безлимитного доступа: /buy"
except Exception as e:
print(f"Error generating answer: {e}")
response = (
f"Ваш вопрос:\n"
f"{question_text[:200]}\n\n"
- f"Ошибка при генерации ответа. Попробуйте позже.\n\n"
- f"Статус: Бесплатный доступ\n"
- f"Использовано вопросов: {user.questions_used}/{settings.FREE_QUESTIONS_LIMIT}\n"
- f"Осталось бесплатных: {remaining}\n\n"
- f"Для безлимитного доступа: /buy"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"❌ Ошибка при генерации ответа.\n"
+ f"Попробуйте позже.\n\n"
+ f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"
+ f"📊 Статус: Бесплатный доступ\n"
+ f"📈 Использовано вопросов: {user.questions_used}/{settings.FREE_QUESTIONS_LIMIT}\n"
+ f"🎯 Осталось бесплатных: {remaining}\n\n"
+ f"💎 Для безлимитного доступа: /buy"
)
await message.answer(response, parse_mode="HTML")