1. Введение в экосистему Rust+: принципы работы API и получение токенов
Введение в экосистему Rust+: принципы работы API и получение токенов
Добро пожаловать в курс «Разработка и настройка ботов-уведомлений для Rust». Это первая статья, в которой мы заложим фундамент для создания собственных инструментов автоматизации. Игра Rust давно вышла за рамки простого выживания на острове: с появлением приложения Rust+ и системы «Умный дом» (Smart Home), игроки получили возможность взаимодействовать с сервером, даже не находясь за компьютером.
В этом курсе мы пройдем путь от понимания теории до написания полноценного бота, который сможет уведомлять вас о рейдах, управлять турелями и следить за ресурсами в шкафу. Но прежде чем писать код, необходимо разобраться, как именно приложение общается с сервером и как мы можем вклиниться в этот диалог.
Что такое Rust+ и зачем нам боты?
Rust+ — это официальное мобильное приложение-компаньон для игры Rust. Оно позволяет игрокам просматривать карту, общаться в командном чате, видеть статус своих товарищей и, самое главное, взаимодействовать с электрическими приборами в игре через «умные переключатели» (Smart Switches) и «умные сигнализации» (Smart Alarms).
Однако функционал мобильного приложения ограничен интерфейсом, который придумали разработчики. Бот же позволяет расширить эти границы:
* Автоматизация: Автоматическое включение турелей при срабатывании датчика сердцебиения. * Логирование: Сохранение истории входа и выхода соклановцев. * Уведомления: Отправка сообщений в Telegram или Discord при срабатывании сигнализации, что гораздо надежнее стандартных пуш-уведомлений.
Архитектура взаимодействия: Клиент, Сервер и Бот
Чтобы создать бота, нужно понимать, как устроена сеть Rust+. В отличие от многих веб-сервисов, использующих стандартные HTTP-запросы (REST API), Rust+ использует постоянное двустороннее соединение.
[VISUALIZATION: Схема архитектуры Rust+. В центре находится 'Игровой Сервер Rust'. От него идут стрелки к трем объектам: 'Игрок (ПК)', 'Мобильное приложение Rust+' и 'Наш Бот'. Стрелки между сервером и ботом/приложением подписаны как 'WebSocket (Protobuf)'. Стрелка от сервера к приложению также имеет подпись 'FCM (Push-уведомления)'. Фон технический, схематичный, цвета темно-серые и оранжевые (стиль Rust).] | Схема взаимодействия между игровым сервером, официальным приложением и сторонним ботом.
Протокол WebSocket
В основе коммуникации лежит протокол WebSocket. Это технология, позволяющая открыть интерактивный сеанс связи между браузером (или ботом) и сервером. В отличие от HTTP, где клиент должен постоянно спрашивать сервер «есть что-то новое?», WebSocket позволяет серверу самому отправлять данные клиенту в момент события.
Это критически важно для Rust, так как события в игре происходят в реальном времени. Если сработала ловушка, бот должен узнать об этом мгновенно, а не через минуту при следующем опросе.
Protocol Buffers (Protobuf)
Второй важный компонент — это формат данных. Rust+ не использует привычный многим JSON (текстовый формат). Вместо этого используется Protocol Buffers от Google.
> Protocol Buffers (Protobuf) — это механизм сериализации структурированных данных. Он похож на XML или JSON, но меньше по размеру, быстрее и проще.
Данные передаются в бинарном виде. Это означает, что если вы просто «прослушаете» трафик, вы увидите набор байтов, а не читаемый текст. Для работы с API нам понадобятся специальные .proto файлы, которые описывают структуру сообщений (какие поля есть, их типы и порядок).
Аутентификация: Ключи от королевства
Для того чтобы ваш бот мог подключиться к серверу Rust и получать информацию, ему необходимо представиться. Сервер не пускает кого попало. Для успешного подключения требуются четыре ключевых параметра:
Если IP, порт и SteamID найти легко (они публичны или известны вам), то Player Token — это самая сложная часть для новичков.
Что такое Player Token?
Токен игрока — это число (обычно целое, 32-битное), которое генерируется сервером при «спаривании» (pairing) вашего аккаунта с сервером. Важно понимать несколько нюансов:
* Токен уникален для связки «Игрок + Сервер». * Токен меняется, если вы повторно пройдете процедуру спаривания. * Токен позволяет выполнять действия от вашего имени (писать в чат, включать рубильники).
Где — это значение токена, — множество целых чисел, а диапазон указывает на стандартное 32-битное знаковое целое число. Это важно помнить при выборе типа данных в базе данных или коде.
Процесс получения токена (Pairing Flow)
Как же получить этот заветный токен для бота? Давайте разберем механизм, который заложили разработчики Facepunch.
Для разработчика бота проблема заключается в том, что токен улетает на телефон, а нам он нужен на компьютере или сервере, где будет работать скрипт.
Способы перехвата токена
Существует два основных подхода к получению токена для разработки:
#### 1. Использование CLI-утилит (Рекомендуемый)
Сообщество разработчиков создало инструменты, которые эмулируют работу мобильного приложения. Самый популярный инструмент — это библиотека rustplus.js (для Node.js) и её утилита командной строки.
Принцип работы такой утилиты:
* Вы запускаете утилиту на компьютере и входите через Steam (OpenID).
* Утилита регистрируется в FCM как «виртуальное устройство».
* Вы заходите в игру и нажимаете «Pair».
* Сервер отправляет уведомление, утилита его перехватывает и выводит вам в консоль: IP, Port, Token.
#### 2. Ручное извлечение (Сложный)
Если у вас есть Root-права на Android, можно попытаться вытащить базу данных приложения Rust+ и найти токены там. Однако этот метод неудобен и требует специфических навыков.
Возможности API
Получив токен и установив соединение через WebSocket, мы получаем доступ к широкому спектру возможностей. Все запросы делятся на две категории: Запросы (Requests) и Подписки (Subscriptions).
Основные сущности Smart-устройств
В игре есть несколько предметов, специально созданных для работы с Rust+:
* Smart Switch (Умный переключатель): Позволяет включать и выключать электрические цепи. Бот может дистанционно активировать турели, открывать двери (через контроллеры) или включать свет. * Smart Alarm (Умная сигнализация): Работает только на выход. Когда на неё подается питание, она отправляет сигнал на сервер, а сервер — боту. Это идеальный триггер для уведомлений о рейде. * Storage Monitor (Монитор хранилища): Устанавливается на шкаф с инструментами или ящик. Позволяет видеть содержимое контейнера в реальном времени.
Структура сообщения
Хотя мы не будем сейчас писать код, полезно представлять, как выглядит общение. Любое сообщение, отправляемое ботом, оборачивается в структуру AppRequest. Ответ приходит в виде AppMessage.
Пример логической структуры запроса на получение информации о карте (упрощенно):
* seq (Sequence) — номер сообщения, чтобы сопоставить запрос и ответ.
* getMap — конкретная команда, которую мы хотим выполнить.
Безопасность и ограничения
Работая с API Rust+, важно помнить о безопасности:
Заключение
Мы разобрали теоретическую базу экосистемы Rust+. Теперь вы знаете, что: * Общение идет через постоянное WebSocket соединение. * Данные упакованы в Protocol Buffers. * Для доступа нужен Player Token, который генерируется при спаривании. * Бот может не только читать данные (сигнализация, чат), но и управлять миром (переключатели).
В следующей статье мы перейдем к практике: настроим среду разработки, установим необходимые библиотеки и напишем нашего первого простейшего бота, который научится подключаться к серверу и говорить «Привет» в командный чат.