Bot de Telegram en Rust: ¿por qué vale la pena intentarlo?
\nRust no es solo otro lenguaje de programación de sistemas. Ofrece una velocidad increíble, seguridad de memoria sin recolector de basura y una concurrencia impresionante. En un mundo donde cada milisegundo de retraso puede costarte un usuario, un bot de Telegram en Rust se convierte en un as bajo la manga para el desarrollador. Obtienes un rendimiento comparable al de C++, pero con una sintaxis mucho más agradable y un sistema de tipos estricto que detecta errores en tiempo de compilación.
\nEn esta guía, recorreremos el camino desde la instalación de herramientas hasta la publicación de un bot funcional. Aprenderás cómo manejar comandos, trabajar con estados e incluso desplegar el bot en un servidor. Si ya conoces los fundamentos de Rust pero nunca has escrito bots, bienvenido. Si eres nuevo en Rust, no te preocupes, avanzaremos paso a paso.
\n\nQué necesitarás para empezar
\nAntes de sumergirte en el código, asegúrate de tener:
\n- \n
- Rust y Cargo — instálalos a través de
rustup(sitio oficial rustup.rs). Verifica la versión:rustc --version\n - Token de bot de Telegram — obténlo de @BotFather en Telegram. Simplemente envía
/newboty sigue las instrucciones \n - Comprensión básica de async/await — en Rust se hace a través de
tokiooasync-std\n
Usaremos la biblioteca teloxide — es, probablemente, el framework más maduro y documentado para crear bots de Telegram en Rust. Está construida sobre tokio y proporciona una API conveniente para todo tipo de interacciones.
\n\nPaso 1: Creación del proyecto e instalación de dependencias
\nAbre la terminal y ejecuta:
\ncargo new my_telegram_bot\ncd my_telegram_bot\nAhora edita el archivo Cargo.toml, agregando las dependencias:
[package]\nname = "my_telegram_bot"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nteloxide = { version = "0.12", features = ["macros"] }\ntokio = { version = "1", features = ["full"] }\nlog = "0.4"\nenv_logger = "0.10"\nExplicación: teloxide es nuestra herramienta principal, tokio es el runtime asíncrono, log y env_logger son para un registro (logging) conveniente.
Paso 2: Primer lanzamiento — bot eco
\nEscribamos un bot muy simple que responda con el mismo texto que se le envió. Reemplaza el contenido de src/main.rs con:
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n env_logger::init();\n log::info!("Iniciando bot eco...");\n\n let bot = Bot::from_env();\n\n teloxide::repl(bot, |bot: Bot, msg: Message| async move {\n if let Some(text) = msg.text() {\n bot.send_message(msg.chat.id, text).await?;\n }\n Ok(())\n })\n .await;\n}\nTen en cuenta: Bot::from_env() busca la variable de entorno TELOXIDE_TOKEN. Crea un archivo .env en la raíz del proyecto o exporta el token manualmente:
export TELOXIDE_TOKEN="tu_token_del_bot"\nEjecuta el bot: cargo run. Envíale cualquier mensaje en Telegram — debería responder. ¡Felicidades, tu primer bot de Telegram en Rust está funcionando!
Paso 3: Manejo de comandos y filtrado de mensajes
\nUn simple eco es aburrido. Agreguemos los comandos /start y /help. Usaremos las macros de teloxide para crear una máquina de diálogo (dialogue).
use teloxide::prelude::*;\nuse teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Comandos disponibles:")]\nenum Command {\n #[command(description = "Iniciar conversación")]\n Start,\n #[command(description = "Mostrar ayuda")]\n Help,\n}\n\nasy