Fixed DownloadAllUsersAsync
This commit is contained in:
@@ -362,9 +362,9 @@ namespace Discord.WebSocket
|
|||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
foreach (var channel in guild.Channels)
|
foreach (var channel in guild.Channels)
|
||||||
guild.RemoveChannel(channel.Id);
|
DataStore.RemoveChannel(id);
|
||||||
foreach (var user in guild.Members)
|
foreach (var user in guild.Members)
|
||||||
guild.RemoveUser(user.Id);
|
user.User.RemoveRef(this);
|
||||||
}
|
}
|
||||||
return guild;
|
return guild;
|
||||||
}
|
}
|
||||||
@@ -451,6 +451,7 @@ namespace Discord.WebSocket
|
|||||||
var cachedGuilds = guilds.ToArray();
|
var cachedGuilds = guilds.ToArray();
|
||||||
if (cachedGuilds.Length == 0) return;
|
if (cachedGuilds.Length == 0) return;
|
||||||
|
|
||||||
|
//Wait for unsynced guilds to sync first.
|
||||||
var unsyncedGuilds = guilds.Select(x => x.SyncPromise).Where(x => !x.IsCompleted).ToArray();
|
var unsyncedGuilds = guilds.Select(x => x.SyncPromise).Where(x => !x.IsCompleted).ToArray();
|
||||||
if (unsyncedGuilds.Length > 0)
|
if (unsyncedGuilds.Length > 0)
|
||||||
await Task.WhenAll(unsyncedGuilds);
|
await Task.WhenAll(unsyncedGuilds);
|
||||||
@@ -767,8 +768,6 @@ namespace Discord.WebSocket
|
|||||||
var guild = RemoveGuild(data.Id);
|
var guild = RemoveGuild(data.Id);
|
||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
foreach (var member in guild.Members)
|
|
||||||
member.User.RemoveRef(this);
|
|
||||||
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||||
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@@ -887,7 +886,8 @@ namespace Discord.WebSocket
|
|||||||
var guild = DataStore.GetGuild(data.GuildId);
|
var guild = DataStore.GetGuild(data.GuildId);
|
||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
var user = guild.AddUser(data, DataStore);
|
var user = guild.AddOrUpdateUser(data, DataStore);
|
||||||
|
guild.MemberCount++;
|
||||||
|
|
||||||
if (!guild.IsSynced)
|
if (!guild.IsSynced)
|
||||||
{
|
{
|
||||||
@@ -954,6 +954,7 @@ namespace Discord.WebSocket
|
|||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
var user = guild.RemoveUser(data.User.Id);
|
var user = guild.RemoveUser(data.User.Id);
|
||||||
|
guild.MemberCount--;
|
||||||
|
|
||||||
if (!guild.IsSynced)
|
if (!guild.IsSynced)
|
||||||
{
|
{
|
||||||
@@ -994,7 +995,7 @@ namespace Discord.WebSocket
|
|||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
foreach (var memberModel in data.Members)
|
foreach (var memberModel in data.Members)
|
||||||
guild.AddUser(memberModel, DataStore);
|
guild.AddOrUpdateUser(memberModel, DataStore);
|
||||||
|
|
||||||
if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there
|
if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace Discord.WebSocket
|
|||||||
internal bool _available;
|
internal bool _available;
|
||||||
|
|
||||||
public bool Available => _available && Discord.ConnectionState == ConnectionState.Connected;
|
public bool Available => _available && Discord.ConnectionState == ConnectionState.Connected;
|
||||||
public int MemberCount { get; private set; }
|
public int MemberCount { get; set; }
|
||||||
public int DownloadedMemberCount { get; private set; }
|
public int DownloadedMemberCount { get; private set; }
|
||||||
public AudioClient AudioClient { get; private set; }
|
public AudioClient AudioClient { get; private set; }
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ namespace Discord.WebSocket
|
|||||||
{
|
{
|
||||||
DownloadedMemberCount = 0;
|
DownloadedMemberCount = 0;
|
||||||
for (int i = 0; i < model.Members.Length; i++)
|
for (int i = 0; i < model.Members.Length; i++)
|
||||||
AddUser(model.Members[i], dataStore, members);
|
AddOrUpdateUser(model.Members[i], dataStore, members);
|
||||||
if (Discord.ApiClient.AuthTokenType != TokenType.User)
|
if (Discord.ApiClient.AuthTokenType != TokenType.User)
|
||||||
{
|
{
|
||||||
var _ = _syncPromise.TrySetResultAsync(true);
|
var _ = _syncPromise.TrySetResultAsync(true);
|
||||||
@@ -125,7 +125,7 @@ namespace Discord.WebSocket
|
|||||||
{
|
{
|
||||||
DownloadedMemberCount = 0;
|
DownloadedMemberCount = 0;
|
||||||
for (int i = 0; i < model.Members.Length; i++)
|
for (int i = 0; i < model.Members.Length; i++)
|
||||||
AddUser(model.Members[i], dataStore, members);
|
AddOrUpdateUser(model.Members[i], dataStore, members);
|
||||||
var _ = _syncPromise.TrySetResultAsync(true);
|
var _ = _syncPromise.TrySetResultAsync(true);
|
||||||
if (!model.Large)
|
if (!model.Large)
|
||||||
_ = _downloaderPromise.TrySetResultAsync(true);
|
_ = _downloaderPromise.TrySetResultAsync(true);
|
||||||
@@ -183,9 +183,8 @@ namespace Discord.WebSocket
|
|||||||
=> Task.FromResult<IGuildUser>(CurrentUser);
|
=> Task.FromResult<IGuildUser>(CurrentUser);
|
||||||
public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync()
|
public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync()
|
||||||
=> Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members);
|
=> Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members);
|
||||||
public SocketGuildUser AddUser(MemberModel model, DataStore dataStore, ConcurrentDictionary<ulong, SocketGuildUser> members = null)
|
public SocketGuildUser AddOrUpdateUser(MemberModel model, DataStore dataStore, ConcurrentDictionary<ulong, SocketGuildUser> members = null)
|
||||||
{
|
{
|
||||||
MemberCount++;
|
|
||||||
members = members ?? _members;
|
members = members ?? _members;
|
||||||
|
|
||||||
SocketGuildUser member;
|
SocketGuildUser member;
|
||||||
@@ -225,13 +224,13 @@ namespace Discord.WebSocket
|
|||||||
}
|
}
|
||||||
public SocketGuildUser RemoveUser(ulong id)
|
public SocketGuildUser RemoveUser(ulong id)
|
||||||
{
|
{
|
||||||
MemberCount--;
|
|
||||||
SocketGuildUser member;
|
SocketGuildUser member;
|
||||||
if (_members.TryRemove(id, out member))
|
if (_members.TryRemove(id, out member))
|
||||||
{
|
{
|
||||||
DownloadedMemberCount--;
|
DownloadedMemberCount--;
|
||||||
return member;
|
return member;
|
||||||
}
|
}
|
||||||
|
member.User.RemoveRef(Discord);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override async Task DownloadUsersAsync()
|
public override async Task DownloadUsersAsync()
|
||||||
|
|||||||
Reference in New Issue
Block a user