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

Telegram全局搜索群组返回结果受限,如何获取更多/全部群组?

Telegram全局搜索群组获取更多结果的解决方案

问题分析

你遇到的有限结果和重复数据问题,主要来自两方面:一是Telegram服务器对messages.searchGlobal接口的结果数量有防滥用限制;二是现有代码的分页逻辑和结果处理存在错误。

关键问题修正

  1. 分页判断错误:原代码用flags == Messages_MessagesSlice.Flags.has_next_rate,正确逻辑应该是检查flags是否包含该标志位(用HasFlag方法)
  2. 结果未合并:每次循环只处理当前页结果,没有累积到总集合中
  3. 未去重:Telegram分页返回的结果可能包含重复群组,需要根据聊天ID去重

正确实现代码

// 初始化存储去重后群组的集合
var allGroups = new List<Chat>();
int? nextRate = null;
bool hasNextPage = true;

while (hasNextPage)
{
    // 调用全局搜索API,传入分页参数
    var searchResult = await client.Messages_SearchGlobal("Keyword", limit: 20, offset_rate: nextRate);
    
    if (searchResult is Messages_MessagesSlice resultSlice)
    {
        // 提取当前页的群组
        var currentPageGroups = resultSlice.chats
            .Where(kv => kv.Value.IsGroup)
            .Select(kv => kv.Value)
            .ToList();
        
        // 去重并添加到总集合
        foreach (var group in currentPageGroups)
        {
            if (!allGroups.Any(g => g.Id == group.Id))
            {
                allGroups.Add(group);
            }
        }
        
        // 检查是否还有下一页
        hasNextPage = resultSlice.flags.HasFlag(Messages_MessagesSlice.Flags.has_next_rate);
        // 更新下一页的offset参数
        nextRate = resultSlice.next_rate;
    }
    else
    {
        hasNextPage = false;
    }
    
    // 可选:添加1秒延迟,避免请求过于频繁触发限流
    await Task.Delay(1000);
}

// allGroups即为最终获取到的去重群组列表

重要注意事项

  • 服务器硬限制:Telegram不会返回全部相关群组,这是官方的防滥用机制,即便正确分页,也只能获取服务器允许的最大结果量(远多于默认的5个)
  • 去重必要性:不同分页请求可能返回重复的聊天项,必须通过聊天ID去重
  • 限流防护:频繁请求会触发Telegram的限流机制,建议添加适当延迟,避免账号受限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:24