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)