Dont remove guilds on GUILD_UNAVAILABLE
This commit is contained in:
@@ -636,35 +636,41 @@ namespace Discord.WebSocket
|
||||
{
|
||||
type = "GUILD_AVAILABLE";
|
||||
_lastGuildAvailableTime = Environment.TickCount;
|
||||
}
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false);
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_AVAILABLE)").ConfigureAwait(false);
|
||||
|
||||
SocketGuild guild;
|
||||
if (data.Unavailable != false)
|
||||
{
|
||||
guild = AddGuild(data, DataStore);
|
||||
if (ApiClient.AuthTokenType == TokenType.User)
|
||||
await SyncGuildsAsync().ConfigureAwait(false);
|
||||
await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
var guild = DataStore.GetGuild(data.Id);
|
||||
if (guild != null)
|
||||
{
|
||||
guild.Update(data, UpdateSource.WebSocket, DataStore);
|
||||
|
||||
var unavailableGuilds = _unavailableGuilds;
|
||||
if (unavailableGuilds != 0)
|
||||
_unavailableGuilds = unavailableGuilds - 1;
|
||||
await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await _gatewayLogger.WarningAsync($"GUILD_AVAILABLE referenced an unknown guild.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
guild = DataStore.GetGuild(data.Id);
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_CREATE)").ConfigureAwait(false);
|
||||
|
||||
var guild = AddGuild(data, DataStore);
|
||||
if (guild != null)
|
||||
guild.Update(data, UpdateSource.WebSocket, DataStore);
|
||||
{
|
||||
if (ApiClient.AuthTokenType == TokenType.User)
|
||||
await SyncGuildsAsync().ConfigureAwait(false);
|
||||
await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await _gatewayLogger.WarningAsync($"{type} referenced an unknown guild.").ConfigureAwait(false);
|
||||
await _gatewayLogger.WarningAsync($"GUILD_CREATE referenced an unknown guild.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
var unavailableGuilds = _unavailableGuilds;
|
||||
if (unavailableGuilds != 0)
|
||||
_unavailableGuilds = unavailableGuilds - 1;
|
||||
}
|
||||
|
||||
if (data.Unavailable != true)
|
||||
await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
}
|
||||
break;
|
||||
case "GUILD_UPDATE":
|
||||
@@ -736,25 +742,41 @@ namespace Discord.WebSocket
|
||||
{
|
||||
var data = (payload as JToken).ToObject<ExtendedGuild>(_serializer);
|
||||
if (data.Unavailable == true)
|
||||
type = "GUILD_UNAVAILABLE";
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false);
|
||||
|
||||
var guild = RemoveGuild(data.Id);
|
||||
if (guild != null)
|
||||
{
|
||||
foreach (var member in guild.Members)
|
||||
member.User.RemoveRef(this);
|
||||
type = "GUILD_UNAVAILABLE";
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_UNAVAILABLE)").ConfigureAwait(false);
|
||||
|
||||
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
if (data.Unavailable != true)
|
||||
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
else
|
||||
var guild = DataStore.GetGuild(data.Id);
|
||||
if (guild != null)
|
||||
{
|
||||
foreach (var member in guild.Members)
|
||||
member.User.RemoveRef(this);
|
||||
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
_unavailableGuilds++;
|
||||
}
|
||||
else
|
||||
{
|
||||
await _gatewayLogger.WarningAsync($"GUILD_UNAVAILABLE referenced an unknown guild.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await _gatewayLogger.WarningAsync($"{type} referenced an unknown guild.").ConfigureAwait(false);
|
||||
return;
|
||||
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_CREATE)").ConfigureAwait(false);
|
||||
|
||||
var guild = DataStore.GetGuild(data.Id);
|
||||
if (guild != null)
|
||||
{
|
||||
foreach (var member in guild.Members)
|
||||
member.User.RemoveRef(this);
|
||||
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await _gatewayLogger.WarningAsync($"GUILD_CREATE referenced an unknown guild.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user