- Поддерживаемые версии
- 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16
Всем прививки, в этой небольшой инструкции я расскажу Вам, как легко и быстро создать своего ВК RCON бота на JavaScript, используя Node.js.
Приступим.
Первое, что нам нужно, это скачать Node.js (тык).
Скачали? Отлично, теперь нам нужно создать отдельную папку для бота, и там открыть консоль.
1. Нажмите win + r
2. Введите cmd
3. Нажмите enter
4. Введите команду cd C:\путь\до\созданной\папки
(Вместо C Вам нужно подставить свой диск, если он у Вас другой)
2. Введите cmd
3. Нажмите enter
4. Введите команду cd C:\путь\до\созданной\папки
(Вместо C Вам нужно подставить свой диск, если он у Вас другой)
Теперь следуем инструкции из консоли.
Где ничего не надо указывать, или Вы не знаете, что это, просто нажимайте enter (в конце тоже жмём enter).
Часть №2.
Теперь, приступим к самому коду. Так как я не изменял entry point (по другому - главный класс), я создаю файл index.js. Если Вы указали другой, то создавайте свой.
Класс создан, но как начать писать? Пока что писать в классе ничего не надо, открываем нашу консольку и пишем заветную команду:
npm i vk-io modern-rcon
Давайте разберёмся, что и что обозначает:
1. npm - команда от Node.js, тут всё понятно (наверное).
2. i - сокращение от install, то есть мы скачиваем нужные нам библиотеки.
3. vk-io modern-rcon - две библиотеки, которые мы будем использовать (больше нам и не нужно, спасибо не надо).
И, опять же, мы не пишем никакой код. Сейчас нам нужно зайти в нашу группу, открыть её настройки и перейти в раздел Работа с API. Там создаём ключ доступа и потом переходим во вкладку Long Poll API. Включаем этот API и выбираем версию 5.101. Переходим в подвкладку Типы событий. Там включаем всё, что связано с сообщениями.
Отлично, осталось совсем чуть-чуть.
Открываем наш главный класс. Я решил использовать программу NotePad++, но Вы можете использовать и другие текстовые редакторы (К примеру, Visual Studio Code).
Для начала создадим несколько переменных, которые у нас не будут изменяться во время выполнения программы - Константы.
Константы
Java:
//Ключ доступа (Работа с API), который мы получали ранее
const bot_token = "засекречено";
//Не знаете, как получить? Используйте приложение https://vk.com/app604480_547377866
const group_id = засекречено;
//Айпи майнкрафт сервера, без порта. Если локальный (на одной машинке бот и сервер), то указывайте localhost
const ip = "127.0.0.1";
//Порт майнкрафт сервера, берётся в файле server.properties
const rconPort = 25565;
//Пароль от RCON доступа, берётся в файле server.properties
const password = "засекречено";
//Пример: [1,2,3,5125,6126];
const admins = [айди админов, через запятую];
const moders = [айди модераторов, через запятую];
const consoles = [айди консолей, через запятую];
//Библиотеки, с которыми мы будем работать
const {VK} = require('vk-io');
const vk = new VK();
const {updates} = vk;
const Rcon = require('modern-rcon');
//Создание связи с RCON.
const rcon = new Rcon(ip, port = rconPort, password);
//Префикс логов в консоли
const log_prefix = '[AveRap]';
//Команды, которые можно использовать только на этом уровне и на уровне выше.
//Консоль и модератор не смогут использовать админские команды, консоль не сможет
//использовать модераторские команды. Админ и модератор смогут использовать команды
//консоли. Админ сможет использовать все команды.
//allowed_cmds - список команд, которые может использовать консоль.
const admin_only_cmds = [`op`, `deop`, `pl`, `plugins`, `bukkit:eek:p`, `bukkit:deop`, `minecraft:eek:p`, `minecraft:deop`,
`stop`, `rl`, `bukkit:pl`, `bukkit:plugins`, `bukkit:stop`, `bukkit:rl`, `bukkit:reload`, `reload`, `help`,
`minecraft:help`, `bukkit:help`, `minecraft:help`];
const moder_only_cmds = [`ban`, `mute`, `kick`, `warn`];
const allowed_cmds = [`list`, `user`, `check`];
Дальше нам нужно инициализировать доступ к ВК.
Оставляем все, как есть
Java:
vk.setOptions({
token: bot_token,
apiMode: 'parallel',
pollingGroupId: group_id
});
Java:
vk.updates.use(async (context, next) => {
if (!context.senderId)
return;
if (context.senderId < 0)
return;
if (context.isGroup)
return;
if (context.is('message') && context.isOutbox)
return;
await next();
});
Изменяйте только на свой страх и риск
Java:
//Хотите поменять преф↓, то меняйте его тут (стрелочкой показано, где)
vk.updates.hear(/^(?:\/)([^]+)?/i, async (context) => {
if(admins.includes(context.senderId) || moders.includes(context.senderId) || consoles.includes(context.senderId)) {
if(!admins.includes(context.senderId) && admin_only_cmds.includes(context.$match[1])) {
return context.send(`⚠ Команда доступна только Администрации.`);
}
if(!(admins.includes(context.senderId) || moders.includes(context.senderId)) && moder_only_cmds.includes(context.$match[1])) {
return context.send(`⚠ Команда доступна только со статуса [MODER] и выше`);
}
if(!(admins.includes(context.senderId) || moders.includes(context.senderId)) && allowed_cmds.includes(context.$match[1])) {
return context.send(`⚠ Вы не можете использовать данную команду!`);
}
await context.send("⏰ Подключение к серверу...");
rcon.send(`${context.$match[1]}`)
.then(res => {
console.log(`${log_prefix} Пользователь ВК ${context.senderId} использовал команду ${context.$match[1]} через бота!`);
return context.send(`? Ответ от сервера:\n\n${res === "" ? "Команда выполнена успешно!" : res.replace(/§./g, '').slice(0, 4000)}`);
})
.catch(err => {
return context.send(`⚠ Ошибка: ${err}.`);
});
} else {
return context.send('⚠ У Вас недостаточно прав для использования бота!\nПриобретите статус [CONSOLE] и Вы сможете использовать команды!');
}
});
Можете изменять, можете не изменять
Java:
updates.startPolling().then(() => {
console.log(`${log_prefix} Включаюсь...`);
//Не трогать!
rcon.connect().catch(err => {
console.log(`${log_prefix} Ошибка при подключении к серверу:`);
return console.log(err);
})
//Трогать можно!
console.log(`${log_prefix} Автор бота: iBuseWinner`);
console.log(`${log_prefix} Бот готов принимать запросы!`);
});
Чтобы запустить бота, используйте команду в консоли node index.js.
Не забывайте ставить точки с запятыми в конце всех функций.
Обо всех ошибках пишите на форуме, дабы у меня не спрашивали лишний раз в ВК.