From ee9ccf816b8ce614fc934ca136da0584cfdba5eb Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 15 Sep 2015 13:43:44 -0300 Subject: [PATCH] Crash fix and some added documentation. --- src/Discord.Net/Collections/Messages.cs | 6 +++--- src/Discord.Net/DiscordClient.API.cs | 16 ++++++++-------- src/Discord.Net/DiscordClient.cs | 19 ++++++++++++++++--- src/Discord.Net/Models/Message.cs | 3 ++- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/Discord.Net/Collections/Messages.cs b/src/Discord.Net/Collections/Messages.cs index 5d17cfd72..6c59a9233 100644 --- a/src/Discord.Net/Collections/Messages.cs +++ b/src/Discord.Net/Collections/Messages.cs @@ -11,18 +11,18 @@ namespace Discord.Collections _msgCleaner = new MessageCleaner(client); } - internal Message GetOrAdd(string id, string channelId) => GetOrAdd(id, () => new Message(_client, id, channelId)); + internal Message GetOrAdd(string id, string channelId, string userId) => GetOrAdd(id, () => new Message(_client, id, channelId, userId)); internal new Message TryRemove(string id) => base.TryRemove(id); internal new Message Remap(string oldKey, string newKey) => base.Remap(oldKey, newKey); protected override void OnCreated(Message item) { - item.Channel.AddMessage(item.UserId); + item.Channel.AddMessage(item.Id); item.User.AddRef(); } protected override void OnRemoved(Message item) { - item.Channel.RemoveMessage(item.UserId); + item.Channel.RemoveMessage(item.Id); item.User.RemoveRef(); } diff --git a/src/Discord.Net/DiscordClient.API.cs b/src/Discord.Net/DiscordClient.API.cs index 464889a1f..6b4b2feb6 100644 --- a/src/Discord.Net/DiscordClient.API.cs +++ b/src/Discord.Net/DiscordClient.API.cs @@ -254,7 +254,7 @@ namespace Discord var nonce = GenerateNonce(); if (_config.UseMessageQueue) { - var msg = _messages.GetOrAdd("nonce_" + nonce, channelId); + var msg = _messages.GetOrAdd("nonce_" + nonce, channelId, _currentUserId); msg.Update(new Net.API.Message { Content = blockText, @@ -269,9 +269,9 @@ namespace Discord } else { - var response = await _api.SendMessage(channelId, blockText, mentions, nonce).ConfigureAwait(false); - var msg = _messages.GetOrAdd(response.Id, channelId); - msg.Update(response); + var model = await _api.SendMessage(channelId, blockText, mentions, nonce).ConfigureAwait(false); + var msg = _messages.GetOrAdd(model.Id, channelId, model.Author.Id); + msg.Update(model); try { RaiseMessageSent(result[i]); } catch { } } await Task.Delay(1000).ConfigureAwait(false); @@ -319,9 +319,9 @@ namespace Discord if (text.Length > DiscordAPIClient.MaxMessageSize) text = text.Substring(0, DiscordAPIClient.MaxMessageSize); - var response = await _api.EditMessage(channelId, messageId, text, mentions).ConfigureAwait(false); - var msg = _messages.GetOrAdd(messageId, channelId); - msg.Update(response); + var model = await _api.EditMessage(channelId, messageId, text, mentions).ConfigureAwait(false); + var msg = _messages.GetOrAdd(messageId, channelId, model.Author.Id); + msg.Update(model); } /// Deletes the provided message. @@ -402,7 +402,7 @@ namespace Discord var msgs = await _api.GetMessages(channel.Id, count).ConfigureAwait(false); return msgs.Select(x => { - var msg = _messages.GetOrAdd(x.Id, x.ChannelId); + var msg = _messages.GetOrAdd(x.Id, x.ChannelId, x.Author.Id); msg.Update(x); if (_config.TrackActivity) { diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index c5a2c394b..94868be45 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -42,23 +42,36 @@ namespace Discord /// Returns the current logged-in user. public User CurrentUser => _currentUser; private User _currentUser; + /// Returns the id of the server this user is currently connected to for voice. + public string CurrentVoiceServerId => _voiceSocket.CurrentVoiceServerId; + /// Returns the server this user is currently connected to for voice. + public Server CurrentVoiceServer => _servers[_voiceSocket.CurrentVoiceServerId]; + /// Returns the current connection state of this client. public DiscordClientState State => (DiscordClientState)_state; private int _state; + /// Returns the configuration object used to make this client. Note that this object cannot be edited directly - to change the configuration of this client, use the DiscordClient(DiscordClientConfig config) constructor. public DiscordClientConfig Config => _config; private readonly DiscordClientConfig _config; - + + /// Returns a collection of all channels this client is a member of. public Channels Channels => _channels; private readonly Channels _channels; + /// Returns a collection of all user-server pairs this client can currently see. public Members Members => _members; private readonly Members _members; + /// Returns a collection of all messages this client has seen since logging in and currently has in cache. public Messages Messages => _messages; private readonly Messages _messages; + //TODO: Do we need the roles cache? + /// Returns a collection of all role-server pairs this client can currently see. public Roles Roles => _roles; private readonly Roles _roles; + /// Returns a collection of all servers this client is a member of. public Servers Servers => _servers; private readonly Servers _servers; + /// Returns a collection of all users this client can currently see. public Users Users => _users; private readonly Users _users; @@ -343,7 +356,7 @@ namespace Discord } if (msg == null) - msg = _messages.GetOrAdd(data.Id, data.ChannelId); + msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id); msg.Update(data); if (_config.TrackActivity) msg.User.UpdateActivity(data.Timestamp); @@ -355,7 +368,7 @@ namespace Discord case "MESSAGE_UPDATE": { var data = e.Payload.ToObject(_serializer); - var msg = _messages.GetOrAdd(data.Id, data.ChannelId); + var msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id); msg.Update(data); RaiseEvent(nameof(MessageUpdated), () => RaiseMessageUpdated(msg)); } diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index 3760b85f5..d597e7f9f 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -114,11 +114,12 @@ namespace Discord [JsonIgnore] public Member Member => _client.Members[ServerId, UserId]; - internal Message(DiscordClient client, string id, string channelId) + internal Message(DiscordClient client, string id, string channelId, string userId) { _client = client; Id = id; ChannelId = channelId; + UserId = userId; } internal void Update(Net.API.Message model)