From 491f7a9ca16042d850e95645bd1e6b85176ea779 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 15 Sep 2015 15:41:28 -0300 Subject: [PATCH] Fixed private channel crashes --- src/Discord.Net/DiscordClient.Events.cs | 47 ++++++++++---------- src/Discord.Net/DiscordClient.cs | 59 ++++++++++++------------- 2 files changed, 51 insertions(+), 55 deletions(-) diff --git a/src/Discord.Net/DiscordClient.Events.cs b/src/Discord.Net/DiscordClient.Events.cs index 31edb5f8e..8704ec856 100644 --- a/src/Discord.Net/DiscordClient.Events.cs +++ b/src/Discord.Net/DiscordClient.Events.cs @@ -24,22 +24,22 @@ namespace Discord public sealed class LogMessageEventArgs : EventArgs { - public readonly LogMessageSeverity Severity; - public readonly LogMessageSource Source; - public readonly string Message; + public LogMessageSeverity Severity { get; } + public LogMessageSource Source { get; } + public string Message { get; } internal LogMessageEventArgs(LogMessageSeverity severity, LogMessageSource source, string msg) { Severity = severity; Source = source; Message = msg; } } public sealed class ServerEventArgs : EventArgs { - public readonly Server Server; + public Server Server { get; } public string ServerId => Server.Id; internal ServerEventArgs(Server server) { Server = server; } } public sealed class ChannelEventArgs : EventArgs { - public readonly Channel Channel; + public Channel Channel { get; } public string ChannelId => Channel.Id; public Server Server => Channel.Server; public string ServerId => Channel.ServerId; @@ -48,14 +48,14 @@ namespace Discord } public sealed class UserEventArgs : EventArgs { - public readonly User User; + public User User { get; } public string UserId => User.Id; internal UserEventArgs(User user) { User = user; } } public sealed class MessageEventArgs : EventArgs { - public readonly Message Message; + public Message Message { get; } public string MessageId => Message.Id; public Member Member => Message.Member; public Channel Channel => Message.Channel; @@ -69,7 +69,7 @@ namespace Discord } public sealed class RoleEventArgs : EventArgs { - public readonly Role Role; + public Role Role { get; } public string RoleId => Role.Id; public Server Server => Role.Server; public string ServerId => Role.ServerId; @@ -78,9 +78,9 @@ namespace Discord } public sealed class BanEventArgs : EventArgs { - public readonly User User; - public readonly string UserId; - public readonly Server Server; + public User User { get; } + public string UserId { get; } + public Server Server { get; } public string ServerId => Server.Id; internal BanEventArgs(User user, string userId, Server server) @@ -92,7 +92,7 @@ namespace Discord } public sealed class MemberEventArgs : EventArgs { - public readonly Member Member; + public Member Member { get; } public User User => Member.User; public string UserId => Member.UserId; public Server Server => Member.Server; @@ -102,25 +102,24 @@ namespace Discord } public sealed class UserTypingEventArgs : EventArgs { - public readonly Member Member; - public readonly Channel Channel; + public Channel Channel { get; } public string ChannelId => Channel.Id; public Server Server => Channel.Server; public string ServerId => Channel.ServerId; - public User User => Member.User; - public string UserId => Member.UserId; + public User User { get; } + public string UserId => User.Id; - internal UserTypingEventArgs(Member member, Channel channel) + internal UserTypingEventArgs(User user, Channel channel) { - Member = member; + User = user; Channel = channel; } } /*public sealed class VoiceServerUpdatedEventArgs : EventArgs { - public readonly Server Server; + public Server Server { get; } public string ServerId => Server.Id; - public readonly string Endpoint; + public string Endpoint { get; } internal VoiceServerUpdatedEventArgs(Server server, string endpoint) { Server = server; @@ -295,11 +294,11 @@ namespace Discord if (MemberVoiceStateUpdated != null) MemberVoiceStateUpdated(this, new MemberEventArgs(member)); } - public event EventHandler MemberIsTyping; - private void RaiseMemberIsTyping(Member member, Channel channel) + public event EventHandler UserIsTyping; + private void RaiseUserIsTyping(User user, Channel channel) { - if (MemberIsTyping != null) - MemberIsTyping(this, new UserTypingEventArgs(member, channel)); + if (UserIsTyping != null) + UserIsTyping(this, new UserTypingEventArgs(user, channel)); } //Voice diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 94868be45..bfcb3e580 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -120,29 +120,29 @@ namespace Discord { Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, "Connected"); Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, "Disconnected"); - ServerCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Server: {e.Server.Name} ({e.Server.Id})"); - ServerDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed Server: {e.Server.Name} ({e.Server.Id})"); - ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Server: {e.Server.Name} ({e.Server.Id})"); + ServerCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Server: {e.Server?.Name} ({e.ServerId})"); + ServerDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed Server: {e.Server?.Name} ({e.ServerId})"); + ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Server: {e.Server?.Name} ({e.ServerId})"); UserUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated User: {e.User.Name} ({e.UserId})"); - ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Channel: {e.Server.Name}/{e.Channel.Name} ({e.ServerId}/{e.ChannelId})"); - ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed Channel: {e.Server.Name}/{e.Channel.Name} ({e.ServerId}/{e.ChannelId})"); - ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Channel: {e.Server.Name}/{e.Channel.Name} ({e.ServerId}/{e.ChannelId})"); - MessageCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); - MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); - MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); - MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Read Message (Remotely): {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); - MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Sent Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); - RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); - RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); - RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); - BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added Ban: {e.Server.Name}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); - BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Ban: {e.Server.Name}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); - MemberAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added Member: {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})."); - MemberRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Member: {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})."); - MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member: {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})."); - MemberPresenceUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member (Presence): {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})"); - MemberVoiceStateUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member (Voice State): {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})"); - MemberIsTyping += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member (Is Typing): {e.Server.Name}/{e.Channel.Name}/{e.User.Name} ({e.ServerId}/{e.ChannelId}/{e.UserId})"); + UserIsTyping += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated User (Is Typing): {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.User.Name} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.UserId})"); + ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name} ({e.ServerId ?? "0"}/{e.ChannelId})"); + ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name} ({e.ServerId ?? "0"}/{e.ChannelId})"); + ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name} ({e.ServerId ?? "0"}/{e.ChannelId})"); + MessageCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.MessageId})"); + MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.MessageId})"); + MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.MessageId})"); + MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Read Message (Remotely): {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.MessageId})"); + MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Sent Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId} ({e.ServerId ?? "0"}/{e.ChannelId}/{e.MessageId})"); + RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name} ({e.ServerId ?? "0"}/{e.RoleId})."); + RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name} ({e.ServerId ?? "0"}/{e.RoleId})."); + RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name} ({e.ServerId ?? "0"}/{e.RoleId})."); + BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added Ban: {e.Server?.Name ?? "[Private]"}/{e.User?.Name ?? "Unknown"} ({e.ServerId ?? "0"}/{e.UserId})."); + BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Ban: {e.Server?.Name ?? "[Private]"}/{e.User?.Name ?? "Unknown"} ({e.ServerId ?? "0"}/{e.UserId})."); + MemberAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name} ({e.ServerId ?? "0"}/{e.UserId})."); + MemberRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name} ({e.ServerId ?? "0"}/{e.UserId})."); + MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name} ({e.ServerId ?? "0"}/{e.UserId})."); + MemberPresenceUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member (Presence): {e.Server?.Name ?? "[Private]"}/{e.User.Name} ({e.ServerId ?? "0"}/{e.UserId})"); + MemberVoiceStateUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member (Voice State): {e.Server?.Name ?? "[Private]"}/{e.User.Name} ({e.ServerId ?? "0"}/{e.UserId})"); VoiceConnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Voice Connected"); VoiceDisconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Voice Disconnected"); @@ -429,16 +429,13 @@ namespace Discord { var data = e.Payload.ToObject(_serializer); var channel = _channels[data.ChannelId]; - if (_config.TrackActivity) - { - var user = _users[data.UserId]; - user.UpdateActivity(DateTime.UtcNow); - } - if (channel != null) + var user = _users[data.UserId]; + if (user != null) { - var member = _members[data.UserId, channel.ServerId]; - if (member != null) - RaiseEvent(nameof(MemberIsTyping), () => RaiseMemberIsTyping(member, channel)); + if (_config.TrackActivity) + user.UpdateActivity(DateTime.UtcNow); + if (channel != null) + RaiseEvent(nameof(UserIsTyping), () => RaiseUserIsTyping(user, channel)); } } break;