域名 AXUM.RS 将于 2025 年 10 月到期。我们无意再对其进行续费,如果你有意接续这个域名,请与我们取得联系。
  • AXUM.RS 现仅需人民币 3000 元(大写:叁仟元整。接受适度议价
  • 按照行业规则,AXUM.RS 到期后,大概率会进入长时间的赎回期,该期间内,如果你想拥有该域名,将要付出高额的费用
  • 我们已启用 AXUM.EU.ORG 域名,并将持续运营
  • 仅接受微信或支付宝交易
如果你对 AXUM.RS 有兴趣,请和我们进行联系:

发送图片

本章继续完善我们的机器人。收到用户的/logo指令,我们需要把我们的 LOGO 图片发送给用户。让我们来看看如何让 Telegram 机器人发送图片信息。

本章代码在04/发送图片分支。

本章代码在04/发送图片分支。

由于发送图片消息和前一章说的发送文本消息的 API 不一样,所以我们需要对不同类型的消息进行识别,而 Rust 强大的枚举类型能让我们很容易的实现。

// src/types/mod.rs

pub enum MsgType {
    Text(String),
    Photo(String),
}

有了消息类型枚举,我们在 hook 中判断出不同指令后,就可以使用这个枚举进行标识、处理了。

对于不同的指令,我们将其映射到不同的消息类型。然后通过消息类型来调用不同的 API,实现消息的发送。

相应的,也需要为图片类型的消息增加 API 调用函数。

调用发送图片消息的 API

// src/bot.rs

pub async fn send_photo_message(token: &str, chat_id: u64, photo: String) -> Result<Response> {
    let data = request::PhotoMessage { chat_id, photo };
    invoke_api(&data, "sendPhoto", token).await
}

这里使用了 request::PhotoMessage,我们还没定义它。

定义 PhotoMessage

// src/types/request.rs

#[derive(Serialize, Debug)]
pub struct PhotoMessage {
    pub chat_id: u64,
    pub photo: String,
}

定义 command::logo()

最后,别忘了定义返回 LOGO 图片的函数:

Telegram 支持多种方式发送图片。我们使用的是直接返回一个有效的图片的 URL,其它方式还有:使用 Telegram 服务器上已存在的图片以及从本地上传。详细信息请参见官方文档。

要查看完整内容,请先登录