diff --git a/handlers/admin.py b/handlers/admin.py
index 40aac2e..bc02acb 100644
--- a/handlers/admin.py
+++ b/handlers/admin.py
@@ -38,6 +38,9 @@ class BroadcastState(StatesGroup):
class SwarmTaskState(StatesGroup):
waiting_for_task = State()
+class JuristState(StatesGroup):
+ waiting_for_question = State()
+
# =============================================================================
# SWARM COMMAND CENTER
# =============================================================================
@@ -55,6 +58,87 @@ async def process_swarm_task(message: Message, state: FSMContext):
# ... (код остается прежним)
pass
+# =============================================================================
+# ЮРИДИЧЕСКИЙ ПОМОЩНИК (NotebookLM)
+# =============================================================================
+
+@router.message(Command('jurist'))
+@router.message(F.text == '⚖️ Юрист (ЖК РФ)')
+@admin_only
+async def cmd_jurist(message: Message, state: FSMContext):
+ """Активация юридического помощника"""
+ await message.answer(
+ "⚖️ ЮРИДИЧЕСКИЙ ПОМОЩНИК (ЖК РФ)\n\n"
+ "Напишите ваш вопрос для анализа на основе судебных дел и ЖК РФ.\n\n"
+ "Я проанализирую ваш запрос через NotebookLM.",
+ parse_mode='HTML'
+ )
+ await state.set_state(JuristState.waiting_for_question)
+
+@router.callback_query(F.data == 'admin_jurist')
+@admin_callback_only
+async def cb_admin_jurist(callback: CallbackQuery, state: FSMContext):
+ """Callback-активация юридического помощника"""
+ await callback.answer()
+ await callback.message.answer(
+ "⚖️ ЮРИДИЧЕСКИЙ ПОМОЩНИК (ЖК РФ)\n\n"
+ "Напишите ваш вопрос для анализа на основе судебных дел и ЖК РФ.\n\n"
+ "Я проанализирую ваш запрос через NotebookLM.",
+ parse_mode='HTML'
+ )
+ await state.set_state(JuristState.waiting_for_question)
+
+@router.message(JuristState.waiting_for_question)
+@admin_only
+async def process_jurist_question(message: Message, state: FSMContext):
+ """Обработка вопроса к юристу через NotebookLM"""
+ status_msg = await message.answer(
+ "⏳ Отправляю запрос в NotebookLM, анализирую судебные материалы и законы (это займет около 10-15 секунд)...",
+ parse_mode='HTML'
+ )
+
+ import asyncio
+ import os
+
+ cmd = [
+ "/home/matrixhasyou/.local/bin/nlm", "query", "notebook",
+ "00ed7d92-1ab2-4159-ac72-1d0c4be21377",
+ message.text
+ ]
+ env = os.environ.copy()
+
+ try:
+ proc = await asyncio.create_subprocess_exec(
+ *cmd,
+ stdout=asyncio.subprocess.PIPE,
+ stderr=asyncio.subprocess.PIPE,
+ env=env
+ )
+ stdout, stderr = await proc.communicate()
+
+ output = stdout.decode('utf-8').strip()
+ error = stderr.decode('utf-8').strip()
+
+ # Убираем предупреждения о новой версии из вывода nlm
+ if "Update available:" in output:
+ output = output.split("Update available:")[0].strip()
+
+ if proc.returncode == 0:
+ if len(output) > 4000:
+ parts = [output[i:i+4000] for i in range(0, len(output), 4000)]
+ await status_msg.edit_text(f"⚖️ Анализ NotebookLM (часть 1):\n\n{parts[0]}", parse_mode='HTML')
+ for part in parts[1:]:
+ await message.answer(part, parse_mode='HTML')
+ else:
+ await status_msg.edit_text(f"⚖️ Анализ NotebookLM:\n\n{output}", parse_mode='HTML')
+ else:
+ await status_msg.edit_text(f"❌ Ошибка запроса к NotebookLM:\n{error or output}")
+ except Exception as e:
+ await status_msg.edit_text(f"❌ Внутренняя ошибка бота: {str(e)}")
+ finally:
+ await state.clear()
+
+
@router.message(F.text & ~F.text.startswith('/') & F.chat.type == 'private')
@admin_only
async def neural_proxy_handler(message: Message):
diff --git a/keyboards/admin_menu.py b/keyboards/admin_menu.py
index 1f2fdc3..b7c6566 100644
--- a/keyboards/admin_menu.py
+++ b/keyboards/admin_menu.py
@@ -45,6 +45,7 @@ def get_admin_main_menu() -> InlineKeyboardMarkup:
)
builder.row(
InlineKeyboardButton(text='⚡ Автоверификация', callback_data='admin_auto_verify'),
+ InlineKeyboardButton(text='⚖️ Юрист (ЖК РФ)', callback_data='admin_jurist'),
)
builder.row(
InlineKeyboardButton(text='❓ Помощь', callback_data='admin_help'),
@@ -75,6 +76,7 @@ def get_admin_reply_menu() -> ReplyKeyboardMarkup:
)
builder.row(
KeyboardButton(text='📤 Рассылка'),
+ KeyboardButton(text='⚖️ Юрист (ЖК РФ)'),
)
builder.row(
KeyboardButton(text='🚫 Отозвать вериф.'),