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

如何使用WTelegramClient获取Telegram群组主题的完整消息?

使用WTelegramClient获取Telegram群组主题完整消息

首先明确:Telegram的群组主题(Forum Topic)仅存在于**超级群(Supergroup)**中,操作前需确认目标聊天为超级群类型。以下是具体实现步骤:

核心操作流程

  • 获取目标超级群的Chat对象,可通过聊天ID或用户名定位
  • 定位目标主题:已知topic_id可直接匹配,也可遍历超级群的topics列表按标题查找
  • 调用GetHistory方法,通过top_msg_id参数限定拉取指定主题的消息
  • 处理分页逻辑:Telegram API单次返回消息数量有限,需循环拉取直至获取全部内容

代码示例

using WTelegramClient;
using TL;

// 初始化客户端(替换为你的API配置:api_id、api_hash、session文件路径等)
var client = new WTelegram.Client(Config);

// 1. 获取目标超级群Chat对象(示例用超级群ID,也可传入用户名如"@my_supergroup")
var chat = await client.GetChatAsync(-1001234567890);
if (chat is not ChatSupergroup supergroup)
{
    Console.WriteLine("该聊天不支持主题功能(需为超级群)");
    return;
}

// 2. 定位目标主题(示例通过topic_id匹配,也可按topic.title筛选)
int targetTopicId = 123;
var targetTopic = supergroup.topics.FirstOrDefault(t => t.id == targetTopicId);
if (targetTopic == null)
{
    Console.WriteLine("未找到指定主题");
    return;
}

// 3. 循环拉取主题全部消息
var allTopicMessages = new List<Message>();
int offsetId = 0;
while (true)
{
    var history = await client.Messages_GetHistory(
        peer: supergroup,
        offset_id: offsetId,
        limit: 100, // 单次拉取最大数量,可调整
        top_msg_id: targetTopicId // 关键参数:指定拉取该主题的消息
    );

    if (history.messages.Count == 0) break; // 无更多消息时终止循环

    allTopicMessages.AddRange(history.messages.OfType<Message>());
    offsetId = history.messages.Last().id; // 更新偏移量,用于下一页拉取
}

// 输出结果示例
Console.WriteLine($"共获取{allTopicMessages.Count}条主题消息");
foreach (var msg in allTopicMessages)
{
    Console.WriteLine($"{msg.date:yyyy-MM-dd HH:mm:ss} | {msg.message}");
}

注意事项

  • 确保API账号已加入目标超级群,拥有消息查看权限
  • 若消息量极大,建议在循环中添加短暂延迟,避免触发Telegram频率限制
  • 不要遗漏top_msg_id参数,否则会拉取整个超级群的所有消息而非指定主题

内容的提问来源于stack exchange,提问作者Alireza Alavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:24:52