[Feature] Thread user member & thread members pagination (#2580)
* initial commit * return & update old method * mark old method as obsolete
This commit is contained in:
@@ -172,7 +172,7 @@ namespace Discord.WebSocket
|
||||
return threadUsers.ToImmutableArray();
|
||||
}
|
||||
|
||||
internal SocketThreadUser AddOrUpdateThreadMember(ThreadMember model, SocketGuildUser guildMember)
|
||||
internal SocketThreadUser AddOrUpdateThreadMember(ThreadMember model, SocketGuildUser guildMember = null)
|
||||
{
|
||||
if (_members.TryGetValue(model.UserId.Value, out SocketThreadUser member))
|
||||
member.Update(model);
|
||||
@@ -219,15 +219,21 @@ namespace Discord.WebSocket
|
||||
/// <returns>A task representing the asynchronous download operation.</returns>
|
||||
public async Task DownloadUsersAsync(RequestOptions options = null)
|
||||
{
|
||||
var users = await Discord.ApiClient.ListThreadMembersAsync(Id, options);
|
||||
var prevBatchCount = DiscordConfig.MaxThreadMembersPerBatch;
|
||||
ulong? maxId = null;
|
||||
|
||||
lock (_downloadLock)
|
||||
while (prevBatchCount == DiscordConfig.MaxThreadMembersPerBatch)
|
||||
{
|
||||
foreach (var threadMember in users)
|
||||
{
|
||||
var guildUser = Guild.GetUser(threadMember.UserId.Value);
|
||||
var users = await Discord.ApiClient.ListThreadMembersAsync(Id, maxId, DiscordConfig.MaxThreadMembersPerBatch, options);
|
||||
prevBatchCount = users.Length;
|
||||
maxId = users.Max(x => x.UserId.GetValueOrDefault());
|
||||
|
||||
AddOrUpdateThreadMember(threadMember, guildUser);
|
||||
lock (_downloadLock)
|
||||
{
|
||||
foreach (var threadMember in users)
|
||||
{
|
||||
AddOrUpdateThreadMember(threadMember);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user