Por qué Rust es un acierto para el «cerebro» de tu chatbot
\n\nSi estás acostumbrado a escribir bots en Python y crees que no hay nada más rápido, no has probado Rust. Rust no solo ofrece velocidad, sino control sobre cada byte. Los chatbots en Rust funcionan a la velocidad del rayo, consumen muy poca memoria y no fallan con errores en tiempo de ejecución. En esta guía, construiremos un bot real de Telegram que procesa comandos, responde mensajes y lo hace con un rendimiento inalcanzable para los lenguajes interpretados.
\n\nEscribiremos el bot desde cero, usando las crates teloxide y reqwest. Verás lo fácil que Rust asíncrono maneja miles de solicitudes y por qué crear un chatbot en Rust es una inversión en la estabilidad de tu proyecto.
Configuración del entorno y primer inicio
\n\nAntes de escribir código, asegúrate de tener Rust instalado. Si no es así, ejecuta:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nAñade cargo al PATH y crea un nuevo proyecto:
cargo new rust_tg_bot\ncd rust_tg_bot\n\nAhora abre Cargo.toml y añade las dependencias:
[dependencies]\nteloxide = { version = "0.12", features = ["macros"] }\nreqwest = { version = "0.11", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\n\nEstas crates son la base de nuestro bot. teloxide es un potente framework para la API de Telegram, y reqwest nos permitirá hacer solicitudes HTTP (por ejemplo, a APIs externas).
Obtenemos el token y escribimos el «esqueleto» del bot
\n\nVe a @BotFather, crea un nuevo bot y copia el token. Guárdalo en una variable de entorno:
\n\nexport TELOXIDE_TOKEN=tu_token_aqui\n\nAhora escribamos la versión más simple del bot, que responde al comando /start:
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n pretty_env_logger::init();\n log::info!("Iniciando chatbot en Rust...");\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 if text == "/start" {\n bot.send_message(msg.chat.id, "¡Hola! Soy un bot en Rust 🦀")\n .await?;\n }\n }\n Ok(())\n })\n .await;\n}\n\nEjecuta cargo run y escribe al bot /start. Si todo está bien, recibirás un saludo. Observa: escribir un bot en Rust con teloxide requiere mínimo código, pero ofrece máximo rendimiento.
¿Cómo funciona?
\n- \n
Bot::from_env()— lee el token de la variable de entornoTELOXIDE_TOKEN. \n teloxide::repl— bucle infinito de procesamiento de mensajes. \n - Cada mensaje se pasa a un closure, donde verificamos el texto y enviamos una respuesta. \n
Añadimos manejo de comandos y argumentos
\n\nUna respuesta simple es aburrida. Hagamos un comando /echo que repita el texto del usuario. Para ello, usamos la anotación Command de teloxide:
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Comandos disponibles:")]\nenum Command {\n #[command(description = "Mostrar saludo.")]\n Start,\n #[command(description = "Repetir tu texto.")]\n Echo(String),\n}\n\nasync fn answer(bot: Bot, msg: Message, cmd: Command) -> ResponseResult<()> {\n match cmd {\n Command::Start => {\n bot.send_message(msg.chat.id, "¡Hola! Soy un bot eco en Rust.").await?;\n }\n Command::Echo(text) => {\n bot.send_message(msg.chat.id