Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const request = require('request');
- const { chromium, firefox, webkit } = require('@playwright/test');
- const chat_url = "https://beta.character.ai/chat?char=tcs0Mj4wLIC7EE6mCanQ4OkyHKRUYuIyWTbSm4MCV1s"; // СЮДА ССЫЛКУ НА ЛЮБОГО БОТА
- const vk_token = ""; // СЮДА СВОЙ ВК ТОКЕН, достать тут https://vkhost.github.io/ по кнопке [vk.com]
- const vk_api_ver = "5.131";
- let browser = null;
- (async () => {
- browser = await chromium.launch(); // Or 'firefox' or 'webkit'.
- console.log("Browser started");
- })();
- // Для общения с ботом
- let bot = {
- getLastMessage: async function(_page)
- {
- try
- {
- let message = await _page.locator('.markdown-wrapper-last-msg >> nth=-1').innerText().valueOf();
- message = JSON.stringify(message);
- message = message.slice(1, -1);
- message = message.replaceAll('\n', '. ');
- message = message.replaceAll('\\', '');
- return message;
- }
- catch(e)
- {
- console.log("Error getLastMessage: "+e);
- return false;
- }
- },
- sendMessage: async function(_page, text)
- {
- try
- {
- await _page.fill("#user-input", text);
- await _page.locator('.input-group .py-0 >> nth = 0').click();
- return true;
- }
- catch(e)
- {
- console.log("Error sendMessage: "+e);
- return false;
- }
- },
- };
- // Для мессенджера
- let msg = {
- // Загрузить список диалогов
- getDialogs: function()
- {
- return new Promise(resolve => {
- let post = `https://api.vk.com/method/messages.getDialogs?access_token=${vk_token}&v=${vk_api_ver}`;
- const options = {
- url: post,
- headers: {
- 'Accept': 'application/json',
- 'Accept-Charset': 'utf-8',
- 'Content-Type': 'multipart/form-data',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
- },
- json: true,
- };
- request.get(options, function(err, res, body) {
- resolve(body.response.items);
- });
- });
- },
- // Загрузить сообщение диалога
- // id - айди диалога
- getChatLastMessage: function(id)
- {
- return new Promise(resolve => {
- let post = `https://api.vk.com/method/messages.getHistory?user_id=${id}&access_token=${vk_token}&v=${vk_api_ver}`;
- const options = {
- url: post,
- headers: {
- 'Accept': 'application/json',
- 'Accept-Charset': 'utf-8',
- 'Content-Type': 'multipart/form-data',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
- },
- json: true,
- };
- request.get(options, function(err, res, body) {
- let messages = body.response.items;
- let full_text = ""; // На случай когда тупая селедка пишет тебе дохуя сообщений подряд, надо объединить их в одно
- for(let i = 0; i < 20; i ++)
- {
- if(messages[i])
- {
- if(messages[i].out == 0)
- {
- full_text = messages[i].text+". "+full_text;
- }
- else
- {
- break;
- }
- }
- }
- full_text.replaceAll('\n', '. ');
- resolve(full_text);
- });
- });
- },
- markAsRead: function(id)
- {
- let post = `https://api.vk.com/method/messages.markAsRead?peer_id=${id}&access_token=${vk_token}&v=${vk_api_ver}`;
- const options = {
- url: post,
- headers: {
- 'Accept': 'application/json',
- 'Accept-Charset': 'utf-8',
- 'Content-Type': 'multipart/form-data',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
- },
- json: true,
- };
- request.get(options, function(err, res, body) {
- });
- },
- typing: function(id)
- {
- let post = `https://api.vk.com/method/messages.setActivity?user_id=${id}&type=typing&access_token=${vk_token}&v=${vk_api_ver}`;
- const options = {
- url: post,
- headers: {
- 'Accept': 'application/json',
- 'Accept-Charset': 'utf-8',
- 'Content-Type': 'multipart/form-data',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
- },
- json: true,
- };
- request.get(options, function(err, res, body) {
- });
- },
- sendMessage: function(id, text)
- {
- text = encodeURIComponent(text);
- let post = `https://api.vk.com/method/messages.send?user_id=${id}&random_id=${Math.floor(Math.random() * 1000000)}&message=${text}&access_token=${vk_token}&v=${vk_api_ver}`;
- const options = {
- url: post,
- headers: {
- 'Accept': 'application/json',
- 'Accept-Charset': 'utf-8',
- 'Content-Type': 'multipart/form-data',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
- },
- json: true,
- };
- request.get(options, function(err, res, body) {
- });
- },
- };
- // Создает новый чат с ботом
- let chats = [];
- async function createChat(id)
- {
- let context = await browser.newContext();
- let page = await context.newPage();
- await page.goto(chat_url);
- await page.waitForSelector('.markdown-wrapper-last-msg', { timeout: 30000 });
- await page.locator('.modal-dialog >> text=I understand').click();
- chats.push({
- "page": page,
- "dialog": id,
- });
- return chats.length-1;
- }
- function getChatIndex(id)
- {
- for(let i = 0; i < chats.length; i++)
- {
- if(chats[i])
- {
- if(chats[i]["dialog"] == id) return i;
- }
- }
- return -1;
- }
- function rand(min, max)
- {
- return Math.floor(Math.random() * max ) + min;
- }
- async function checkMessages() {
- // Загружаем диалоги
- console.log("\n\nПроверяю диалоги...");
- let dialogs = await msg.getDialogs();
- for(let i = 0; i < dialogs.length; i ++)
- {
- let d = dialogs[i];
- if(d.message.out == 0) // Ищем неотвеченный чат
- {
- console.log("Есть неотвеченный диалог!");
- let user_id = d.message.user_id; // Получаем айди чата
- let index = getChatIndex(user_id); // Проверяем есть ли уже такой диалог с ботом
- if(index == -1)
- {
- console.log("Создаю новую сессию с ботом...");
- index = await createChat(user_id);
- }
- console.log("Получаю сообщение, котрое нам прислали...");
- let client_message = await msg.getChatLastMessage(user_id); // загружаем последнее сообщение которое нам прислали
- // Просто для визуала
- setTimeout(function() {
- msg.markAsRead(user_id);
- }, rand(500, 1500));
- //
- console.log("Отправляю сообщение боту...");
- let bot_page = chats[index].page;
- await bot.sendMessage(bot_page, client_message); // отправляем боту это сообщение
- await new Promise(resolve => setTimeout(resolve, 6000));
- console.log("Получаю ответ от бота...");
- let bot_message = await bot.getLastMessage(bot_page); // получаем последнее что прислал нам бот
- msg.typing(user_id);
- await new Promise(resolve => setTimeout(resolve, Math.floor(bot_message.length * 200 )));
- console.log("Отправляю сообщение в диалог...");
- await msg.sendMessage(user_id, bot_message); // отправляем селедке то что ответил бот
- console.log("Отправлено!");
- break ;
- }
- }
- setTimeout(checkMessages, 1000);
- };
- setTimeout(checkMessages, 5000);
Add Comment
Please, Sign In to add comment