Guest User

Untitled

a guest
Nov 22nd, 2022
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.37 KB | None | 0 0
  1. const request = require('request');
  2.  
  3.  
  4. const { chromium, firefox, webkit } = require('@playwright/test');
  5.  
  6.  
  7. const chat_url = "https://beta.character.ai/chat?char=tcs0Mj4wLIC7EE6mCanQ4OkyHKRUYuIyWTbSm4MCV1s"; // СЮДА ССЫЛКУ НА ЛЮБОГО БОТА
  8.  
  9. const vk_token = ""; // СЮДА СВОЙ ВК ТОКЕН, достать тут https://vkhost.github.io/ по кнопке [vk.com]
  10.  
  11. const vk_api_ver = "5.131";
  12.  
  13. let browser = null;
  14.  
  15.  
  16. (async () => {
  17.  
  18. browser = await chromium.launch(); // Or 'firefox' or 'webkit'.
  19.  
  20. console.log("Browser started");
  21.  
  22. })();
  23.  
  24.  
  25. // Для общения с ботом
  26. let bot = {
  27.  
  28. getLastMessage: async function(_page)
  29. {
  30. try
  31. {
  32. let message = await _page.locator('.markdown-wrapper-last-msg >> nth=-1').innerText().valueOf();
  33.  
  34. message = JSON.stringify(message);
  35.  
  36. message = message.slice(1, -1);
  37.  
  38. message = message.replaceAll('\n', '. ');
  39.  
  40. message = message.replaceAll('\\', '');
  41.  
  42. return message;
  43. }
  44. catch(e)
  45. {
  46. console.log("Error getLastMessage: "+e);
  47. return false;
  48. }
  49. },
  50.  
  51.  
  52. sendMessage: async function(_page, text)
  53. {
  54. try
  55. {
  56. await _page.fill("#user-input", text);
  57.  
  58. await _page.locator('.input-group .py-0 >> nth = 0').click();
  59.  
  60. return true;
  61. }
  62. catch(e)
  63. {
  64. console.log("Error sendMessage: "+e);
  65. return false;
  66. }
  67. },
  68. };
  69.  
  70.  
  71. // Для мессенджера
  72. let msg = {
  73.  
  74. // Загрузить список диалогов
  75. getDialogs: function()
  76. {
  77. return new Promise(resolve => {
  78.  
  79. let post = `https://api.vk.com/method/messages.getDialogs?access_token=${vk_token}&v=${vk_api_ver}`;
  80.  
  81. const options = {
  82. url: post,
  83. headers: {
  84. 'Accept': 'application/json',
  85. 'Accept-Charset': 'utf-8',
  86. 'Content-Type': 'multipart/form-data',
  87. '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'
  88. },
  89. json: true,
  90. };
  91.  
  92.  
  93. request.get(options, function(err, res, body) {
  94.  
  95. resolve(body.response.items);
  96. });
  97. });
  98. },
  99.  
  100.  
  101. // Загрузить сообщение диалога
  102. // id - айди диалога
  103.  
  104. getChatLastMessage: function(id)
  105. {
  106. return new Promise(resolve => {
  107.  
  108. let post = `https://api.vk.com/method/messages.getHistory?user_id=${id}&access_token=${vk_token}&v=${vk_api_ver}`;
  109.  
  110. const options = {
  111. url: post,
  112. headers: {
  113. 'Accept': 'application/json',
  114. 'Accept-Charset': 'utf-8',
  115. 'Content-Type': 'multipart/form-data',
  116. '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'
  117. },
  118. json: true,
  119. };
  120.  
  121.  
  122. request.get(options, function(err, res, body) {
  123.  
  124. let messages = body.response.items;
  125.  
  126. let full_text = ""; // На случай когда тупая селедка пишет тебе дохуя сообщений подряд, надо объединить их в одно
  127.  
  128. for(let i = 0; i < 20; i ++)
  129. {
  130. if(messages[i])
  131. {
  132. if(messages[i].out == 0)
  133. {
  134. full_text = messages[i].text+". "+full_text;
  135. }
  136. else
  137. {
  138. break;
  139. }
  140. }
  141. }
  142.  
  143. full_text.replaceAll('\n', '. ');
  144.  
  145. resolve(full_text);
  146. });
  147. });
  148. },
  149.  
  150. markAsRead: function(id)
  151. {
  152. let post = `https://api.vk.com/method/messages.markAsRead?peer_id=${id}&access_token=${vk_token}&v=${vk_api_ver}`;
  153.  
  154. const options = {
  155. url: post,
  156. headers: {
  157. 'Accept': 'application/json',
  158. 'Accept-Charset': 'utf-8',
  159. 'Content-Type': 'multipart/form-data',
  160. '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'
  161. },
  162. json: true,
  163. };
  164.  
  165.  
  166. request.get(options, function(err, res, body) {
  167.  
  168. });
  169. },
  170.  
  171. typing: function(id)
  172. {
  173. let post = `https://api.vk.com/method/messages.setActivity?user_id=${id}&type=typing&access_token=${vk_token}&v=${vk_api_ver}`;
  174.  
  175. const options = {
  176. url: post,
  177. headers: {
  178. 'Accept': 'application/json',
  179. 'Accept-Charset': 'utf-8',
  180. 'Content-Type': 'multipart/form-data',
  181. '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'
  182. },
  183. json: true,
  184. };
  185.  
  186.  
  187. request.get(options, function(err, res, body) {
  188.  
  189. });
  190. },
  191.  
  192. sendMessage: function(id, text)
  193. {
  194. text = encodeURIComponent(text);
  195.  
  196. 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}`;
  197.  
  198. const options = {
  199. url: post,
  200. headers: {
  201. 'Accept': 'application/json',
  202. 'Accept-Charset': 'utf-8',
  203. 'Content-Type': 'multipart/form-data',
  204. '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'
  205. },
  206. json: true,
  207. };
  208.  
  209.  
  210. request.get(options, function(err, res, body) {
  211.  
  212. });
  213. },
  214.  
  215. };
  216.  
  217.  
  218. // Создает новый чат с ботом
  219. let chats = [];
  220.  
  221. async function createChat(id)
  222. {
  223. let context = await browser.newContext();
  224.  
  225. let page = await context.newPage();
  226.  
  227. await page.goto(chat_url);
  228.  
  229. await page.waitForSelector('.markdown-wrapper-last-msg', { timeout: 30000 });
  230.  
  231. await page.locator('.modal-dialog >> text=I understand').click();
  232.  
  233. chats.push({
  234. "page": page,
  235. "dialog": id,
  236. });
  237.  
  238. return chats.length-1;
  239. }
  240.  
  241. function getChatIndex(id)
  242. {
  243. for(let i = 0; i < chats.length; i++)
  244. {
  245. if(chats[i])
  246. {
  247. if(chats[i]["dialog"] == id) return i;
  248. }
  249. }
  250.  
  251. return -1;
  252. }
  253.  
  254.  
  255. function rand(min, max)
  256. {
  257. return Math.floor(Math.random() * max ) + min;
  258. }
  259.  
  260.  
  261.  
  262. async function checkMessages() {
  263.  
  264. // Загружаем диалоги
  265.  
  266. console.log("\n\nПроверяю диалоги...");
  267.  
  268. let dialogs = await msg.getDialogs();
  269.  
  270. for(let i = 0; i < dialogs.length; i ++)
  271. {
  272. let d = dialogs[i];
  273.  
  274. if(d.message.out == 0) // Ищем неотвеченный чат
  275. {
  276. console.log("Есть неотвеченный диалог!");
  277.  
  278. let user_id = d.message.user_id; // Получаем айди чата
  279.  
  280.  
  281.  
  282. let index = getChatIndex(user_id); // Проверяем есть ли уже такой диалог с ботом
  283.  
  284. if(index == -1)
  285. {
  286. console.log("Создаю новую сессию с ботом...");
  287. index = await createChat(user_id);
  288. }
  289.  
  290.  
  291.  
  292. console.log("Получаю сообщение, котрое нам прислали...");
  293. let client_message = await msg.getChatLastMessage(user_id); // загружаем последнее сообщение которое нам прислали
  294.  
  295.  
  296. // Просто для визуала
  297. setTimeout(function() {
  298.  
  299. msg.markAsRead(user_id);
  300.  
  301. }, rand(500, 1500));
  302. //
  303.  
  304.  
  305. console.log("Отправляю сообщение боту...");
  306.  
  307. let bot_page = chats[index].page;
  308. await bot.sendMessage(bot_page, client_message); // отправляем боту это сообщение
  309.  
  310.  
  311.  
  312. await new Promise(resolve => setTimeout(resolve, 6000));
  313.  
  314.  
  315. console.log("Получаю ответ от бота...");
  316. let bot_message = await bot.getLastMessage(bot_page); // получаем последнее что прислал нам бот
  317.  
  318.  
  319. msg.typing(user_id);
  320.  
  321. await new Promise(resolve => setTimeout(resolve, Math.floor(bot_message.length * 200 )));
  322.  
  323.  
  324. console.log("Отправляю сообщение в диалог...");
  325. await msg.sendMessage(user_id, bot_message); // отправляем селедке то что ответил бот
  326.  
  327. console.log("Отправлено!");
  328.  
  329. break ;
  330. }
  331. }
  332.  
  333. setTimeout(checkMessages, 1000);
  334. };
  335.  
  336.  
  337. setTimeout(checkMessages, 5000);
Add Comment
Please, Sign In to add comment