import TelegramBot from "node-telegram-bot-api"; import dotenv from "dotenv"; import axios from "axios"; import { UserRepository } from "./user.repository.js"; dotenv.config(); const tokenTg = process.env.TOKEN_TG; const tokenAi = process.env.TOKEN_AI; const accessId = process.env.SECRET_ID; const bot = new TelegramBot(tokenTg, { polling: true }); console.log("Бот запущен..."); bot.onText(/\/info/, (msg)=>{ const message = `Информация о боте: \n '/start' - перезапускает чат, забывает контекст прошлого диалого \n '/toggleModel' - Выбор модели (еще не доступен)` const chatId = msg.chat.id bot.sendMessage(chatId, message) }) bot.onText(/\/start/, async(msg) => { const chatId = msg.chat.id; const chatType = msg.chat.type const user = msg.from try{ const createOrUpdateUser = await UserRepository.createOrUpdateUser({ telegramId: user.id, username: user.username, chatId: chatId }); }catch(err){ console.error('Ошибка при создании или обновлении пользователя:', err); } bot.sendMessage(chatId, `Чат перезапущен, тип чата ${chatType}`); }); bot.on('message', async(msg) => { const chatId = msg.chat.id; const user = msg.from if (msg.text && msg.text.startsWith('/')) { return; } if (msg.photo) { bot.sendMessage(chatId, 'Красиво, но такое мне не надо'); return; } if (msg.document) { bot.sendMessage(chatId, 'Такое мне не надо'); return; } if (msg.text) { //bot.sendMessage(chatId, `Ты написал: ${msg.text}`); try{ const last_msg_context = await UserRepository.getContext(user.id) || '' console.log('last_msg_context:', last_msg_context); if(last_msg_context === ''){ console.log('Новый пользователь, начинаем диалог с чистого листа'); const response = await getAIResponse(msg.text, null); bot.sendMessage(chatId, response.message); await UserRepository.updateContext(user.id, response.id); }else{ console.log('Продолжаем диалог, контекст найден'); const response = await getAIResponse(msg.text, last_msg_context); bot.sendMessage(chatId, response.message); await UserRepository.updateContext(user.id, response.id); } }catch(err){ console.error('Ошибка при обработке сообщения:', err); } return; } }); async function getAIResponse(message, context) { try{ const options = { method:'POST', url:`https://agent.timeweb.cloud/api/v1/cloud-ai/agents/${accessId}/call`, headers: { Authorization: `Bearer ${tokenAi}`, 'x-proxy-source': '', 'Content-Type': 'application/json' }, data:{ message: message, parent_message_id: context } } const response = await axios.request(options); return response.data; }catch(err){ console.error('Ошибка при получении ответа от AI:', err); } }