This commit is contained in:
glitch 2025-07-16 20:32:55 +05:00
commit 3ffc8bdbc2
15 changed files with 1221 additions and 0 deletions

69
frontend-tg/main.py Normal file
View file

@ -0,0 +1,69 @@
# admin_bot/main.py
import asyncio
import toml
import json
import nats
from nats.errors import TimeoutError
from loguru import logger
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message
from aiogram.enums import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.client.default import DefaultBotProperties
# Загрузка конфигурации
config = toml.load("config.toml")
BOT_TOKEN = config["telegram"]["bot_token"]
ADMIN_ID = config["telegram"]["admin_id"]
NATS_URL = config["nats"]["url"]
NATS_SUBJECT = config["nats"].get("subject", "llm.inbox")
# Инициализация
bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher(storage=MemoryStorage())
# Подключение к NATS
nats_client = None
@dp.message()
async def handle_message(message: Message):
logger.info(f"Получено сообщение от {message.from_user.id}: {message.text}")
if message.from_user.id != ADMIN_ID:
logger.warning(f"Пользователь {message.from_user.id} не является админом. Доступ запрещён.")
await message.answer("⛔️ У вас нет прав на использование этого бота.")
return
if nats_client is None:
logger.error("Попытка отправки в NATS до инициализации клиента.")
await message.answer("🚫 NATS клиент не инициализирован.")
return
payload = {
"user_id": message.from_user.id,
"text": message.text
}
try:
response = await nats_client.request(NATS_SUBJECT.encode(), json.dumps(payload).encode(), timeout=30)
data = json.loads(response.data.decode())
await message.answer(data.get("response", "[no response]"))
except TimeoutError:
await message.answer("⌛ Превышен таймаут ожидания ответа.")
except Exception as e:
logger.exception("Ошибка при получении ответа от LLM")
await message.answer("❌ Ошибка при получении ответа.")
async def main():
global nats_client
logger.info("Подключение к NATS...")
nats_client = await nats.connect(servers=[NATS_URL])
logger.success("Подключение к NATS успешно.")
logger.info("Запуск polling Telegram-бота...")
await dp.start_polling(bot)
if __name__ == "__main__":
logger.info("Запуск бота...")
asyncio.run(main())