Капча Редактировано: 28.08.2020 в 04:16

Насущная проблема для программистов, которые пишут что либо под ВК - это капча. В EasyVK нету готовых решений для решения капчи, но есть удобные инструменты для ловли этой ошибки, для дальнейшего решения каким либо удобным способом.


captchaHandler

Это и есть тот самый инструмент. captchaHandler - это один из параметров инициализации EasyVK, который появился в версии 1.1, и существует с того момента в следующем виде:

let captchaHandler

captchaHandler = ({captcha_sid, captcha_img, resolve:solve, vk}) => {
  console.log(`Ohh.... captcha, need solve this captcha (${captcha_img})`)
}

easyvk({
  captchaHandler: captchaHandler    
})

Когда возникает ошибка капчи, EasyVK вызывает эту функцию, передавая в нее такой объект:

{
  captcha_sid: ...,
  captcha_img: ...,
  resolve: callbackFunction () ....,
  vk: EasyVK
}

Функция resolve - это функция, вызывая которую вы пытетесь решить капчу. То есть, если вы знаете код, необходимо вызвать эту функцию, передав в нее ответ капчи. Ниже приведен более полный пример использования captchaHandler'а

const readline = require('readline')
const easyvk = require('easyvk')

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const captchaHandler = ({captcha_sid, captcha_img, resolve:solve, vk}) => {

  rl.question(`Введите капчу для картинки ${captcha_img} `, (key) => {

    //Когда вводится капча в консоль, пробуем решить капчу
    solve(key).then(() => {


      console.log('Капча решена корректно!')

    }).catch(({err, reCall: tryNewCall}) => {

      //Иначе капча не решена, стоит попробовать снова
      console.log('Капче не решена!!!\nПробуем занова')
      tryNewCall() //Пробуем снова, занова запускаем наш captchaHandler, по факту...

      //Не стоит самостоятельно перезапускать функцию captchaHandler, так как в EasyVK
      //для этого имеется функция reCall, которая точно запустит все как нужно

    })

  })
}

easyvk({
  captchaHandlder: captchaHandler
}).then(vk => {

  // пример: vk.call('messages.send', ...)

}).catch(console.error)

Таким образом вы можете ловить все ошибки капчи, решать их, и если есть нужда, останавливать все процессы, до тех пор, пока капча не будет решена, чтобы ваш аккаунт не заморозили за подозрительную активность.
Рекомендую пройти к следующему разделу документации, чтобы ознакомиться со всеми возможностями EasyVK - Методы.