Pourquoi Rust est un coup de maître pour votre chat-bot
\n\nSi vous avez l'habitude d'écrire des bots en Python et pensez que plus rapide n'existe pas — vous n'avez pas essayé Rust. Rust offre non seulement de la vitesse, mais un contrôle sur chaque octet. Les chat-bots en Rust fonctionnent à une vitesse fulgurante, consomment très peu de mémoire et ne plantent pas avec des erreurs d'exécution. Dans ce guide, nous allons construire un véritable bot Telegram qui traite les commandes, répond aux messages et le fait avec des performances inaccessibles aux langages interprétés.
\n\nNous écrirons un bot à partir de zéro, en utilisant les crates teloxide et reqwest. Vous verrez à quel point Rust asynchrone gère facilement des milliers de requêtes, et pourquoi la création d'un chat-bot en Rust est un investissement dans la stabilité de votre projet.
Configuration de l'environnement et premier lancement
\n\nAvant d'écrire du code, assurez-vous d'avoir installé Rust. Sinon, exécutez :
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nAjoutez cargo à votre PATH et créez un nouveau projet :
cargo new rust_tg_bot\ncd rust_tg_bot\n\nOuvrez maintenant Cargo.toml et ajoutez les dépendances :
[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\nCes crates sont le fondement de notre bot. teloxide est un framework puissant pour l'API Telegram, et reqwest nous permettra d'effectuer des requêtes HTTP (par exemple, vers des API externes).
Obtenez le token et écrivez le « squelette » du bot
\n\nAllez sur @BotFather, créez un nouveau bot et copiez le token. Sauvegardez-le dans une variable d'environnement :
\n\nexport TELOXIDE_TOKEN=votre_token_ici\n\nÉcrivons maintenant la version la plus simple du bot, qui répond à la commande /start :
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n pretty_env_logger::init();\n log::info!("Lancement du chat-bot 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, "Bonjour ! Je suis un bot en Rust 🦀")\n .await?;\n }\n }\n Ok(())\n })\n .await;\n}\n\nExécutez cargo run et envoyez /start au bot. Si tout va bien, vous recevrez un message de bienvenue. Notez que l'écriture d'un bot en Rust avec teloxide nécessite un minimum de code, mais offre un maximum de performances.
Comment ça fonctionne ?
\n- \n
Bot::from_env()— lit le token depuis la variable d'environnementTELOXIDE_TOKEN. \n teloxide::repl— boucle infinie de traitement des messages. \n - Chaque message est passé à une closure, où nous vérifions le texte et envoyons une réponse. \n
Ajout du traitement des commandes et des arguments
\n\nUne simple réponse, c'est ennuyeux. Créons une commande /echo qui répète le texte de l'utilisateur. Pour cela, utilisons l'annotation Command de teloxide :
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Commandes disponibles :")]\nenum Command {\n #[command(description = "Afficher le message de bienvenue.")]\n Start,\n #[command(description = "Répéter votre texte.")]\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, "Bonjour ! Je suis un bot d'écho en Rust.").await?;\n }\n Command::Echo(text) => {\n bot.send_message(msg.chat.id