import logging
from aiogram import Router, types, F
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from database import db
from handlers.commands import get_main_menu
logger = logging.getLogger(__name__)
router = Router()
@router.callback_query(F.data == "regenerate")
async def cb_regenerate(callback: types.CallbackQuery) -> None:
"""Помечает последнее сообщение пользователя для регенерации."""
await callback.answer("🔄 Регенерация...")
# Удаляем последний ответ ассистента, чтобы chat handler перегенерировал
user_id = callback.from_user.id
# Получаем последнее сообщение пользователя
history = await db.get_messages(user_id, limit=2)
if len(history) >= 1 and history[-1]["role"] == "user":
await callback.message.answer(
"🔄 Регенерирую ответ...",
parse_mode="HTML",
)
else:
await callback.message.answer(
"❌ Нет сообщения для регенерации.",
parse_mode="HTML",
)
@router.callback_query(F.data == "clear_memory")
async def cb_clear_memory(callback: types.CallbackQuery) -> None:
user_id = callback.from_user.id
count = await db.clear_history(user_id)
await callback.answer("🗑 Память очищена!")
await callback.message.answer(
f"🗑 Память очищена.\nУдалено сообщений: {count}.",
parse_mode="HTML",
reply_markup=get_main_menu(),
)
@router.callback_query(F.data == "show_stats")
async def cb_show_stats(callback: types.CallbackQuery) -> None:
stats = await db.get_stats(callback.from_user.id)
await callback.answer()
await callback.message.answer(
f"📊 Статистика:\n\n"
f"💬 Ваших сообщений: {stats['user_messages']}\n"
f"📝 Суммаризировано: {stats['summarized_messages']}\n"
f"🔢 Токенов: {stats['total_tokens_used']}\n"
f"⏱ Средняя задержка: {stats['avg_latency_ms']} мс",
parse_mode="HTML",
)
@router.callback_query(F.data == "show_settings")
async def cb_show_settings(callback: types.CallbackQuery) -> None:
from config import config
await callback.answer()
kb = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🌡 Temperature", callback_data="set_temp")],
[InlineKeyboardButton(text="📏 Max Tokens", callback_data="set_max_tokens")],
[InlineKeyboardButton(text="🔙 Назад", callback_data="back_to_menu")],
])
await callback.message.answer(
"⚙️ Настройки:\n\n"
f"🌡 Temperature: {config.GLM_TEMPERATURE}\n"
f"📏 Max Tokens: {config.GLM_MAX_TOKENS}\n"
f"🔄 Streaming: {'ON' if config.STREAMING_ENABLED else 'OFF'}",
parse_mode="HTML",
reply_markup=kb,
)
@router.callback_query(F.data == "back_to_menu")
async def cb_back_to_menu(callback: types.CallbackQuery) -> None:
await callback.answer()
await callback.message.answer(
"👋 Главное меню:",
reply_markup=get_main_menu(),
)