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";
_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;


Loading…
Cancel
Save