НОВОЕ 📢 Ограниченное стартовое предложение: скидка до 70% на первый месяц для любой игры!Посмотреть тарифы

Как запустить Discord-бота на Rust

Хостинг Discord-ботовUpdated Oct 29, 20265 min read

Бот на Rust собирается на вашем компьютере и загружается как одна готовая программа для Linux. На сервере ничего не компилируется, поэтому вся память вашего тарифа достаётся боту. Чтобы запустить его:

  1. Соберите бота для Linux x86-64 на своём компьютере.
  2. Смените тип: на странице Бот, в разделе Код, нажмите Изменить, что запускается рядом с полем Среда выполнения и выберите Rust Bot.
  3. Загрузите программу (по умолчанию она называется bot) в Files или задайте Ссылка для скачивания (необязательно) в разделе Код.
  4. Вставьте токен на странице Бот, в разделе Discord, и нажмите Подключить.
  5. Нажмите Запустить и следите за Console.

1. Соберите программу для Linux

rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl

Программа появляется в target/x86_64-unknown-linux-musl/release/ и называется по имени вашего крейта. Цель musl создаёт один самодостаточный файл, который не зависит от системных библиотек сервера. Для сборки на Windows или macOS нужен компоновщик Linux: с этим помогают такие инструменты, как cross или cargo-zigbuild. Файл .exe или сборка для macOS на сервере не запустятся.

2. Минимальный бот на serenity

Cargo.toml (зависимости)

[dependencies]
serenity = "0.12"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

src/main.rs

use serenity::async_trait;
use serenity::model::gateway::Ready;
use serenity::prelude::*;

struct Handler;

#[async_trait]
impl EventHandler for Handler {
    async fn ready(&self, _ctx: Context, ready: Ready) {
        println!("Logged in as {}", ready.user.name);
    }
}

#[tokio::main]
async fn main() {
    let token = std::env::var("DISCORD_TOKEN").expect("DISCORD_TOKEN is not set");
    let mut client = Client::builder(&token, GatewayIntents::GUILDS)
        .event_handler(Handler)
        .await
        .expect("could not create the client");

    if let Err(why) = client.start().await {
        println!("Client error: {why:?}");
    }
}

Токен берётся из DISCORD_TOKEN. Строка Logged in as переключает метку на странице Обзор на Онлайн в Discord. Боты на poise и twilight работают так же: собрать, загрузить, запустить.

3. Смените тип на Rust Bot

На странице Бот, в разделе Код, нажмите Изменить, что запускается рядом с полем Среда выполнения и выберите Rust Bot. На компьютере то же окно открывает метка типа вверху страницы (например, Node.js Bot). См. Как переключить бота на другой язык.

4. Положите программу на сервер

Загрузите её: переименуйте программу в bot (или впишите её имя в Файл запуска), затем в Files нажмите Загрузить и выберите её. Загрузите рядом с ней все файлы, которые она читает. Сервер делает её исполняемой при запуске.

Или пусть сервер скачает её сам: на странице Бот, в разделе Код, в карточке Настройки, задайте Ссылка для скачивания (необязательно) как https-ссылку на вашу готовую программу, например на файл релиза GitHub, и нажмите Сохранить. Если при запуске файла программы нет, сервер скачивает его (до 500 МБ). Чтобы обновить, опубликуйте новую сборку по этой ссылке, удалите программу в Files и нажмите Запустить. Если ссылка задана, кнопка Запустить бота в карточке настройки работает до появления файла: скачивание выполняется как часть запуска.

Раздел «Код» бота на Go, общая с ботом на Rust: карточка «Как он запускается» и карточка «Настройки» со списком «Аргументы запуска» и «Ссылка для скачивания».

5. Проверьте настройки и запустите

  • Файл запуска (карточка Как он запускается): имя и папка программы, по умолчанию bot.
  • Аргументы запуска (необязательно) (карточка Настройки): дополнительные аргументы для вашей программы. Символы оболочки вроде $, ;, & и > не разрешены.

Вставьте токен в разделе Discord, нажмите Подключить, затем нажмите Запустить. Консоль покажет [PlayNHost] Starting your bot, а затем вывод вашей программы.

Строки консоли, которые вы можете увидеть

СтрокаЧто делать
[PlayNHost] Your bot is not set up yet: the program bot was not found.Загрузите программу или впишите в Файл запуска её точное имя и папку.
[PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.Соберите программу заново для x86_64-unknown-linux-musl.
[PlayNHost] Downloading your program, затем [PlayNHost] The download failed. Check the download link on the Bot page, Code, Settings, then press Start.Ссылка неверная, приватная или не https. Проверьте Ссылка для скачивания (необязательно) в разделе Код, в карточке Настройки.
DISCORD_TOKEN is not set (из примера)Вставьте токен в разделе Discord, затем перезапустите бота.

У ботов на Rust нет источника Git и нет поля Пакеты: ваши крейты находятся внутри программы. Ключи и пароли хранятся в разделе Окружение и читаются через std::env::var: Как задать переменные окружения и секреты.

Ваш бот уже у другого хостинга? Перенесите его к нам

ПОСЛЕДНИЕ БЛОГИ