Использование VK API - bivashy/VK-API-PluginAdapter GitHub Wiki
Замените {Версия} на нынешнюю версию ()
Замените {модуль} на доступные модули: bukkit, bungee, velocity, core
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.U61vashka.VK-API-PluginAdapter</groupId>
<artifactId>vk-api.{модуль}</artifactId>
<version>{Версия}</version>
<scope>provided</scope>
</dependency>
</dependencies>
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.U61vashka.VK-API-PluginAdapter:vk-api.{модуль}:{Версия}'
}
SoftDepend:
name: ExamplePlugin
version: 1.0
author: author
main: your.main.path.here
softdepend: [VK-API] # Используйте если ваш плагин работает и без VK-API
Depend:
name: ExamplePlugin
version: 1.0
author: author
main: your.main.path.here
depend: [VK-API] # Используйте если ваш не плагин работает без VK-API
Ошибка Provider org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor not found при компиляции
-
Чтобы исправить запустите компиляцию с аргументом: "-proc:none"
-
Если у вас плагин maven-compiler-plugin:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.compiler.plugin.version}</version> <configuration> <compilerArgs> <arg>-proc:none</arg> <---------- Вот такой аргумент компиляции нужно добавить. </compilerArgs> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin>
Bukkit или Bungee
public class VKListener implements Listener{
@EventHandler
public void onVKMessage(VKMessageEvent e) {
}
}
Использование методов с VK документации
P.S. Так же вы можете посмотреть примеры плагина
Пример использования метода с документации ВК. https://dev.vk.com/method/messages.send
Метод messages.send отправляет сообщение по userId или же peerId
public class VKListener implements Listener{
private static final VkApiClient CLIENT = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getVkApiClient();
private static final GroupActor ACTOR = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getActor();
private final static Random RANDOM = new Random();
@EventHandler
public void onMessage(VKMessageEvent e) {
try {
CLIENT.messages().send(ACTOR)
.randomId(RANDOM.nextInt())
.peerId(e.getPeer())
.message("Текст сообщения")
.execute();
} catch (ApiException | ClientException ex) {
ex.printStackTrace();
}
}
}
Данный код будет отвечать на все наши сообщения Текст сообщения
:
Пример создания и отправки клавиатуры
Советую прочитать про структуру клавиатуры для лучшего понимания
public class KeyboardExample implements Listener {
private final static VkApiClient CLIENT = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getVkApiClient();
private final static GroupActor ACTOR = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getActor();
private final static Random RANDOM = new Random();
@EventHandler
public void onMessage(VKMessageEvent e) {
if (!e.getMessage().getText().startsWith("клава"))
return;
try {
// keyboard прикрепляет клавиатуру в сообщение, если прикрепить null, то
// клавиатура исчезнет
CLIENT.messages().send(ACTOR)
.randomId(RANDOM.nextInt())
.keyboard(createKeyboard())
.peerId(e.getPeer())
.message("Текст сообщения")
.execute();
} catch (ApiException | ClientException e1) {
e1.printStackTrace();
}
}
public Keyboard createKeyboard() {
// Создаем пустую клавиатуру
Keyboard keyboard = new Keyboard();
// Создаем двухмерный список
List<List<KeyboardButton>> allKey = new ArrayList<>();
// Создаем первую линию клавиатуры
List<KeyboardButton> line1 = new ArrayList<>();
// Создаем кнопку
KeyboardButton button = new KeyboardButton();
// Создаем действие при нажатии на кнопку
KeyboardButtonAction action = new KeyboardButtonAction();
// Устанавливаем текст на кнопке
action.setLabel("Текст на кнопку");
// Тип кнопки (Доступные типы: CALLBACK, OPEN_APP, OPEN_LINK,
// OPEN_PHOTO, START, TEXT, VKPAY)
// CALLBACK - CallBack кнопка, и при нажатии на кнопку вызывается ивент
// VKCallbackButtonPressEvent. Советую использовать
// action.setPayload("тутУникальныйТекстДляКнопки") для того чтобы можно было
// иметь много callback кнопок, и чтобы каждый из них отвечал за определенные
// действия
// OPEN_APP - action.setAppId(id приложения) чтобы установить какое приложение
// ВК должно открываться
// OPEN_LINK - action.setLink(ссылка) чтобы установить открытие ссылки при
// нажатии
// START - клавиатура появляется если у пользователя нету переписки с ботом
// TEXT - вводит текст в Label (В нашем случае пользователь введёт 'Текст на
// кнопку') от имени пользователя
action.setType(TemplateActionTypeNames.TEXT);
// Устанавливаем действие при клике
button.setAction(action);
// Устаналиваем цвет кнопки (Доступные цвета: DEFAULT, NEGATIVE, POSITIVE,
// PRIMARY)
button.setColor(KeyboardButtonColor.DEFAULT);
// Добавляем кнопку в линию
line1.add(button);
// Создаем вторую линию клавиатуры
List<KeyboardButton> line2 = new ArrayList<>();
// Добавляем кнопку в вторую линию
line2.add(new KeyboardButton()
.setAction(new KeyboardButtonAction().setLabel("/помощь").setType(TemplateActionTypeNames.TEXT))
.setColor(KeyboardButtonColor.NEGATIVE));
// Добавляем линии в наш двухмерный список
allKey.add(line1);
allKey.add(line2);
// keyboard.setInline(true) Прикрепляет клавиатуру на сообщение
// keyboard.setOneTime(true) После использования клавиатура исчезает
// ВНИМАНИЕ! Inline и OneTime вместе не работают
// Устанавливаем кнопки (Нужно выставить двухмерный массив)
keyboard.setButtons(allKey);
return keyboard;
}
}
В результате мы отправляем 2 кнопки которые находятся в двух строках
Превращение буквенного айди (screen name) в цифренный айди (id)
private final static VkApiClient CLIENT = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getVkApiClient();
private final static GroupActor ACTOR = BukkitVkApiPlugin.getPlugin(BukkitVkApiPlugin.class).getVkApiProvider()
.getActor();
private final static Random RANDOM = new Random();
@EventHandler
public void onMessage(VKMessageEvent e) throws ApiException, ClientException {
String command = "Какой id: ";
if (!(e.getMessage().getText().startsWith(command)))
return;
if (e.getMessage().getText().length() == command.length())
return;
String screenName = e.getMessage().getText().substring(command.length());
ResolveScreenNameResponse screenNameResponse = null;
try {
screenNameResponse = CLIENT.utils()
.resolveScreenName(ACTOR, screenName)
.execute();
} catch (ApiException | ClientException ex) {
CLIENT.messages().send(ACTOR)
.randomId(RANDOM.nextInt())
.peerId(e.getPeer())
.message("Произошла ошибка!")
.execute();
ex.printStackTrace();
return;
}
int id = 1;
if (screenNameResponse.getType() == DomainResolvedType.GROUP) {
id = screenNameResponse.getGroupId();
} else {
id = screenNameResponse.getObjectId();
}
CLIENT.messages().send(ACTOR)
.randomId(RANDOM.nextInt())
.peerId(e.getPeer())
.message("ID: " + id)
.execute();
}
В итоге мы реализовали простого вк бота который получает цифренный айди, из буквенного: