Por que Rust é um tiro certeiro para o seu chatbot
\n\nSe você está acostumado a escrever bots em Python e acha que não tem como ser mais rápido — você ainda não experimentou o Rust. Rust não oferece apenas velocidade, mas controle total sobre cada byte. Chatbots em Rust são extremamente rápidos, consomem pouquíssima memória e não quebram com erros de execução. Neste guia, vamos construir um bot real para o Telegram que processa comandos, responde mensagens e entrega uma performance que linguagens interpretadas não conseguem alcançar.
\n\nVamos escrever o bot do zero, usando as bibliotecas teloxide e reqwest. Você verá como o Rust assíncrono lida facilmente com milhares de requisições e por que criar um chatbot em Rust é um investimento na estabilidade do seu projeto.
Configurando o ambiente e primeiro teste
\n\nAntes de escrever código, certifique-se de que o Rust está instalado. Caso contrário, execute:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nAdicione o cargo ao PATH e crie um novo projeto:
cargo new rust_tg_bot\ncd rust_tg_bot\n\nAgora abra o arquivo Cargo.toml e adicione as dependências:
[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\nEssas bibliotecas são a base do nosso bot. O teloxide é um framework poderoso para a API do Telegram, e o reqwest permite fazer requisições HTTP (por exemplo, para APIs externas).
Obtendo o token e criando o "esqueleto" do bot
\n\nAcesse o @BotFather, crie um novo bot e copie o token. Salve-o em uma variável de ambiente:
\n\nexport TELOXIDE_TOKEN=seu_token_aqui\n\nAgora vamos escrever a versão mais simples do bot, que responde ao comando /start:
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n pretty_env_logger::init();\n log::info!("Iniciando chatbot em 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, "Olá! Eu sou um bot em Rust 🦀")\n .await?;\n }\n }\n Ok(())\n })\n .await;\n}\n\nExecute cargo run e envie /start para o bot. Se tudo funcionar, você receberá uma saudação. Perceba: criar um bot em Rust com teloxide exige pouco código, mas oferece o máximo de desempenho.
Como isso funciona?
\n- \n
Bot::from_env()— lê o token da variável de ambienteTELOXIDE_TOKEN. \n teloxide::repl— um loop infinito para processar mensagens. \n - Cada mensagem é passada para uma closure, onde verificamos o texto e enviamos a resposta. \n
Adicionando processamento de comandos e argumentos
\n\nResponder de forma simples é entediante. Vamos criar o comando /echo, que repete o texto do usuário. Para isso, usamos a anotação Command do teloxide:
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Comandos disponíveis:")]\nenum Command {\n #[command(description = "Mostrar saudação.")]\n Start,\n #[command(description = "Repetir seu 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, "Olá! Sou um bot echo em Rust.").await?;\n }\n Command::Echo(text) => {\n bot.send_message(msg.chat.id