Fixed private channel crashes

This commit is contained in:
RogueException
2015-09-15 15:41:28 -03:00
parent ee9ccf816b
commit 491f7a9ca1
2 changed files with 51 additions and 55 deletions

View File

@@ -24,22 +24,22 @@ namespace Discord
public sealed class LogMessageEventArgs : EventArgs public sealed class LogMessageEventArgs : EventArgs
{ {
public readonly LogMessageSeverity Severity; public LogMessageSeverity Severity { get; }
public readonly LogMessageSource Source; public LogMessageSource Source { get; }
public readonly string Message; public string Message { get; }
internal LogMessageEventArgs(LogMessageSeverity severity, LogMessageSource source, string msg) { Severity = severity; Source = source; Message = msg; } internal LogMessageEventArgs(LogMessageSeverity severity, LogMessageSource source, string msg) { Severity = severity; Source = source; Message = msg; }
} }
public sealed class ServerEventArgs : EventArgs public sealed class ServerEventArgs : EventArgs
{ {
public readonly Server Server; public Server Server { get; }
public string ServerId => Server.Id; public string ServerId => Server.Id;
internal ServerEventArgs(Server server) { Server = server; } internal ServerEventArgs(Server server) { Server = server; }
} }
public sealed class ChannelEventArgs : EventArgs public sealed class ChannelEventArgs : EventArgs
{ {
public readonly Channel Channel; public Channel Channel { get; }
public string ChannelId => Channel.Id; public string ChannelId => Channel.Id;
public Server Server => Channel.Server; public Server Server => Channel.Server;
public string ServerId => Channel.ServerId; public string ServerId => Channel.ServerId;
@@ -48,14 +48,14 @@ namespace Discord
} }
public sealed class UserEventArgs : EventArgs public sealed class UserEventArgs : EventArgs
{ {
public readonly User User; public User User { get; }
public string UserId => User.Id; public string UserId => User.Id;
internal UserEventArgs(User user) { User = user; } internal UserEventArgs(User user) { User = user; }
} }
public sealed class MessageEventArgs : EventArgs public sealed class MessageEventArgs : EventArgs
{ {
public readonly Message Message; public Message Message { get; }
public string MessageId => Message.Id; public string MessageId => Message.Id;
public Member Member => Message.Member; public Member Member => Message.Member;
public Channel Channel => Message.Channel; public Channel Channel => Message.Channel;
@@ -69,7 +69,7 @@ namespace Discord
} }
public sealed class RoleEventArgs : EventArgs public sealed class RoleEventArgs : EventArgs
{ {
public readonly Role Role; public Role Role { get; }
public string RoleId => Role.Id; public string RoleId => Role.Id;
public Server Server => Role.Server; public Server Server => Role.Server;
public string ServerId => Role.ServerId; public string ServerId => Role.ServerId;
@@ -78,9 +78,9 @@ namespace Discord
} }
public sealed class BanEventArgs : EventArgs public sealed class BanEventArgs : EventArgs
{ {
public readonly User User; public User User { get; }
public readonly string UserId; public string UserId { get; }
public readonly Server Server; public Server Server { get; }
public string ServerId => Server.Id; public string ServerId => Server.Id;
internal BanEventArgs(User user, string userId, Server server) internal BanEventArgs(User user, string userId, Server server)
@@ -92,7 +92,7 @@ namespace Discord
} }
public sealed class MemberEventArgs : EventArgs public sealed class MemberEventArgs : EventArgs
{ {
public readonly Member Member; public Member Member { get; }
public User User => Member.User; public User User => Member.User;
public string UserId => Member.UserId; public string UserId => Member.UserId;
public Server Server => Member.Server; public Server Server => Member.Server;
@@ -102,25 +102,24 @@ namespace Discord
} }
public sealed class UserTypingEventArgs : EventArgs public sealed class UserTypingEventArgs : EventArgs
{ {
public readonly Member Member; public Channel Channel { get; }
public readonly Channel Channel;
public string ChannelId => Channel.Id; public string ChannelId => Channel.Id;
public Server Server => Channel.Server; public Server Server => Channel.Server;
public string ServerId => Channel.ServerId; public string ServerId => Channel.ServerId;
public User User => Member.User; public User User { get; }
public string UserId => Member.UserId; public string UserId => User.Id;
internal UserTypingEventArgs(Member member, Channel channel) internal UserTypingEventArgs(User user, Channel channel)
{ {
Member = member; User = user;
Channel = channel; Channel = channel;
} }
} }
/*public sealed class VoiceServerUpdatedEventArgs : EventArgs /*public sealed class VoiceServerUpdatedEventArgs : EventArgs
{ {
public readonly Server Server; public Server Server { get; }
public string ServerId => Server.Id; public string ServerId => Server.Id;
public readonly string Endpoint; public string Endpoint { get; }
internal VoiceServerUpdatedEventArgs(Server server, string endpoint) internal VoiceServerUpdatedEventArgs(Server server, string endpoint)
{ {
Server = server; Server = server;
@@ -295,11 +294,11 @@ namespace Discord
if (MemberVoiceStateUpdated != null) if (MemberVoiceStateUpdated != null)
MemberVoiceStateUpdated(this, new MemberEventArgs(member)); MemberVoiceStateUpdated(this, new MemberEventArgs(member));
} }
public event EventHandler<UserTypingEventArgs> MemberIsTyping; public event EventHandler<UserTypingEventArgs> UserIsTyping;
private void RaiseMemberIsTyping(Member member, Channel channel) private void RaiseUserIsTyping(User user, Channel channel)
{ {
if (MemberIsTyping != null) if (UserIsTyping != null)
MemberIsTyping(this, new UserTypingEventArgs(member, channel)); UserIsTyping(this, new UserTypingEventArgs(user, channel));
} }
//Voice //Voice

View File

@@ -120,29 +120,29 @@ namespace Discord
{ {
Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, "Connected"); Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, "Connected");
Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, "Disconnected"); 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})"); 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.Server.Id})"); 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.Server.Id})"); 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})"); 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})"); 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})");
ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed Channel: {e.Server.Name}/{e.Channel.Name} ({e.ServerId}/{e.ChannelId})"); ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created 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}/{e.Channel.Name} ({e.ServerId}/{e.ChannelId})"); ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Destroyed 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}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name} ({e.ServerId ?? "0"}/{e.ChannelId})");
MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Message: {e.Server.Name}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{e.ChannelId}/{e.MessageId})"); 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})");
MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated 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 ?? "[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}/{e.Channel.Name}/{e.MessageId} ({e.ServerId}/{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})");
MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Sent 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 ?? "[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}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); 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})");
RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Role: {e.Server.Name}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Created 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}/{e.Role.Name} ({e.ServerId}/{e.RoleId})."); RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated 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}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Deleted Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name} ({e.ServerId ?? "0"}/{e.RoleId}).");
BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Ban: {e.Server.Name}/{e.User?.Name ?? "Unknown"} ({e.ServerId}/{e.UserId})."); BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added 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}/{e.User.Name} ({e.ServerId}/{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}).");
MemberRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed Member: {e.Server.Name}/{e.User.Name} ({e.ServerId}/{e.UserId})."); MemberAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Added 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}/{e.User.Name} ({e.ServerId}/{e.UserId})."); MemberRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Removed 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}/{e.User.Name} ({e.ServerId}/{e.UserId})"); MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Updated Member: {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}/{e.User.Name} ({e.ServerId}/{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})");
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})"); 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"); VoiceConnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Voice Connected");
VoiceDisconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Voice Disconnected"); VoiceDisconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Voice Disconnected");
@@ -429,16 +429,13 @@ namespace Discord
{ {
var data = e.Payload.ToObject<Events.TypingStart>(_serializer); var data = e.Payload.ToObject<Events.TypingStart>(_serializer);
var channel = _channels[data.ChannelId]; var channel = _channels[data.ChannelId];
if (_config.TrackActivity) var user = _users[data.UserId];
if (user != null)
{ {
var user = _users[data.UserId]; if (_config.TrackActivity)
user.UpdateActivity(DateTime.UtcNow); user.UpdateActivity(DateTime.UtcNow);
} if (channel != null)
if (channel != null) RaiseEvent(nameof(UserIsTyping), () => RaiseUserIsTyping(user, channel));
{
var member = _members[data.UserId, channel.ServerId];
if (member != null)
RaiseEvent(nameof(MemberIsTyping), () => RaiseMemberIsTyping(member, channel));
} }
} }
break; break;