Все доступные изменения, начиная с 2.1.1 версии
- Исправлена работа Bots LongPoll при ошибках
- Исправлена работа метода
uploader.uploadFetchedFile()
в случаях, когда сервер отвечал с неизвестным mime типом. Теперь расширение точно можно указать вручную. - Исправлена работа
userAgent
в статических методах
- Теперь в методе
http.request()
первым аргументом можно указать полный адрес сервера, а не толькоpath
для vk.com - Теперь в HTTP Клиенте при вводе неправильного логина или пароля, будет выдаваться ошибка.
- Добавлен метод
request.fullRequest()
, который возвращает полный ответ сервера в том виде, в котором он приходит изresolve()
библиотекиnode-fetch
. Можно будет узнать конечные заголовки, а такжеurl
let client = await vk.http.loginByForm({...});
let response = await client.fullRequest('https://vk.com/feed2.php');
console.log(response.url, await response.text());
- Исправлена работа дебаггера в некоторых местах
- Исправлено отсутствие ошибки при авторизации по невалидному прокси
- Добавлена информация
ban_info
в ошибках запросов к API. Теперь можно узнать причину невалидного токена.
- Добавлен автоматический запрос ключа подтверждения для двухфакторной аутентификации
- Исправлены ошибки подключения LongPoll
- Исправлено заполнение памяти AbortController
- Убраны предупреждения о том, что свойство
vkr
удалено. Теперь оно удалено окончательно, дебажить стало проще.
- Исправлена авторизация приложений по сервисному ключу доступа
- Исправлено отсутствие лога запросов в некоторых местах
- Добавлен объкт
AbortController
для отмены запросов к API. Может пригодиться, если, например, прокси долго отвечает.
let abortController = new easyvk.AbortController();
vk.call('users.get', {}, 'get', {
signal: abortController.signal
}).then(console.log).catch(console.error);
setTimeout(() => {
abortController.abort();
}, 1000);
- Возвращение в норму авторизации. Думал. что фикс будет сложнее и дольше. В easyvk теперь осталась только платформа
android
. Другие платформы рекомендуется подключать самостоятельно, если в этом есть необходимость. - Убран параметр авторизации
platform
- В качестве меры предосторожности, авторизация пользователей по официальным приложениям отключена (авторизовавшиеся моментально попадают в бан). Для остальных приложений все работает в обычном режиме. Блокировки не коснулись групп, токены продолжают работу.
- Исправлен баг User LongPoll API
- Исправлен баг с методом
.close()
в LongPoll API - Исправлен баг дебаггера, он не экспортировался, а также события приходили с неверным типом
- Добавлена опция
onlyInstance
в функцию авторизации, для получения инстанса ВК без ошибкиThis application has no right to generate service token.
- Отказ от
fast-event-emitter
, в пользу нативногоevents
- Исправлен баг с импортами
- Исправлен баг юзер-агента в static методе
- Исправлена ошибка, из-за которой в очереди execute'ов в случае нескольких ошибок могли неправильно вызываться rjrect'ы (ошибка одного щзапроса приходила в ошибку другого)
- Библиотека переписана на ES6 импорты
- В HTTP Клиенте добавлена поддержка автоматического восстановления
rmxsid
кукиса. Деактивация кукиса может появлятся при смене IP адреса и каких-нибудь других характеристик соединения. Для обновления делается специальный запрос. - В HTTP Клиенте пофикшен URL адрес капчи
- Исправлен баг с неработающим прокси в HTTP Клиенте. По факту он работал, но при авторизации из-за
fetch-cookie
он терялся, ВК запоминал сессию на другой IP. Было написано собственное решение для реализации HTTP сессии, с все тем жеtough-cookie
иnode-fetch
. Теперь прокси работает при каждом запросе.
- Исправлен баг с неработающим
User-Agent
header'ом в HTTP Клиенте
- В HTTP Клиенте пофикшена работы с
utf8
- В Bots LongPoll исправлено переподключение (ошибки Timeout отличются у
request
иfetch
)
- Добавлен метод
vk.uploader.upload()
для максимально упрощенной загрузки файла на сервер
vk.uploader.upload({
getUrlMethod: "photos.getMarketAlbumUploadServer",
getUrlParams: {
group_id: 1
},
saveMethod: "photos.saveMarketAlbumPhoto",
saveParams: {
group_id: 1,
// server, hash подставятся автоматически
},
file: 'https://vk.com/images/community_50.png',
isWeb: true
})
- Добавлена поддержка
captchaHandler
в HTTP Клиенте - Добавлен статический метод
easyvk.static.randomId()
для генерации случайного числа специально для отправки сообщений. - Добавлена поддержка двухфакторной аутентификации для HTTP Клиента
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
async function loginByFormWithTwoFactorSupport (code='') {
return vk.http.loginByForm({
cookies: './cookies',
reauth: true,
code
}).catch(e => {
if (e.is2fa) {
return new Promise((resolve, reject) => {
rl.question(`Введите ключ авторизации `, (key) => {
return loginByFormWithTwoFactorSupport(key).then(resolve).catch(reject)
})
})
} else {
throw e;
}
})
}
let client = await loginByFormWithTwoFactorSupport();
vk.call('messages.send', {
peer_id: 1,
message: "Привет!",
random_id: easyvk.randomId()
})
- Добавлена настройка
clear
для очищения сессии после иницализации. - В
easyvk.class
добавлен новый класс -EasyVKError
- Библиотека теперь работает на основе модуля
node-fetch
, все комопненты переписаны на нее. - Пожалуй, самое важное изменение этого обновления - отказ от скобок в ответах почти всех промисов библиотеки.
let {vkr: res} = await vk.call('users.get')
let res = await vk.call('users.get')
Изменения коснулись всех компонентов, поэтому проверяйте обновленную документацию, если у вас что-то не получается
let {connection} = await vk.bots.longpoll.connect()
let connection = await vk.bots.longpoll.connect()
- В настройках
easyvk
изменились названия параметров. Обратная совместимость пока что поддерживается, но рекомендую перейти на новые имена настроек
Было | Стало |
---|---|
access_token | token |
api_v | v |
save_session | save |
session_file | sessionFile |
captcha_sid | captchaSid |
captcha_key | captchaKey |
client_secret | clientSecret |
client_id | clientId |
clean_session | clear |
-
В связи с трудной поддержкой, в HTTP Клиенте удален класс для работы Audio API. Теперь Audio API не поддерживается библиотекой
-
По скольку Audio API удален, а я предполагаю, что все-таки кому-то что-то нужно делать, и неофициально, то я сделал метод
client.request()
публичным и задокументировал его на сайте-документации. Он стал работать проще, логичнее и стабильнее. -
В методе
client.request()
теперь ответ будет возвращаться в JSON. Если в ответе нет JSON, то он вернет оригинальную строкуbody
. -
В HTTP Клиенте убрана проверка авторизации. Теперь проблемы лимита атворизаций не будет. Но в своих приложениях рекомендуется делать собственные проверки пароля и логина, через официальный API
-
HTTP Клиент теперь настраивается независимо от основной функции-инициализатора. То есть, у него появились собственные параметры и настройки, такие как
captchahandler
,username
,password
,reauth
и другие -
Теперь, настраивая Callback API, вы можете кастомизировать работу сервера. То есть теперь не
easyvk
создает инстансexpress
, а вы, собственноручно. Это позволит вам изменять работу сервера как вам угодно и анализировать трафик.
const express = require('express');
const app = express();
let connection = await easyvk.callbackAPI.listen({
port: process.env.PORT || 8080,
groupId: 1,
secret: 'SecretCodeForGroupOrJustPassword',
confirmCode: 'TestConfirmationCode',
app
})
- Теперь статические методы дублируются в верхнем уровне объекта
Auth
(easyvk)
async function reply (event, replyText="") {
return vk.call('messages.send', {
peer_id: event.peer_id,
message: replyText,
random_id: easyvk.randomId() // Ранее это было бы просто easyvk.static.randomId()
}).catch(console.error)
}
let res = await reply(event, "Hello!");
- Исправлена ошибка, из-за которой в
highload
режиме не всегда возвращался ответ (он был равенempty
) - В Callback API исправлено отсутствие информации об ошибке, когда в запросе не приходит
group_id
- Исправлена ошибка Callback API, когда он работал без инициализации
easyvk
- В некоторых местах исправлен ненужный вызов debug'ера
- В HTTP Клиенте исправлена работа метода
client.readStories()
иclient.readFeedStories()
- Исправлена работа метода
vk.widgets.getLiveViews()
- Исправлена работа
captchaHandler
, в некоторых ситуациях он не работал - Файл
evkerrors.json
теперь перестал быть.json
файлом и стал просто.js
модулем. Ранее на некоторых серверах могла возникнуть ошибка из-за отсутствия прав доступа для открытия этого файла, поэтому пришлось отказаться от этого способа работы библиотеки. - В режиме
highload
исправлена ошибкак ловли капчи, раньше капча ловилась, но после ее обработки ответ не возвращался. - В Streaming API исправлена работа с методом
stream.initRules()
. Раньше, если функцияcallbackError
не была передана, возникала очень непонятная ошибка.
- Исправлена работа авторизации группы по токену, ошибка
Group authorization failed: method is unavailable with group auth
Всвязи с хотфиксом, в библиотеку добавлен новый параметр для настройки - authType
.
Данный параметр отвечает за строгое указание по какому методу вести авторизацию через access_token
, чтобы избежать неожиданных багов подобно тому, что появился сегодня.
const easyvk = require('easyvk')
easyvk({
access_token: 'token',
authType: easyvk.GROUP_AUTH_TYPE
}).then(vk => {
console.log(vk.session)
})
Его доступные значения:
[
easyvk.USER_AUTH_TYPE, // Авторизация пользователя по токену
easyvk.GROUP_AUTH_TYPE, // Авторизация группы по токену
easyvk.APPLICATION_AUTH_TYPE // Авторизация приложения по сервисному токену
]
Значение обязательно должно находится из доступных в Easy VK
console.log(easyvk.authTypes.indexOf('group') !== -1) // true
console.log(easyvk.authTypes.indexOf('my_very_good_token_type') !== -1) // false
- Добавлены новые методы Audio API:
Audio.toggleAudioStatus()
- переключение статуса аудио (кнопка "транслировать в статус")
client.audio.toggleAudioStatus({
raw_audio_id: '-2001233579_9233579',
enable: true // вкл/выкл
}).then(({vkr}) => {
console.log('Audio toggled!', vkr)
}).catch(console.error)
Audio.changeAudioStatus()
- переключение прослушиваемого трека в статусе
client.audio.changeAudioStatus({
raw_audio_id: '-2001233579_9233579'
}).then(({vkr}) => {
console.log(vkr)
}).catch(console.error)
Audio.getRecommendations()
- получить рекомендации для пользователя
client.audio.getRecommendations({
owner_id: vk.session.user_id
}).then(({vkr}) => {console.log(vkr)}).catch(console.error)
Audio.getFriendsUpdates()
- получить обновления (треки) друзей
client.audio.getFriendsUpdates({
owner_id: vk.session.user_id
}).then(({vkr}) => {
console.log(vkr.length)
}).catch(console.error)
Audio.getNewReleases()
- получить новинки и чарты + рекомендации (разделы с главной страницы)
client.audio.getNewReleases().then(({vkr}) => {
console.log('Charts:', vkr.charts)
console.log('Recommendations:', vkr.recoms)
console.log('New tracks:', vkr.new)
}).catch(console.error)
- Добавлены методы
client.goDesktop()
иclient.goMobile()
для переключения между мобильной и десктопной версией (для больших возможностей) - Добавлен метод
uploader.uploadFetchedFile()
для загрузки файлов с других источников (например, из гугл-картинок)
easyvk({...}).then(vk => {
vk.uploader.getUploadURL('docs.getUploadServer').then(({url}) => {
vk.uploader.uploadFetchedFile(url, 'https://vk.com/images/community_100.png').then(({vkr}) => {
let { file } = vkr;
console.log(file) // Загруженный файл, далее docs.save -> messages.send
}).catch(console.error)
vk.uploader.uploadFetchedFile(url, {
url: 'https://vk.com/images/community_100.png',
name: 'camera.png' // Для файлов, в URL которых нет четкого обозначения расширения
}).then(({vkr}) => {
let { file } = vkr;
console.log(file) // Загруженный файл, далее docs.save -> messages.send
}).catch(console.error)
}).catch(console.error)
})
- Параметр
fieldName
для загрузки файла теперь по умолчанию обозначен какfile
- Кодировка в HTTP клиенте теперь настраивает произвольно, а также в нем появились новые возможности для метода
client.request()
(для расширения возможностей Easy VK, не документируется)
- Исправлена работа метод
Audio.reorder()
- Исправлена ошибка работы
http(s)
прокси при включенной авторизации по логину и паролю
- Исправлена работа метода
HTTPClient.readStories()
- Исправлена работа переавторизации
- Исправлена работа
highload
режима. Теперь будет видно полное описание ошибки - Исправлена работа debugger'а в секции
vk.call
при включенномhighload
. Теперь все запросы точно будут доходить до него
- Исправлена кодировка GET запросов на
utf8
- Исправлена авторизация по сохраненной сессии приложений
- Исправлена работа с капчей при авторизации по сессии. Ранее капча могла не обрабатывалась через
captchaHandler
в кейсах, когда данные авторизации не менялись и не происходилоreauth: true
- Исправлена работа режима
highload
при ошибке капчи. Теперь капча будет обрабатываться самым последним отправленным запросом из очереди
easyvk({...{
mode: 'highload'
}}).then(vk => {
for (let i = 0; i < 100; i++) {
vk.call('messages.send', {
peer_id: 356607530,
message: 'Дароу!'
}).catch(e => {
console.log(e, i);
});
}
});
- Исправлена работа Bots LongPoll при неизвестной ошибке ВК (неожиданный ответ), теперь Easy VK самостоятельно сделает переподключение при остановке в таком случае
- Исправлена авторизация из сессии
- Исправлена работа метода
client.readFeedStories()
для прочтения историй со стены
- Добавлена работа с
fs.ReadStream
для методаuploader.uploadFile
. Теперь кроме имени файла можно передавать объектReadStream
const fs = require('fs')
const path = require('path')
easyvk({... {
utils: {
uploader: true
}
}}).then(vk => {
vk.uploader.getUploadURL('docs.getUploadServer').then(({url}) => {
let stream = fs.createReadStream(path.join(__dirname, 't.txt'))
vk.uploader.uploadFile(url, stream, 'file').then(({vkr}) => {
console.log(vkr);
}).catch(console.log)
})
})
- Для
static
методов добавлен новый методstatic.createExecute()
Метод создает строковое представление запроса для VK Script
easyvk.static.createExecute('messages.send', {
peer_id: 1,
v: '5.90',
lang: 'en'
}) // 'API.messages.send({"peer_id": 1})'
- Добавлен новый объект (переписанный старый)
Debugger
, теперь дебагинг всех запросов и их ответов возможен с помощью него В следующих обновлениях все методы, связанные с работой прошлого Debugger'а, в том числе и DebuggerRun, будут удалены (сейчас об этом идет предупреждение)
const easyvk = require('easyvk');
const { Debugger } = easyvk;
let debug = new Debugger();
debug.on('response', ({ body }) => {
console.log(body);
});
debug.on('request', (b) => {
console.log(b.toString());
});
debug.on('request', ({ method, url, query }) => {
console.log(`[${method}] on ${url}: \n`, query);
});
easyvk({
debug,
username: '...',
...{}
}).then(async vk => {
let { vkr: friends } = await vk.call('friends.get');
console.log('Got friends!', friends);
});
- В связи с новым способом дебагинга, был добавлен новый параметр
debug
, куда необходимо передавать объект дебагера - Добавлена автоматическая "переавторизация", если изменены какие-то данные в настройках easyvk. Это убирает большинство типичных проблем, с которыми сталкивались разработчики ранее
- В связи с исправлениями переавторизации, были добавлены новые поля сессии Для аккаунта
{
username: 'имя_пользователя'
}
Для приложений
{
client_id: parseInt('233_ID_приложения', 10)
}
Для групп ничего не изменялось, проверка идет по access_token'у
- Исправлен
captchaHandler
для авторизации. Теперь капча поступает сразу в handler. Раньше можно было ловить капчу при авторизации только с помощью.catch()
метода - Исправлена кодировка методов
Audio.get()
иAudio.search()
- Исправлена функция декодирования Mp3 URL, были внесены последние обновления с сайта ВКонтакте
- Исправлена ошибка поиска аудиозаписей
- Исправлена ошибка закрытых аудиозаписей. Ранее Easy VK не возвращал аудиозапись, к которой закрыт доступ правообладателем или самой платформой. Теперь стало возможно получить аудиозапись, а вместе с этим, у таких аудиозаписей появились два новых поля -
is_restriction
иextra
(несет в себе JSON информацию о причине блокировке аудио)
- Были добавлены два новых поля для аудиозаписей:
is_restriction
иextra
, которые дают знать, заблокирован ли трек и если да, то по какой причине - Был добавлен режим
highload
, который позволяет отправлять все запросы к API через методexecute
. Его настройка максимально точна и проста.
const easyvk = require('easyvk')
easyvk({
access_token: '{ТОКЕН_ГРУППЫ}',
mode: 'highload' || { // Можно настроить режим точнее
// Имя режима работы. Пока что только одно
name: 'highload',
// Время, через которое запрос гарантированно выполнится, если не поступит новых
timeout: 15
},
api_v: '5.80', // Все запросы будут выполнятся под этой версией
lang: 'en' // Все запросы будут возвращать в едином языке - English
}).then(async (vk) => {
// Подключение к LongPoll происходит тоже через execute метод
let {connection: group} = await vk.longpoll.connect()
group.on("message", async (msg) => {
let _msg = {
out: msg[2] & 2,
peer_id: msg[3],
text: msg[5],
payload: msg[6].payload
}
if (!_msg.out) {
let {vkr} = await vk.call('messages.send', {
message: "Hello!",
peer_id: _msg.peer_id
});
console.log(vkr);
}
})
})
- Была добавлена возможность настроить утилиты и компоненты, которые вы теперь можете отключить за ненадобностью, или, наоборот, подключить, если Easy VK их автоматически отключил
const easyvk = require('easyvk')
easyvk({
access_token: '{ТОКЕН_ГРУППЫ}',
utils: {
http: true,
widgets: true,
bots: false, // Отключаем секию vk.bots
uploader: true, // Включаем Uploader
longpoll: true, // Включаем User LongPoll
callbackAPI: true, // Callback API изначально выключен, его мы подключаем сами
streamingAPI: true // То же самое
}
}).then(async (vk) => {
// Подключение к LongPoll происходит тоже через execute метод
let {connection: group} = await vk.longpoll.connect()
group.on("message", async (msg) => {
let _msg = {
out: msg[2] & 2,
peer_id: msg[3],
text: msg[5],
payload: msg[6].payload
}
if (!_msg.out) {
let {vkr} = await vk.call('messages.send', {
message: "Hello!",
peer_id: _msg.peer_id
});
console.log(vkr);
}
})
})
- Исправлен метод HTTP клиента audio.get() для большого количества аудиозаписей (больше 200) с помощью добавления параметра
count
- количество максимально обрабатываемых аудиозаписей. Ранее обрабатывались все получаемые аудио (без ограничения, т.к ВК возвращает почти все треки)
let { client } = await vk.http.loginByForm()
client.audio.get({
count: 150,
offset: 30,
owner_id: -45703770
}).then(({vkr}) => {
console.log(vkr.length)
})
- Исправлена отправка post запроса
- Исправлена работа с прокси на более новых версиях Node.JS
- Добавлен параметр
userAgent
для запросовvk.call()
const easyvk = require('easyvk')
easyvk({
userAgent: 'KateMobileAndroid/52.2.2 lite-448 (Android 6.0; SDK 23; arm64-v8a; alps Razar; ru)',
access_token: 'USER_TOKEN',
reauth: true
}).then(async (vk) => {
let {vkr: audios} = vk.call("audio.get")
console.log(audios.items.length)
})
- Исправлена отправка post запроса через метод vk.post()
- Возвращена поддержка Node JS >= 8.0.0
- Добавлен файл CHANGELOG.md
- Добавлен метод поиска множества аудиозаписей сразу
let { client } = await vk.http.loginByForm()
let count = 1000 // Если аудиозаписей меньше, вернет полученное количество
client.audio.searchAll(query, count).then(console.log)
- Исправлена ошибка авторизации при
save_session: false
- В Streaming API теперь событие pullEvent будет доступно, даже если нету слушателей на это событие. Таким образом, можно будет слушать все события с помощью одного.