使用 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 的成员限制
我有一个频道,我想删除一些用户。我已经使用 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 的成员限制