Browse Source

Dont remove guilds on GUILD_UNAVAILABLE

tags/1.0-rc
RogueException 8 years ago
parent
commit
40abaefd20
1 changed files with 54 additions and 32 deletions
  1. +54
    -32
      src/Discord.Net/WebSocket/DiscordSocketClient.cs

+ 54
- 32
src/Discord.Net/WebSocket/DiscordSocketClient.cs 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 ({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 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)
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++; _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);
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; break;


Loading…
Cancel
Save