update proj
This commit is contained in:
67
bot.js
67
bot.js
@@ -1,16 +1,18 @@
|
|||||||
const TelegramBot = require('node-telegram-bot-api');
|
import TelegramBot from "node-telegram-bot-api";
|
||||||
require('dotenv').config()
|
import dotenv from "dotenv";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
const axios = require('axios')
|
import { UserRepository } from "./user.repository.js";
|
||||||
|
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
const tokenTg = process.env.TOKEN_TG;
|
const tokenTg = process.env.TOKEN_TG;
|
||||||
const tokenAi = process.env.TOKEN_AI;
|
const tokenAi = process.env.TOKEN_AI;
|
||||||
const accessId = process.env.SECRET_ID;
|
const accessId = process.env.SECRET_ID;
|
||||||
|
|
||||||
|
|
||||||
const bot = new TelegramBot(tokenTg, { polling: true });
|
const bot = new TelegramBot(tokenTg, { polling: true });
|
||||||
|
|
||||||
console.log('Бот запущен...');
|
console.log("Бот запущен...");
|
||||||
|
|
||||||
|
|
||||||
bot.onText(/\/info/, (msg)=>{
|
bot.onText(/\/info/, (msg)=>{
|
||||||
@@ -23,14 +25,24 @@ bot.onText(/\/info/, (msg)=>{
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
bot.onText(/\/start/, (msg) => {
|
bot.onText(/\/start/, async(msg) => {
|
||||||
const chatId = msg.chat.id;
|
const chatId = msg.chat.id;
|
||||||
const chatType = msg.chat.type
|
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.sendMessage(chatId, `Чат перезапущен, тип чата ${chatType}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
bot.on('message', (msg) => {
|
bot.on('message', async(msg) => {
|
||||||
const chatId = msg.chat.id;
|
const chatId = msg.chat.id;
|
||||||
|
|
||||||
const user = msg.from
|
const user = msg.from
|
||||||
@@ -50,7 +62,46 @@ bot.on('message', (msg) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (msg.text) {
|
if (msg.text) {
|
||||||
bot.sendMessage(chatId, `Ты написал: ${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;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
16
db.js
Normal file
16
db.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import pg from "pg";
|
||||||
|
const { Pool } = pg;
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
export const pool = new Pool({
|
||||||
|
user: process.env.DATABASE_USER,
|
||||||
|
host: process.env.DATABASE_URL,
|
||||||
|
database: process.env.DATABASE_NAME,
|
||||||
|
password: process.env.DATABASE_PASSWORD,
|
||||||
|
port: 5432,
|
||||||
|
max: 10,
|
||||||
|
idleTimeoutMillis: 30000,
|
||||||
|
connectionTimeoutMillis: 5000
|
||||||
|
});
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
TOKEN_TG =
|
TOKEN_TG =
|
||||||
TOKEN_AI =
|
TOKEN_AI =
|
||||||
SECRET_ID =
|
SECRET_ID =
|
||||||
|
DATABASE_TABLE =
|
||||||
|
DATABASE_NAME =
|
||||||
|
DATABASE_URL =
|
||||||
|
DATABASE_USER =
|
||||||
|
DATABASE_PASSWORD =
|
||||||
@@ -12,6 +12,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.13.2",
|
"axios": "^1.13.2",
|
||||||
"dotenv": "^17.2.3",
|
"dotenv": "^17.2.3",
|
||||||
"node-telegram-bot-api": "^0.67.0"
|
"node-telegram-bot-api": "^0.67.0",
|
||||||
}
|
"pg": "^8.17.2"
|
||||||
|
},
|
||||||
|
"type": "module"
|
||||||
}
|
}
|
||||||
|
|||||||
53
user.repository.js
Normal file
53
user.repository.js
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import { pool } from "./db.js";
|
||||||
|
|
||||||
|
export const UserRepository = {
|
||||||
|
|
||||||
|
async createOrUpdateUser({ telegramId, username, chatId }) {
|
||||||
|
const query = `
|
||||||
|
INSERT INTO users (telegram_id, telegram_username, chat_id, last_msg_context)
|
||||||
|
VALUES ($1, $2, $3, '')
|
||||||
|
ON CONFLICT (telegram_id)
|
||||||
|
DO UPDATE SET
|
||||||
|
telegram_username = EXCLUDED.telegram_username,
|
||||||
|
chat_id = EXCLUDED.chat_id,
|
||||||
|
last_msg_context = '',
|
||||||
|
updated_at = now()
|
||||||
|
RETURNING *;
|
||||||
|
`;
|
||||||
|
|
||||||
|
const values = [telegramId, username, chatId];
|
||||||
|
|
||||||
|
const { rows } = await pool.query(query, values);
|
||||||
|
return rows[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
async getByTelegramId(telegramId) {
|
||||||
|
const { rows } = await pool.query(
|
||||||
|
`SELECT * FROM users WHERE telegram_id = $1`,
|
||||||
|
[telegramId]
|
||||||
|
);
|
||||||
|
return rows[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
async updateContext(telegramId, context) {
|
||||||
|
await pool.query(
|
||||||
|
`UPDATE users SET last_msg_context = $1 WHERE telegram_id = $2`,
|
||||||
|
[context, telegramId]
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
async getContext(telegramId) {
|
||||||
|
const { rows } = await pool.query(
|
||||||
|
`SELECT last_msg_context FROM users WHERE telegram_id = $1`,
|
||||||
|
[telegramId]
|
||||||
|
);
|
||||||
|
return rows[0]?.last_msg_context;
|
||||||
|
},
|
||||||
|
|
||||||
|
async deleteUser(telegramId) {
|
||||||
|
await pool.query(
|
||||||
|
`DELETE FROM users WHERE telegram_id = $1`,
|
||||||
|
[telegramId]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user