You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram机器人:动态获取频道消息ID及转发最后5条消息的疑问

如何获取Telegram频道消息ID并转发最后5条消息

嘿,我来帮你搞定这个问题!既然你的机器人已经是目标频道的管理员,咱们完全可以借助Telegram Bot API的消息历史接口,直接拿到频道最后5条消息的ID,然后批量转发到指定聊天。

核心思路

因为机器人拥有频道管理员权限,所以可以调用GetChatHistoryAsync方法获取频道的消息列表,每条消息对象里都自带MessageId,直接用这个ID调用ForwardMessageAsync就行。

完整代码示例

using Telegram.Bot;
using Telegram.Bot.Types;

// 假设你已经初始化好了机器人实例
// var bot = new TelegramBotClient("你的机器人Token");

// 目标聊天ID(要转发到的地方)
int targetChatId = 123456789;
// 目标频道的用户名
string channelUsername = "@abcdefgh";

try
{
    // 获取频道的最后5条消息
    var messageHistory = await bot.GetChatHistoryAsync(
        chatId: channelUsername,
        limit: 5
    );

    // 遍历消息并转发(Reverse()用来调整顺序,让最新的消息先被转发)
    foreach (var message in messageHistory.Reverse())
    {
        await bot.ForwardMessageAsync(
            chatId: targetChatId,
            fromChatId: channelUsername,
            messageId: message.MessageId
        );
    }
}
catch (Exception ex)
{
    // 处理异常,比如权限不足、网络问题等
    Console.WriteLine($"转发过程出错:{ex.Message}");
}

关键细节说明

  • 权限验证:确保机器人在频道里是管理员,并且拥有读取消息的权限(默认管理员权限包含这个,但如果权限被手动限制了,需要去频道设置里调整)。
  • 消息顺序:GetChatHistoryAsync默认返回的消息是按时间从旧到新排列的,所以用Reverse()可以把顺序改成从新到旧,如果你不需要特定顺序,也可以去掉这个方法。
  • 效率优化:设置limit:5只会获取最新的5条消息,避免获取不必要的历史数据,提升请求效率。

内容的提问来源于stack exchange,提问作者Javad-M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:02:50