使用 WTelgramClient 获取一个频道的所有参与者,只返回 200

Get all participants of a channel using WTelgramClient, only returning 200

我有一个频道,我想删除一些用户。我已经使用 WTelegramClient 中的代码获取所有参与者,但出于某种原因它只返回 200?我们有 31k 会员。

这是我用来获取参与者的代码,与示例中的相同。

var deleted = new List<User>();
var bannedRights = new ChatBannedRights();
bannedRights.flags = 0;// ChatBannedRights.Flags.change_info | ChatBannedRights.Flags.embed_links | ChatBannedRights.Flags.invite_users | ChatBannedRights.Flags.pin_messages | ChatBannedRights.Flags.send_games | ChatBannedRights.Flags.send_gifs | ChatBannedRights.Flags.send_inline | ChatBannedRights.Flags.send_media | ChatBannedRights.Flags.send_messages | ChatBannedRights.Flags.send_polls | ChatBannedRights.Flags.send_stickers | ChatBannedRights.Flags.view_messages;

// now loop through our tweets
for (int offset = 0; ;)
{
    var participants = await client.Channels_GetParticipants(channel, null, offset, 100, accessHash);

    for (var i = 0; i < participants.users.Count; i++)
    {
        var participant = (ChannelParticipant)participants.participants[i];
        var member = (User)participants.users[participant.user_id];
        
        if (participant.date.Year == _joinedOn.Year && participant.date.Month == _joinedOn.Month && participant.date.Day == _joinedOn.Day)
        {
            Console.Write(string.Format("Removing user '{0}' as joined on {1}...", member.username, _joinedOn));
            await client.Channels_EditBanned(channel, member, bannedRights);

            deleted.Add(member);
        }
    }

    offset += participants.participants.Length;
    
    if (offset >= participants.count) break;
}

我猜是服务器限制还是什么的?非常感谢

这是由于 Telegram 服务器端的强制限制,在某些(大)groups/channels.

上查询成员列表时限制为仅 200 名成员

WTelegramClient 中现在有一个新方法可以绕过此限制并尝试让频道中的所有参与者:

var participants = await client.Channels_GetAllParticipants(channel);

大型 channels/groups 可能需要几分钟才能完成,并且可能无法获得参与者的完整列表,但它会超过 200 或 10k 的成员限制