[Feature] Thread user member & thread members pagination (#2580)

* initial commit

* return & update old method

* mark old method as obsolete
This commit is contained in:
Misha133
2023-02-09 14:37:26 +03:00
committed by GitHub
parent 75f3c91f9a
commit b085621ca6
9 changed files with 96 additions and 23 deletions

View File

@@ -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);
}
}
}
}