easyvk
Advanced tools
Changelog
[2.6.0] - 2020-03-14
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()
для генерации случайного числа специально для отправки сообщений.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 Клиенте убрана проверка авторизации. Теперь проблемы лимита атворизаций не будет. <b>Но в своих приложениях рекомендуется делать собственные проверки пароля и логина, через официальный API </b>
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
)group_id
easyvk
client.readStories()
и client.readFeedStories()
vk.widgets.getLiveViews()
captchaHandler
, в некоторых ситуациях он не работалevkerrors.json
теперь перестал быть .json
файлом и стал просто .js
модулем.
Ранее на некоторых серверах могла возникнуть ошибка из-за отсутствия прав доступа для открытия этого файла, поэтому пришлось отказаться от этого способа работы библиотеки.highload
исправлена ошибкак ловли капчи, раньше капча ловилась, но после ее обработки ответ не возвращался.stream.initRules()
. Раньше, если функция callbackError
не была передана, возникала очень непонятная ошибка.Changelog
[2.5.1] - 2019-06-26
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
Changelog
[2.5.0] - 2019-06-08
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
client.request()
(для расширения возможностей Easy VK, не документируется)Audio.reorder()
Changelog
[2.4.13] - 2019-05-20
http(s)
прокси при включенной авторизации по логину и паролюChangelog
[2.4.12] - 2019-04-28
HTTPClient.readStories()
highload
режима. Теперь будет видно полное описание ошибкиvk.call
при включенном highload
. Теперь все запросы точно будут доходить до негоChangelog
[2.4.11] - 2019-04-24
utf8
Changelog
[2.4.1] - 2019-04-17
captchaHandler
в кейсах, когда данные авторизации не менялись и не происходило reauth: true
Changelog
[2.4.0] - 2019-04-08
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);
});
}
});
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
, теперь дебагинг всех запросов и их ответов возможен с помощью него <b>В следующих обновлениях все методы, связанные с работой прошлого Debugger'а, в том числе и DebuggerRun, будут удалены (сейчас об этом идет предупреждение)</b>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
, куда необходимо передавать объект дебагера{
username: 'имя_пользователя'
}
<b>Для приложений</b>
{
client_id: parseInt('233_ID_приложения', 10)
}
<b>Для групп ничего не изменялось, проверка идет по access_token'у</b>
Changelog
[2.3.0] - 2019-03-17
captchaHandler
для авторизации. Теперь капча поступает сразу в handler. Раньше можно было ловить капчу при авторизации только с помощью .catch()
методаAudio.get()
и Audio.search()
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);
}
})
})
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);
}
})
})