Dont remove guilds on GUILD_UNAVAILABLE
This commit is contained in:
@@ -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.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
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_CREATE)").ConfigureAwait(false);
|
||||||
|
|
||||||
|
var guild = AddGuild(data, DataStore);
|
||||||
|
if (guild != null)
|
||||||
{
|
{
|
||||||
guild = AddGuild(data, DataStore);
|
|
||||||
if (ApiClient.AuthTokenType == TokenType.User)
|
if (ApiClient.AuthTokenType == TokenType.User)
|
||||||
await SyncGuildsAsync().ConfigureAwait(false);
|
await SyncGuildsAsync().ConfigureAwait(false);
|
||||||
await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
guild = DataStore.GetGuild(data.Id);
|
await _gatewayLogger.WarningAsync($"GUILD_CREATE referenced an unknown guild.").ConfigureAwait(false);
|
||||||
if (guild != null)
|
|
||||||
guild.Update(data, UpdateSource.WebSocket, DataStore);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await _gatewayLogger.WarningAsync($"{type} 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,27 +742,43 @@ 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";
|
type = "GUILD_UNAVAILABLE";
|
||||||
await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false);
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_UNAVAILABLE)").ConfigureAwait(false);
|
||||||
|
|
||||||
var guild = RemoveGuild(data.Id);
|
var guild = DataStore.GetGuild(data.Id);
|
||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
foreach (var member in guild.Members)
|
foreach (var member in guild.Members)
|
||||||
member.User.RemoveRef(this);
|
member.User.RemoveRef(this);
|
||||||
|
|
||||||
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
|
||||||
if (data.Unavailable != true)
|
|
||||||
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
|
|
||||||
else
|
|
||||||
_unavailableGuilds++;
|
_unavailableGuilds++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await _gatewayLogger.WarningAsync($"{type} referenced an unknown guild.").ConfigureAwait(false);
|
await _gatewayLogger.WarningAsync($"GUILD_UNAVAILABLE referenced an unknown guild.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
//Channels
|
//Channels
|
||||||
|
|||||||
Reference in New Issue
Block a user