VK Bot Java SDK

SDK for interacting with VK.com API

License

License

Categories

Categories

KeY Data Data Formats Formal Verification
GroupId

GroupId

com.github.healexxzt
ArtifactId

ArtifactId

vk-bot-keyboard
Last Version

Last Version

1.1.2
Release Date

Release Date

Type

Type

jar
Description

Description

VK Bot Java SDK
SDK for interacting with VK.com API
Project URL

Project URL

https://github.com/HEALEXXZT/vk-bot-java-sdk
Source Code Management

Source Code Management

http://github.com/HEALEXXZT/vk-bot-java-sdk/

Download vk-bot-keyboard

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.healexxzt/vk-bot-keyboard/ -->
<dependency>
    <groupId>com.github.healexxzt</groupId>
    <artifactId>vk-bot-keyboard</artifactId>
    <version>1.1.2</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.healexxzt/vk-bot-keyboard/
implementation 'com.github.healexxzt:vk-bot-keyboard:1.1.2'
// https://jarcasting.com/artifacts/com.github.healexxzt/vk-bot-keyboard/
implementation ("com.github.healexxzt:vk-bot-keyboard:1.1.2")
'com.github.healexxzt:vk-bot-keyboard:jar:1.1.2'
<dependency org="com.github.healexxzt" name="vk-bot-keyboard" rev="1.1.2">
  <artifact name="vk-bot-keyboard" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.healexxzt', module='vk-bot-keyboard', version='1.1.2')
)
libraryDependencies += "com.github.healexxzt" % "vk-bot-keyboard" % "1.1.2"
[com.github.healexxzt/vk-bot-keyboard "1.1.2"]

Dependencies

compile (4)

Group / Artifact Type Version
org.json : json jar 20170516
com.sparkjava : spark-core jar 2.6.0
org.yaml : snakeyaml jar 1.25
org.slf4j : slf4j-log4j12 jar 1.7.25

Project Modules

There are no modules declared in this project.

VK-BOT-JAVA-SDK

Удобная и простая библиотека, помогающая легко и быстро создать бота для ВКонтакте

С помощью данной библиотеки можно довольно просто взаимодействовать с VK API для создания ботов и не только. Функционал прекрасно подходит как для сообществ, так и для личных страниц.

Официальная версия на github: https://github.com/petersamokhin/vk-bot-java-sdk

Официальная версия: Maven Central

Переписанная версия: Maven Central

Пример

Example

Реализуем возможность получать уведомления только о сообщениях нужного типа:

Group group = new Group(151083290, "access_token");
    
group.onSimpleTextMessage(message ->
     new Message()
         .from(group)
         .to(message.authorId())
         .text("Что-то скучновато буковки читать. Картинку кинь лучше.")
         .send()
);

group.onPhotoMessage(message ->
    new Message()
         .from(group)
         .to(message.authorId())
         .text("Уже лучше. Но я тоже так могу. Что дальше?")
         .photo("/Users/PeterSamokhin/Desktop/topoviy_mem.png")
         .send()
);

group.onVoiceMessage(message ->
    new Message()
         .from(group)
         .to(message.authorId())
         .text("Не охота мне голосовые твои слушать.")
         .doc("https://vk.com/doc62802565_447117479")
         .send()
);

Функционал: версия 0.1.3 (25.08.2017)

  • Работа с личными сообщениями сообществ и личных страниц — необходим только access_token.
  • Возможность обработки сообщений только нужного типа (голосовые, простые текстовые, со стикером, и так далее)
  • Можно, также, реагировать не только на сообщения с определенными вложениями, но и на сообщения, содержащие только определенные команды:
// Самый простой вариант для одной команды
group.onCommand("/start", message -> 
    // do something with message
);

// Если команд много
group.onCommand(new String[]{"/start", "/bot", "hello"}, message ->
    // do something with message
);
  • При прикреплении фотографий и документов к сообщению используется новый метод API, позволяющий загружать вложения напрямую в диалог. Таким образом все вложения отправляются как бы от имени пользователя, и никаких лимитов нет.
  • В случае загрузки фото, документа, обложки и прочего по ссылке, файл не будет скачан, а напрямую, как массив байт, будет передан и загружен в VK. Благодаря этому достигнута высокая скорость обработки сообщений.
  • Возможность реагировать на то, что пользователь начал печатать и автоматически начинать печатать всем пользователям, от которых пришло сообщение (статус ...набирает сообщение... будет показан в течение 10 секунд, либо пока вы не отправите сообщение):

Функционал: версия 1.1.1-R (03.02.20)

Пределы клавиатуры теперь составляют 10 строк и 4 кнопки на строку. Всего 4 цвета: primary - blue, default - white, negative - red, positive - green // Сначала нужно инициализировать клавиатуру а они кнопки

Keyboard keys = Keyboard.of(new Button("sample", ButtonColor.DEFAULT), new Button("text", ButtonColor.NEGATIVE));
// для кнопок с ButtonColor.DEFAULT вы можете использовать String в качестве аргумента
// addButtons всегда добавляет одну новую строку и автоматически группирует кнопки по 4 в каждой строке.
// они не будут добавлять кнопки к существующим строкам
keys.addButtons("A","B","C","D","A1");
// «А1» будет автоматически перемещен на новую строку
// затем добавляем его в ответ
group.onSimpleTextMessage(message -> {
    new Message()
         .from(group)
         .to(message.authorId())
         .text(message.getText())
         .keyboard(keys)
         .send();
 });

Текст нажатой кнопки будет получен в message.getText(). Поскольку полезная нагрузка не поддерживается, вы не можете различить разные кнопки с одинаковым текстом. Чтобы удалить клавиатуру, используйте message.clearKeyboard() или вызовите Message.keyboard (...) с пустой клавиатурой

