用Rust创建Telegram机器人:勇敢者的分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Telegram机器人用Rust编写:为什么值得一试?

\n

Rust不仅仅是一种系统编程语言。它提供了令人难以置信的速度、无垃圾回收的内存安全性和出色的并发性。在每一毫秒的延迟都可能失去用户的时代,用Rust编写的Telegram机器人成为开发者手中的王牌。您将获得与C++相媲美的性能,但语法更友好,类型系统更严格,能在编译阶段捕获错误。

\n

在本指南中,我们将从工具安装到发布一个可运行的机器人,一步步走完全程。您将学习如何处理命令、管理状态,甚至将机器人部署到服务器上。如果您已经熟悉Rust基础但从未编写过机器人——欢迎加入。如果您是Rust新手——别担心,我们将循序渐进。

\n\n

开始前需要准备什么

\n

在深入代码之前,请确保您已具备以下条件:

\n
    \n
  • Rust和Cargo——通过rustup安装(官方网站rustup.rs)。检查版本:rustc --version
  • \n
  • Telegram机器人令牌——从Telegram中的@BotFather获取。只需发送/newbot并按照指示操作
  • \n
  • 对async/await的基本理解——在Rust中通过tokio或async-std实现
  • \n
\n

我们将使用teloxide库——这可能是用Rust创建Telegram机器人最成熟、文档最完善的框架。它基于tokio构建,为所有类型的交互提供了便捷的API。

\n\n

步骤1:创建项目并安装依赖

\n

打开终端并执行:

\n
cargo new my_telegram_bot\ncd my_telegram_bot
\n

现在编辑Cargo.toml文件,添加依赖:

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

说明:teloxide是我们的主要工具,tokio是异步运行时,log和env_logger用于便捷的日志记录。

\n\n

步骤2:首次运行——回显机器人

\n

编写一个最简单的机器人,它会回复收到的相同文本。将src/main.rs的内容替换为:

\n
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n    env_logger::init();\n    log::info!("启动回显机器人...");\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}
\n

注意:Bot::from_env()会查找环境变量TELOXIDE_TOKEN。在项目根目录创建.env文件或手动导出令牌:

\n
export TELOXIDE_TOKEN="你的机器人令牌"
\n

启动机器人:cargo run。在Telegram中向它发送任意消息——它应该会回复。恭喜,您的第一个Rust Telegram机器人已运行!

\n\n

步骤3:处理命令和过滤消息

\n

简单的回显很无聊。让我们添加/start和/help命令。使用teloxide的宏来创建对话机(dialogue)。

\n
use teloxide::prelude::*;\nuse teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "可用命令:")]\nenum Command {\n    #[command(description = "开始对话")]\n    Start,\n    #[command(description = "显示帮助")]\n    Help,\n}\n\nasy                

博客

书籍推荐