Advertisement
Gistrec

Отслеживание изменений статусов в вк

Mar 8th, 2019
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const axios = require('axios')
  2.  
  3. // Данные от аккаунта
  4. const login  = 'gistrec@mail.ru'
  5. const passwd = 'secret'
  6. let user_id;      // Пользователь, кому шлем сообщения
  7. let access_token; // Токен аккаунта
  8.  
  9. // ID пользователей, чьи статусы отслеживаем
  10. const users = [
  11.     { id: '266510818', name: 'Ира Котова'  },
  12.     { id: '461168816', name: 'Warm Blanket'}
  13. ]
  14.  
  15. // Статусы пользователей
  16. let statuses = [];
  17.  
  18. /**
  19.  * Получаем токен по логину и паролю
  20.  */
  21. async function getToken() {
  22.     // Параметры для запросы
  23.     const params = {
  24.         client_id:     2274003,                // Данные от приложения андроид
  25.         client_secret: 'hHbZxrka2uZ6jB1inYsH', // Данные от приложения андроид
  26.         grant_type:    'password',
  27.         username:      login,
  28.         password:      passwd,
  29.         scope:         'status,messages',
  30.         v: 5.56
  31.     }
  32.     const response = await axios.get('https://oauth.vk.com/token', { params });
  33.     if (response.data.access_token) {
  34.         console.log('Токен успешно получен')
  35.         user_id = response.data.user_id;
  36.         access_token = response.data.access_token;
  37.     }else {
  38.         console.log('Не удалось получить токен')
  39.         process.exit(1);
  40.     }
  41. }
  42.  
  43. /**
  44.  * Получаем статусы пользователей
  45.  * @param  init - инициализация
  46.  */
  47. async function checkStatuses(init = false) {
  48.     // Для всех пользователей
  49.     for (let user of users) {
  50.         let params = { 'v': '5.92', access_token, user_id: user.id }
  51.         const response = await axios.get('https://api.vk.com/method/status.get', {params});
  52.  
  53.         // Если статусы не совпадают
  54.         if (response.data.response.text != statuses[user.id]) {
  55.             statuses[user.id] = response.data.response.text;
  56.  
  57.             // Если это не инициализация скрипта (получение текущих статусов)
  58.             if (!init) {
  59.                 params['message']   = `У пользователя ${user.name} новый статус: ${statuses[user.id]}`
  60.                 params['random_id'] = Math.floor(Math.random() * 1000);
  61.                 params['user_id']   = user_id;
  62.                 await axios.get('https://api.vk.com/method/messages.send', {params})
  63.  
  64.                 console.log(params['message'])
  65.             }else {
  66.                 console.log(`Статус пользователя ${user.name}: ${statuses[user.id]}`)
  67.             }
  68.         }
  69.     }
  70. }
  71.  
  72. /**
  73.  * Функция запускает скрипт
  74.  */
  75. async function start() {
  76.     // Получаем токен
  77.     await getToken();
  78.     await checkStatuses(true);
  79.  
  80.     // Каждые 10 секунд проверяем статусы пользователей
  81.     setInterval(checkStatuses, 10 * 1000);
  82. }
  83.  
  84. start();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement