Dont remove guilds on GUILD_UNAVAILABLE

This commit is contained in:
RogueException
2016-08-25 06:47:28 -03:00
parent c0db4bbfa3
commit 40abaefd20

View File

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