Включает в себя авторизацию, загрузку файлов, longpoll, stream и утилиты
Мощный инструмент для работы с VK API.
npm install vk-io --save
'use strict';
const vk = new (require('vk-io'));
В конструктор так можно сразу передать настройки
const VK = require('vk-io');
const group = new VK({
token: 'token-group'
});
const user = new VK({
id: 1,
token: 'token-user'
});
Сниппет простой установки токена
vk.setToken(<Токен>);
Настройки которые можно передать в объект
vk.setting(<object>);
Описание возможных параметров настроек
Тип: number
Идентификатор пользователя
Тип: number
или string
Идентификатор приложения standalone
Тип: string
Секретный ключ приложения
Тип: string
Пароль пользователя
Тип: string
Логин пользователя, может содержать email
или номер телефона
Тип: string
или number
Номер телефона, необходим для валидации авторизации если запросится телефон
Пример записи: 79241111111
, в начале так же может присутствовать +
Может использоваться вместо login
Тип: boolean
По умолчанию: true
Позволяет логировать действия модуля
Тип: string
По умолчанию: null
Прокси, формат записи http://example.com/
Тип: boolean
По умолчанию: true
Игнорировать ли себя в longpoll
, если только указан id в настройках
Тип: number
По умолчанию: 6
Время ожидания для сброса соединения в секундах
Тип: number
По умолчанию: 3
Лимит запросов в секунду
Для авторизации standalone
нужно установить app
, pass
, login
или phone
Пример авторизации, по умолчанию scope содержит все разрешения
Авторизация не заменяет токен в настройках модуля, учтите это
vk.setting({
app: 111,
login: '[email protected]',
pass: 'luckyVaultBoy',
phone: '+749531116869'
});
const auth = vk.standaloneAuth();
auth.run()
.then((token) => {
console.log('Token:',token);
})
.catch((error) => {
console.error(error);
});
Список разрешений можно установить двумя способами
vk.setting({
scope: <array|string>
});
/* Или */
auth.setScope(<array|string>);
Также есть возможность установить свой CookieJar
auth.setCookieJar(<CookieJar>)
Из объектов auth можно извлечь дополнительные данные
auth.getCookieJar(); // -> CookieJar - Хранилище cookie
auth.getScope(); // -> array - Список разрешений
Для авторизации необходимо установить только pass
, login
или phone
Получение объекта Auth официальных приложений
const auth = vk.androidAuth();
const auth = vk.windowsAuth();
const auth = vk.windowsPhoneAuth();
const auth = vk.iphoneAuth();
const auth = vk.ipadAuth();
auth.run()
.then((account) => {
console.log('User:',account.user);
console.log('Token:',account.token);
console.log('Expires:',account.expires);
if ('email' in account) {
console.log('Email:',account.email);
}
})
.catch((error) => {
console.error(error);
});
Необходимо скопировать название из списка методов
На примере получение записей со стены через wall.get
,
vk.api.wall.get({
user_id: 1,
count: 5
})
.then(wall => wall.items)
.then((items) => {
console.log(items);
})
.catch((error) => {
console.error(error);
});
Работа с установленными процедурами приложения
vk.execute(<Название процедуры>,<Параметры>); // -> promise
Если необходимо вызвать много одних и тех же методов рекомендуется использовать .chain()
или .executes()
Для множественного вызова одного метода с разными параметрами есть снипет работающий на.chain()
vk.executes(<method>,<queue>);
/* Пример */
vk.exeuctes('friends.add',[
{user_id: 1},
{user_id: 2},
{user_id: 3},
{user_id: 4},
{user_id: 5},
<...many>
]);
Цепочки методов помогают получить много данных с разных методов или просто вызвать их
Можно передать неограниченное количество методов в цепочку
Цепочка будет делится по 25 методов в один execute и возвращать результат
Учтите если был вызван .execute()
и вызвать .append()
выбросится синхронное исключение
Пример работы с простой цепочкой
const chain = vk.chain();
chain.append('users.get');
chain.append('friends.get',{
order: 'random'
})
.then((friends) => {
console.log(friends);
});
chain.execute()
.then((data) => {
var users = data[0];
var friends = data[1];
console.log(users,friends);
});
Данные можно получить двумя способами, первый способ просто поставить .then()
на возвращаемый promise
chain.append('users.get')
.then(...)
Или же можно получить данные со всех результатов, они будут возвращены в порядке в котором вызваны
chain.execute()
.then((results) => {
console.log(results);
});
Если цепочка методов будет пуста, в результат вернётся пустой массив
vk.chain().execute()
.then((results) => {
console.log(results.length === 0); // -> true
})
Присутствует простой сниппет для быстрого получение promise
без обращения к .execute()
Простое сокращение .execute().then(fn)
или .execute().catch(fn)
chain.then(...);
/* Или же */
chain.catch(...);
Потоки только для методов в которых есть параметр offset
Позволяет получить все данные или только указанное кол-во в count
Например получить все записи со стены пользователя
vk.stream.wall.get({
user_id: 1
})
.then((items) => {
console.log('Записей на стене:',items.length);
/* Обрабатываете данные */
})
.catch((error) => {
console.error(error);
});
Тип: Stream
, string
или array
в некоторых случаях
Обязательный параметр для загрузки
В array
может содержать только Stream
или string
В string
может быть путь к файлу или url на файл
В метод так же можно передавать парметры которые должны быть после загрузки для сохранения
Тип: number
По умолчанию: 15
Необязательный параметр, время ожидания для сброса соединения в секундах
Загрузка фотографий в альбом
Обязательный параметр album_id
В file
может быть передан массив, не более 5 файлов
Загрузка изображения на стену
Загрузка фотографии на главную профиля или сообщества
Дополнительный параметр crop
указываете x,y,w
квадратной миниатюры, подробнее
Загрузка изображения в личное сообщение
Загрузка фотографии для чата
Дополнительный параметр crop
указываете объект квадратной миниатюры
width
- Ширина фотографии после обрезки в px.
x
- Координата x для обрезки фотографии (верхний правый угол)
y
- Координата y для обрезки фотографии (верхний правый угол).
Загрузка фотографии для товара
Дополнительный параметр crop
указываете объект квадратной миниатюры
width
- Ширина фотографии после обрезки в px.
x
- Координата x для обрезки фотографии (верхний правый угол)
y
- Координата y для обрезки фотографии (верхний правый угол).
Загрузка фотографии для подборки товаров
Загрузка аудиозаписей
Загрузка видеозаписи
Загрузка документа
Загрузка граффити, доступные расширения png
,svg
Наследует doc
Загрузка аудиосообщения, доступные расширения mp3
,ogg
Наследует doc
Загрузка в документы
/* Request */
vk.upload.doc({
file: request('https://assets-cdn.github.com/images/modules/logos_page/GitHub-Mark.png')
});
/* URL */
vk.upload.doc({
file: 'https://assets-cdn.github.com/images/modules/logos_page/GitHub-Mark.png'
});
/* Stream */
vk.upload.doc({
file: fs.createReadStream(__dirname+'/assets/uploadDoc.gif')
});
/* Путь к файлу */
vk.upload.doc({
file: __dirname+'/assets/uploadDoc.gif'
});
Открытие соединения
vk.longpoll()
.then(() => {
console.log('Longpoll запущен!');
})
.catch((error) => {
console.error(error);
});
Закрытие соединения
vk.longpollClose();
Подпись на события происходит через EventEmitter
Пример прослушивания новых сообщений
vk.on('message',(msg) => {
console.log('Новое сообщение:',msg.text);
});
События действий чата, наследуют message
Был создан чат
title
- название чата
Чат был переименован
title
- новое название чата
rename
- функция для переименование чата,
В качестве аргумента новое название чата
msg.rename(<Название чата>);
В чат был добавлен новый участник или вернулся который вышел
invite
- идентификатор пользователя которого пригласили
kick
- функция для кика пользователя,
Работает если пользователь пригласил или пользователь администратор чата
Необязательный параметр позволяет указать идентификатор другого пользователя
msg.kick(); // -> promise
msg.kick(<Идентификатор>);
В чате исключили пользователя или он вышел
kick
- идентификатор пользователя которого исключили
invite
- функция для приглашения пользователя,
Работает если только пользователя исключили
Необязательный параметр позволяет указать идентификатор другого пользователя
msg.invite() // -> promise
msg.invite(<Идентификатор>);
В чате обновили изображение
photo
- информация о изображение
remove
- функция для удаления изображения чата
msg.remove() // -> promise
В чате удалили изображение
Пришло новое сообщение
id
- идентификатор сообщения
date
- когда пришло сообщение в timestamp
user
- пользователь отправивший сообщение
text
- текст сообщения
flags
- флаги сообщения, подробнее
isChat
- сообщения написано ли в чате
hasEmoji
- присутствуют ли emoji в тексте
chat
- идентификатор чата
title
- название чата, по умолчанию null
fwd
- сообщения которые переслали (имеет многоуровневую структуру)
send
- функция отправки сообщения в текущий диалог, если есть параметр fwd: true
то сообщение будет прикреплено, примеры вызова
msg.send('Простой ответ');
msg.send({
message: 'Простой ответ без ответа на сообщение',
fwd: false
});
msg.send('Ответ на сообщение.',{
fdw: true
});
attachment
- прикрипления, подробнее ниже
======
geo
- карта, содержит:
id
- идентификатор картыgeo_provider
- идентификатор сервиса карты
photo
- содержит массив с прикриплениями изображений
video
- содержит массив с прикриплениями видео
audio
- содержит массив с прикриплениями аудиозаписями
doc
- содержит массив с прикриплениями документов
type
- тип прикрипления (graffiti,audiomsg)
wall
- содержит массив с прикриплениями постов
link
- содержит массив с прикриплениями ссылок
url
- URL ссылкиtitle
- название ссылкиdescription
- описание ссылкиphoto
- строковый идентификатор фотографии для превью ссылки
Наслудует message
Был отправлен стикер
sticker
- Состоит из
id
- Идентификатор стикераproduct
- Идентификатор набора
Наслудует message
Были переведены деньги
money
- Состоит из
amount
- Сумма переводаcurrency
- Валюта переводаdata
- Дополнительные данные
Наслудует message
Был отправлен подарок
Установка флагов сообщения
id
- идентификатор сообщения
flags
- список флагов
Сброс флагов сообщения
id
- идентификатор сообщения
flags
- список флагов
Прочтение всех входящих сообщений
peer
- идентификатор начала непрочитанных сообщений
local
- идентификатор остановки чтения
Прочтение всех исходящих сообщений
peer
- идентификатор начала непрочитанных сообщений
local
- идентификатор остановки чтения
Друг стал онлайн
user
- идентификатор пользователя
platform
- платформа с которой пользователь стал онлайн, список платформ ниже
standalone
- веб сайт или другое standalone приложениеmobile
- мобильная версия ВКонтактеipad
- офицальное приложение iPadiphone
- офицальное приложение iPhoneandroid
- офицальное приложение Androidwindows
- офицальное приложение Windowswphone
- офицальное приложение Windows Phone
Друг стал оффлайн
user
- идентификатор пользователя
exit
- вышел ли пользователь используя кнопку выхода или таймаут
Удаления флагов для сообщения сообщества
peer
- идентификатор чата/собеседника
flags
- флаги сообщения
Установка флагов для сообщения сообщества
peer
- идентификатор чата/собеседника
flags
- флаги сообщения
Один из параметров беседы был изменён
chat
- идентификатор чата
self
- вызваны ли изменения самим пользователем
Пользователь начал набирать текст в диалоге
1 аргумент
- идентификатор пользователя
Пользователь начал набирать текст в чате
user
- идентификатор пользователя
chat
- идентификатор чата
Новый счетчик непрочитанных в левом меню меню
1 аргумент
- счётчик непрочитанных диалогов
Изменились настройки оповещений
peer
- идентификатор чата/диалога
sound
- включены или выключены звуковые оповещения
until
- выключение оповещений на необходимый срок, (-1: навсегда, 0: включены, other: timestamp, когда нужно включить)
Установка обработчика капчи, возвращает функция для повтора запроса.
1 аргумент
- ссылка на капчу
2 аргумент
- обработчик для повторной отправки с полученой капчей
3 аргумент
- идентификатор капчи
Пример обработки капчи
vk.setCaptchaHandler((src,again,sid) => {
youSuperAwesomeCaptchaHandler(src)
.then((code) => {
again(code)
.then(() => {
console.log('Капча введена верно!');
})
.catch(() => {
console.error('Капча введена не верно!');
});
});
});
Бывает ввели неверный параметр или сервер дал ошибку, например выдаст ошибку ApiError и как её обработать
vk.api.messages.send()
.catch((error) => {
if (vk.isApiError(error)) {
console.error('Ошибка API Error:',error);
}
});
Так же возможна проблема при отправке или получение овтета
vk.api.messages.send()
.catch((error) => {
if (vk.isRequestError(error)) {
console.error('Ошибка Request Error:',error);
}
});
Есть возможность проверить является ли ошибка класса VkIo
vk.isError(error); // -> boolean
А благодаря bluebird promise можно организовать нужные обработчики
vk.api.messages.send()
.catch(vk.ApiError,(error) => {
console.error('Ошибка API Error:',error);
})
.catch(vk.RequestError,(error) => {
console.error('Ошибка Request Error:',error);
})
.catch(Error,(error) => {
console.error('Другая ошибка:',error);
});
Проверить является ли ошибка класса авторизации
vk.isAuthError(error); // -> boolean
А так же catch
auth.run()
.catch(vk.AuthError,(error) => {
console.error('Ошибка авторизации:',error);
})
.catch(Error,(error) => {
console.error('Другая ошибка:',error);
});
В модуле присутствует простой логер, для его замены нужно
Логгер должен поддерживать методы
log
- Стандартный логerror
- Сообщения об ошибкахwarn
- Предупреждения модуляinfo
- Информация модуляdebug
- Данные для дебага
vk.setLogger(<logger>);
Принимает один параметр string
или number
Возможные значения type
user
- Пользовательgroup
- Группаapplication
- Приложение
С остальными типами присутствует свойство peer
photo
- Фотографияvideo
- Видеоdoc
- Документalbum
- Альбомtopic
- Топикwall
- Стенаpage
- Страница
vk.parseLink(<Ссылка>)
.then((link) => {
console.log('Тип: '+link.type,'Id:',link.id,(link.peer || ''));
})
.catch((error) => {
console.error(error);
});
Есть 3 метода для получение ссылки с объекта photo
Если метод не находит ссылку на фотографию он будет искать более меньшего размера пока не найдёт существующие разрешение
getLargePhoto
- Возвращает фотографии разрешения 2560
или 1280
getMediumPhoto
- Возвращает фотографии разрешения 807
или 604
getSmallPhoto
- Возвращает фотографии разрешения 130
или 75
Пример работы с методами
vk.api.photos.get({
album_id: 'profile',
owner_id: 1,
rev: 1
})
.then((response) => response.items[0])
.then((photo) => {
const urlLarge = vk.getLargePhoto(photo);
const urlMedium = vk.getMediumPhoto(photo);
const urlSmall = vk.getSmallPhoto(photo);
console.log(photo.photo_2560 === urlLarge); // -> true
console.log(photo.photo_807 === urlMedium); // -> true
console.log(photo.photo_130 === urlSmall); // -> true
});
Список доступных объектов objects медиаконтент
Метод getAttachment
1 аргумент
- Тип нужно прикрипления
Тип: string
2 аргумент
- Объекты или массив объектов
Тип: string
или array
Пример работы с методом
vk.upload.doc(...)
.then((doc) => {
const attachment = vk.getAttachment('doc',doc);
console.log(attachment); // doc<owner_id>_<doc_id>
})
Получение кол-во заданий в очереди
vk.getQueue(); // -> integer
Получение токена
vk.getToken(); // -> null или string
Текущая версия API
vk.API_VERSION;
Число для получения peer_id
vk.SHEAR_CHAT;
Отсутствуют
Проверяет наличие метода
vk.isMethod(<Метод>); // -> boolean
Если вам есть что предложить прошу написать мне VK или сделать pull request