Иконка ресурса

Инструкция Свой вк RCON бот для сервера Minecraft [JavaScript/Node.js]

Поддерживаемые версии
1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16
Поддержать автора:
https://donatepay.ru/don/Buse


Всем прививки, в этой небольшой инструкции я расскажу Вам, как легко и быстро создать своего ВК RCON бота на JavaScript, используя Node.js.

Приступим.
Первое, что нам нужно, это скачать Node.js (тык).
Скачали? Отлично, теперь нам нужно создать отдельную папку для бота, и там открыть консоль.
1. Нажмите win + r
2. Введите cmd
3. Нажмите enter
4. Введите команду cd C:\путь\до\созданной\папки
(Вместо C Вам нужно подставить свой диск, если он у Вас другой)
Теперь, в открывшейся консоли, вводим команду npm init.
Теперь следуем инструкции из консоли.
Где ничего не надо указывать, или Вы не знаете, что это, просто нажимайте enter (в конце тоже жмём enter).
1569855394151.png




Часть №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.

Не забывайте ставить точки с запятыми в конце всех функций.

Обо всех ошибках пишите на форуме, дабы у меня не спрашивали лишний раз в ВК.
Автор
BuseSo
Просмотры
3,718
Первый выпуск
Обновление
Рейтинг
0.00 звезд Оценок: 0

Другие ресурсы пользователя BuseSo

Комнаты в чате

Верх Низ