Bot do Telegram em Rust: por que vale a pena tentar?
\nRust não é apenas mais uma linguagem de programação de sistemas. Ele oferece velocidade incrível, segurança de memória sem coletor de lixo e concorrência impressionante. Em um mundo onde cada milissegundo de latência pode custar um usuário, um bot do Telegram em Rust se torna um trunfo na manga do desenvolvedor. Você obtém desempenho comparável ao C++, mas com uma sintaxe muito mais agradável e um sistema de tipos rigoroso que detecta erros em tempo de compilação.
\nNeste guia, percorreremos o caminho desde a instalação das ferramentas até a publicação de um bot funcional. Você aprenderá como processar comandos, trabalhar com estados e até mesmo implantar o bot em um servidor. Se você já conhece os fundamentos do Rust, mas nunca escreveu bots — seja bem-vindo. Se você é iniciante em Rust — não se preocupe, vamos avançar passo a passo.
\n\nO que você precisa para começar
\nAntes de mergulhar no código, certifique-se de ter:
\n- \n
- Rust e Cargo — instale via
rustup(site oficial rustup.rs). Verifique a versão:rustc --version\n - Token do bot do Telegram — obtenha-o com @BotFather no Telegram. Basta enviar
/newbote seguir as instruções \n - Compreensão básica de async/await — em Rust, isso é feito através de
tokioouasync-std\n
Usaremos a biblioteca teloxide — este é, provavelmente, o framework mais maduro e documentado para criar bots do Telegram em Rust. Ele é construído sobre tokio e fornece uma API conveniente para todos os tipos de interações.
\n\nPasso 1: Criando o projeto e instalando dependências
\nAbra o terminal e execute:
\ncargo new my_telegram_bot\ncd my_telegram_bot\nAgora edite o arquivo Cargo.toml, adicionando as dependências:
[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"\nExplicação: teloxide é nossa ferramenta principal, tokio é o runtime assíncrono, log e env_logger são para logging conveniente.
Passo 2: Primeira execução — bot eco
\nVamos escrever um bot simples que responde com o mesmo texto que foi enviado. Substitua o conteúdo de src/main.rs por:
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n env_logger::init();\n log::info!("Iniciando o 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}\nObserve: Bot::from_env() procura a variável de ambiente TELOXIDE_TOKEN. Crie um arquivo .env na raiz do projeto ou exporte o token manualmente:
export TELOXIDE_TOKEN="seu_token_do_bot"\nExecute o bot: cargo run. Envie qualquer mensagem para ele no Telegram — ele deve responder. Parabéns, seu primeiro bot do Telegram em Rust está funcionando!
Passo 3: Processamento de comandos e filtragem de mensagens
\nUm simples eco é chato. Vamos adicionar os comandos /start e /help. Usaremos as macros do teloxide para criar uma máquina de diálogo (dialogue).
use teloxide::prelude::*;\nuse teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Comandos disponíveis:")]\nenum Command {\n #[command(description = "Iniciar conversa")]\n Start,\n #[command(description = "Mostrar ajuda")]\n Help,\n}\n\nasy