diff --git a/src/Discord.Net/DiscordClient.Events.cs b/src/Discord.Net/DiscordClient.Events.cs index 25841b9cc..fec0aad1c 100644 --- a/src/Discord.Net/DiscordClient.Events.cs +++ b/src/Discord.Net/DiscordClient.Events.cs @@ -126,6 +126,18 @@ namespace Discord if (ServerUpdated != null) RaiseEvent(nameof(ServerUpdated), () => ServerUpdated(this, new ServerEventArgs(server))); } + public event EventHandler ServerUnavailable; + private void RaiseServerUnavailable(Server server) + { + if (ServerUnavailable != null) + RaiseEvent(nameof(ServerUnavailable), () => ServerUnavailable(this, new ServerEventArgs(server))); + } + public event EventHandler ServerAvailable; + private void RaiseServerAvailable(Server server) + { + if (ServerAvailable != null) + RaiseEvent(nameof(ServerAvailable), () => ServerAvailable(this, new ServerEventArgs(server))); + } //Channel public event EventHandler ChannelCreated; diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 216ecb5d2..1d121ae8a 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -103,6 +103,12 @@ namespace Discord ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, $"Updated Server: {e.Server?.Name}" + (showIDs ? $" ({e.ServerId})" : "")); + ServerAvailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, + $"Server Unavailable: {e.Server?.Name}" + + (showIDs ? $" ({e.ServerId})" : "")); + ServerUnavailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, + $"Server Unavailable: {e.Server?.Name}" + + (showIDs ? $" ({e.ServerId})" : "")); ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, $"Created Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}" + (showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId})" : "")); @@ -392,22 +398,25 @@ namespace Discord //Servers case "GUILD_CREATE": { - var model = e.Payload.ToObject(_serializer); - if (!model.Unavailable) + var data = e.Payload.ToObject(_serializer); + if (!data.Unavailable) { - var server = _servers.GetOrAdd(model.Id); - server.Update(model); - RaiseServerCreated(server); + var server = _servers.GetOrAdd(data.Id); + server.Update(data); + if (data.Unavailable == false) + RaiseServerAvailable(server); + else + RaiseServerCreated(server); } } break; case "GUILD_UPDATE": { - var model = e.Payload.ToObject(_serializer); - var server = _servers[model.Id]; + var data = e.Payload.ToObject(_serializer); + var server = _servers[data.Id]; if (server != null) { - server.Update(model); + server.Update(data); RaiseServerUpdated(server); } } @@ -417,7 +426,12 @@ namespace Discord var data = e.Payload.ToObject(_serializer); var server = _servers.TryRemove(data.Id); if (server != null) - RaiseServerDestroyed(server); + { + if (data.Unavailable == true) + RaiseServerAvailable(server); + else + RaiseServerDestroyed(server); + } } break;