NUEVO 📢 Oferta de lanzamiento limitada: ¡hasta un 70% de descuento en tu primer mes, en todos los juegos!Ver planes

Cómo alojar un bot de Discord en Rust

Hosting de bots de DiscordUpdated Oct 29, 20265 min read

Un bot de Rust se compila en tu propio ordenador y se sube como un único programa de Linux ya terminado; en el servidor no se compila nada, así que toda la memoria de tu plan es para el bot. Para ejecutar uno:

  1. Compílalo para Linux x86-64 en tu ordenador.
  2. Cambia el tipo: en la página Bot, sección Código, pulsa Cambiar lo que se ejecuta junto a Entorno de ejecución y elige Rust Bot.
  3. Sube el programa (llamado bot por defecto) en Files, o pon un Enlace de descarga (opcional) en la sección Código.
  4. Pega tu token en la página Bot, sección Discord, y pulsa Conectar.
  5. Pulsa Iniciar y mira Console.

1. Compila para Linux

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

El programa queda en target/x86_64-unknown-linux-musl/release/, con el nombre de tu crate. El target musl crea un único archivo autónomo que no depende de las librerías del sistema del servidor. Compilar en Windows o macOS necesita un linker de Linux; herramientas como cross o cargo-zigbuild se encargan de eso por ti. Un .exe o una compilación de macOS no se ejecuta en el servidor.

2. Un bot mínimo de serenity

Cargo.toml (dependencias)

[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:?}");
    }
}

El token viene de DISCORD_TOKEN. Imprimir Logged in as cambia la etiqueta del Resumen a En línea en Discord. Los bots de poise y twilight funcionan igual: compilar, subir, iniciar.

3. Cambia el tipo a Rust Bot

En la página Bot, sección Código, pulsa Cambiar lo que se ejecuta junto a Entorno de ejecución y elige Rust Bot. En un ordenador, la etiqueta del tipo en la parte superior de la página (por ejemplo Node.js Bot) abre el mismo diálogo. Mira Cómo cambiar tu bot a otro lenguaje o a un bot listo para usar.

4. Pon el programa en el servidor

Súbelo: cambia el nombre de tu programa a bot (o pon su nombre en Archivo de entrada), y luego en Files pulsa Subir y elígelo. Sube junto a él los archivos que lea. El servidor lo hace ejecutable al iniciar.

O deja que el servidor lo descargue: en la página Bot, sección Código, tarjeta Ajustes, pon en Enlace de descarga (opcional) un enlace https a tu programa terminado, por ejemplo un archivo de una release de GitHub, y pulsa Guardar. Al iniciar, si falta el archivo del programa, el servidor lo descarga (hasta 500 MB). Para actualizar, publica una compilación nueva en ese enlace, borra el programa en Files y pulsa Iniciar. Con un enlace definido, Iniciar bot en la tarjeta de configuración funciona antes de que exista el archivo: la descarga se hace como parte del inicio.

La sección Código de un bot de Go con la tarjeta Cómo se ejecuta y la tarjeta Ajustes que lista Argumentos de inicio y Enlace de descarga.

5. Revisa los ajustes e inicia

  • Archivo de entrada (tarjeta Cómo se ejecuta): el nombre y la carpeta del programa, bot por defecto.
  • Argumentos de inicio (opcional) (tarjeta Ajustes): argumentos adicionales para tu programa. No se permiten caracteres de shell como $, ;, & y >.

Pega tu token en la sección Discord, pulsa Conectar y luego Iniciar. La consola muestra [PlayNHost] Starting your bot y después la salida de tu programa.

Líneas de la consola que puedes ver

LíneaQué hacer
[PlayNHost] Your bot is not set up yet: the program bot was not found.Sube el programa, o pon en Archivo de entrada su nombre y carpeta exactos.
[PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.Vuelve a compilar para x86_64-unknown-linux-musl.
[PlayNHost] Downloading your program, y luego [PlayNHost] The download failed. Check the download link on the Bot page, Code, Settings, then press Start.El enlace es incorrecto, es privado o no es https. Revisa Enlace de descarga (opcional) en la sección Código, bajo Ajustes.
DISCORD_TOKEN is not set (del ejemplo)Pega el token en la sección Discord y reinicia.

Los bots de Rust no tienen origen Git ni campo Paquetes: tus crates van dentro del programa. Las claves y contraseñas van en Entorno, y se leen con std::env::var: Cómo definir variables de entorno y secretos para tu bot de Discord.

¿Ya tienes tu bot en otro proveedor? Tráelo con nosotros

NUESTROS ÚLTIMOS BLOGS