Chat-Bots in Rust: Von der Idee zum fertigen Bot an einem Abend

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Rust ein Volltreffer für Ihr Chat-Bot-Gehirn ist

\n\n

Wenn Sie es gewohnt sind, Bots in Python zu schreiben und denken, dass es nicht schneller geht – dann haben Sie Rust noch nicht ausprobiert. Rust bietet nicht nur Geschwindigkeit, sondern Kontrolle über jedes Byte. Chat-Bots in Rust arbeiten blitzschnell, verbrauchen nur minimale Speicherressourcen und stürzen nicht mit Laufzeitfehlern ab. In dieser Anleitung erstellen wir einen echten Telegram-Bot, der Befehle verarbeitet, auf Nachrichten antwortet und dies mit einer Leistung tut, die interpretierten Sprachen unerreicht ist.

\n\n

Wir schreiben den Bot von Grund auf und verwenden die Crates teloxide und reqwest. Sie werden sehen, wie leicht asynchrones Rust mit Tausenden von Anfragen umgeht und warum die Erstellung eines Chat-Bots in Rust eine Investition in die Stabilität Ihres Projekts ist.

\n\n

Einrichtung der Umgebung und erster Start

\n\n

Bevor wir Code schreiben, stellen Sie sicher, dass Rust installiert ist. Falls nicht, führen Sie Folgendes aus:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Fügen Sie cargo zum PATH hinzu und erstellen Sie ein neues Projekt:

\n\n
cargo new rust_tg_bot\ncd rust_tg_bot
\n\n

Öffnen Sie nun Cargo.toml und fügen Sie die Abhängigkeiten hinzu:

\n\n
[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\n

Diese Crates sind das Fundament unseres Bots. teloxide ist ein leistungsstarkes Framework für die Telegram API, und reqwest ermöglicht HTTP-Anfragen (z. B. an externe APIs).

\n\n

Token abrufen und das Bot-Grundgerüst schreiben

\n\n

Gehen Sie zu @BotFather, erstellen Sie einen neuen Bot und kopieren Sie den Token. Speichern Sie ihn in einer Umgebungsvariable:

\n\n
export TELOXIDE_TOKEN=Ihr_Token_hier
\n\n

Jetzt schreiben wir die einfachste Version des Bots, die auf den Befehl /start antwortet:

\n\n
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n    pretty_env_logger::init();\n    log::info!("Starte Chat-Bot in 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, "Hallo! Ich bin ein Bot in Rust 🦀")\n                    .await?;\n            }\n        }\n        Ok(())\n    })\n    .await;\n}
\n\n

Führen Sie cargo run aus und schreiben Sie dem Bot /start. Wenn alles funktioniert, erhalten Sie eine Begrüßung. Beachten Sie: Das Schreiben eines Bots in Rust mit teloxide erfordert nur minimalen Code, bietet aber maximale Leistung.

\n\n

Wie funktioniert das?

\n
    \n
  • Bot::from_env() – liest den Token aus der Umgebungsvariable TELOXIDE_TOKEN.
  • \n
  • teloxide::repl – eine Endlosschleife zur Verarbeitung von Nachrichten.
  • \n
  • Jede Nachricht wird an eine Closure übergeben, in der wir den Text überprüfen und eine Antwort senden.
  • \n
\n\n

Befehls- und Argumentverarbeitung hinzufügen

\n\n

Eine einfache Antwort ist langweilig. Lassen Sie uns einen Befehl /echo erstellen, der den Text des Benutzers wiederholt. Dafür verwenden wir die Command-Annotation von teloxide:

\n\n
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Verfügbare Befehle:")]\nenum Command {\n    #[command(description = "Begrüßung anzeigen.")]\n    Start,\n    #[command(description = "Ihren Text wiederholen.")]\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, "Hallo! Ich bin ein Echo-Bot in Rust.").await?;\n        }\n        Command::Echo(text) => {\n            bot.send_message(msg.chat.id                

Blogs

Buchempfehlungen