SkyAlone / handlers /callbacks.py
FreshPixels's picture
Rename handlers callbacks.py to handlers/callbacks.py
2d46e89 verified
Raw
History Blame Contribute Delete
3.47 kB
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(
"🔄 <b>Регенерирую ответ...</b>",
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"🗑 <b>Память очищена.</b>\nУдалено сообщений: <code>{count}</code>.",
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"📊 <b>Статистика:</b>\n\n"
f"💬 Ваших сообщений: <code>{stats['user_messages']}</code>\n"
f"📝 Суммаризировано: <code>{stats['summarized_messages']}</code>\n"
f"🔢 Токенов: <code>{stats['total_tokens_used']}</code>\n"
f"⏱ Средняя задержка: <code>{stats['avg_latency_ms']} мс</code>",
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(
"⚙️ <b>Настройки:</b>\n\n"
f"🌡 Temperature: <code>{config.GLM_TEMPERATURE}</code>\n"
f"📏 Max Tokens: <code>{config.GLM_MAX_TOKENS}</code>\n"
f"🔄 Streaming: <code>{'ON' if config.STREAMING_ENABLED else 'OFF'}</code>",
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(),
)