// Реагируем на печать
group.onTyping(userId -> {
    System.out.println("Пользователь https://vk.com/id" + userId + " начал печатать");
});
    
// Печатаем сами
group.enableTyping(true);
  • Возможность прикрепить картинку/документ/etc по ссылке/с диска/из VK:
// Можно так
message.doc("doc62802565_447117479").send();

// Или так
message.doc("/Users/PeterSamokhin/Desktop/cp.zip").send();

// Или даже так
message.doc("https://www.petersamokhin.com/files/test.txt").send();
  • Возможность загрузить обложку в сообщество одной строчкой:
// В эту же группу, если при инициализации были указаны и access_token, и ID группы
group.uploadCover("https://www.petersamokhin.com/files/vk-bot-java-sdk/cover.png");
  • Улучшено и упрощено взаимодействие с VK API: все запросы, делаемые с помощью библиотеки, напрямую или косвенно (отправкой сообщений и т.д.), становятся в очередь и выполняются с помощью метода execute, но можно и напрямую использовать этот метод и отдавать несколько запросов для одновременного их выполнения, синхронно или асинхронно:
// Обращаемся к VK API
// Запрос будет поставлен в очередь и ответ вернётся в коллбэк
// Таким образом можно выполнять до 75 обращений к VK API в секунду
group.api().call("users.get", "{user_ids:[1,2,3]}", response -> {
     System.out.println(response);
});

// Асинхронно ставим запросы к API в очередь
JSONObject params_0 = new JSONObject();
params_0.put("user_ids", new JSONArray("[1,2,3]"));
params_0.put("fields", "photo_max_orig");
        
CallAsync call = new CallAsync("users.get", params_0, response -> {
    System.out.println(response);
});

JSONObject params_1 = new JSONObject();
params_1.put("offset", 100);
params_1.put("count", 50);

CallAsync call_1 = new CallAsync("messages.get", params_1, response -> {
    System.out.println(response);
});

// Выполняем столько запросов, сколько нам нужно
// Перечислив их через запятую в качестве параметров
group.api().execute(call_0, call_1);

// Или же синхронно
// Тогда ответы от ВК будут в массиве
// Под теми же индексами, в каком порядке были переданы запросы
JSONObject params_0 = new JSONObject();
params_0.put("user_ids", new JSONArray("[1,2,3]"));
params_0.put("fields", "photo_max_orig");

CallSync call_0 = new CallSync("users.get", params_0);

JSONObject params_1 = new JSONObject();
params_1.put("offset", 100);
params_1.put("count", 50);

CallSync call_1 = new CallSync("messages.get", params_1);

// Выводим на экран ответ на call_1
System.out.println(responses.get(1));
// Самый простой способ - все настройки по дефолту
// Указываем только путь для прослушки запросов
// Полную и подробную настройку провести тоже можно при необходимости
group.callbackApi("/callback").onGroupJoin(newSubscriber ->
    System.out.println("Новый подписчик: https://vk.com/id" + newSubscriber.getInt("user_id"))
);
 
// Возвращён будет только object из ответа 
// (помимо него в ответе от ВК присутствует тип запроса и id группы)
group.onGroupJoin(newSubscriber ->
    System.out.println("Новый подписчик: https://vk.com/id" + newSubscriber.getInt("user_id"))
);
  • Возможность как использовать настройки по умолчанию и написать бота в две строчки кода, так и возможность провести тонкую настройку, указать любой параметр, полностью управлять всем процессом и получать лог событий в консоль.
  • В последнем обновлении библиотека стала полностью потокобезопасна благодаря внедрению java.util.concurrent пакета: производительность увеличена в разы, задержек при обработке сообщений нет, старые баги исправлены.
  • Библиотека полностью и довольно подробно продукоментирована. В этом репозитории можно увидеть комментарии почти к каждому методу и каждому параметру, а также скомпилированы javadoc.
  • Убраны лишние зависимости, библиотека является самодостаточной настолько, насколько это было возможно (используется только slf4j и log4j для логгирования и sparkjava для обработки запросов).

Подготовка

  • Для начала необходимо создать сообщество, если бот будет работать от его имени
  • Затем необходимо получить access_token (ключ доступа)
    • Максимально подробно всё изложено здесь

Установка

Библиотека добавлена в центральный репозиторий maven. Для её использования достаточно (при условии успользования любых систем сборок) добавить всего пару строк в конфигурационный файл.

Для maven

Добавить строки, что ниже, в pom.xml:

<dependency>
  <groupId>com.github.healexxzt</groupId>
  <artifactId>vk-bot-keyboard</artifactId>
  <version>1.1.1-R</version>
</dependency>

Для gradle

Добавить строки, что ниже, в build.gradle в dependencies:

implementation 'com.github.healexxzt:vk-bot-keyboard:1.1.1-R'

Любые другие системы сборок

Поскольку библиотека загружена в центральный репозиторий, на сайте поиска по репозиторию описаны способы подключения библиотеки с помощью любой из систем сборок: https://mvnrepository.com/artifact/com.github.healexxzt/vk-bot-keyboard


Без систем сборок (добавляем библиотеку в classpath)

Здесь немного проще, но это не значит, что лучше. Вопрос удобства.

  • Скачиваем (все зависимости включены в сборку): библиотека (123 KB)
  • Теперь для использования библиотеки в проекте, нужно всего лишь добавить её в classpath:
    • Если компилируете через терминал, то команда будет выглядеть следующим образом:
    javac -cp "/root/vk-bot-keyboard-1.1.1-R.jar" Bot.jar 

Готово. Библиотека подключена к вашему проекту и готова для использования.

Versions

Version
1.1.2
1.1.1-R
1.1.1
1.1.0R
1.1.0B
1.1.0
0.0.6