init
This commit is contained in:
commit
3ffc8bdbc2
15 changed files with 1221 additions and 0 deletions
69
frontend-tg/main.py
Normal file
69
frontend-tg/main.py
Normal 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())
|
||||
Loading…
Add table
Add a link
Reference in a new issue