[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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,19 +134,21 @@ namespace Discord.WebSocket
|
||||
public DateTimeOffset? RequestToSpeakTimestamp
|
||||
=> GuildUser.RequestToSpeakTimestamp;
|
||||
|
||||
private SocketGuildUser GuildUser { get; set; }
|
||||
/// <inheritdoc cref="IThreadUser.GuildUser"/>
|
||||
public SocketGuildUser GuildUser { get; private set; }
|
||||
|
||||
internal SocketThreadUser(SocketGuild guild, SocketThreadChannel thread, SocketGuildUser member, ulong userId)
|
||||
internal SocketThreadUser(SocketGuild guild, SocketThreadChannel thread, ulong userId, SocketGuildUser member = null)
|
||||
: base(guild.Discord, userId)
|
||||
{
|
||||
Thread = thread;
|
||||
Guild = guild;
|
||||
GuildUser = member;
|
||||
if(member is not null)
|
||||
GuildUser = member;
|
||||
}
|
||||
|
||||
internal static SocketThreadUser Create(SocketGuild guild, SocketThreadChannel thread, Model model, SocketGuildUser member)
|
||||
internal static SocketThreadUser Create(SocketGuild guild, SocketThreadChannel thread, Model model, SocketGuildUser guildUser = null)
|
||||
{
|
||||
var entity = new SocketThreadUser(guild, thread, member, model.UserId.Value);
|
||||
var entity = new SocketThreadUser(guild, thread, model.UserId.Value, guildUser);
|
||||
entity.Update(model);
|
||||
return entity;
|
||||
}
|
||||
@@ -154,7 +156,7 @@ namespace Discord.WebSocket
|
||||
internal static SocketThreadUser Create(SocketGuild guild, SocketThreadChannel thread, SocketGuildUser owner)
|
||||
{
|
||||
// this is used for creating the owner of the thread.
|
||||
var entity = new SocketThreadUser(guild, thread, owner, owner.Id);
|
||||
var entity = new SocketThreadUser(guild, thread, owner.Id, owner);
|
||||
entity.Update(new Model
|
||||
{
|
||||
JoinTimestamp = thread.CreatedAt,
|
||||
@@ -165,6 +167,8 @@ namespace Discord.WebSocket
|
||||
internal void Update(Model model)
|
||||
{
|
||||
ThreadJoinedAt = model.JoinTimestamp;
|
||||
if(model.GuildMember.IsSpecified)
|
||||
GuildUser = Guild.AddOrUpdateUser(model.GuildMember.Value);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -214,6 +218,9 @@ namespace Discord.WebSocket
|
||||
/// <inheritdoc/>
|
||||
IGuild IGuildUser.Guild => Guild;
|
||||
|
||||
/// <inheritdoc />
|
||||
IGuildUser IThreadUser.GuildUser => GuildUser;
|
||||
|
||||
/// <inheritdoc/>
|
||||
ulong IGuildUser.GuildId => Guild.Id;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user