From 9a0ac450988eb49f6d8b86365f8d9f288a675ad4 Mon Sep 17 00:00:00 2001 From: Casino Boyale Date: Sat, 24 Aug 2019 08:27:08 +0100 Subject: [PATCH] Made properties that should have been Cacheable, Cacheable --- .../DiscordSocketClient.cs | 30 +++++++++++-------- .../Entities/Messages/SocketReaction.cs | 20 ++++++------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 196aedf47..95c74dd04 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1284,15 +1284,18 @@ namespace Discord.WebSocket var data = (payload as JToken).ToObject(_serializer); if (State.GetChannel(data.ChannelId) is ISocketMessageChannel channel) { - var cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; - bool isCached = cachedMsg != null; + var msg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; + var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly).ConfigureAwait(false); - var reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user)); - var cacheable = new Cacheable(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage); - cachedMsg?.AddReaction(reaction); + var cUser = new Cacheable(user, data.UserId, user != null, async () => await Rest.GetUserAsync(data.UserId).ConfigureAwait(false)); + var cMsg = new Cacheable(msg, data.MessageId, msg != null, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage); + + var reaction = SocketReaction.Create(data, channel, cMsg, cUser); + + msg?.AddReaction(reaction); - await TimedInvokeAsync(_reactionAddedEvent, nameof(ReactionAdded), cacheable, channel, reaction).ConfigureAwait(false); + await TimedInvokeAsync(_reactionAddedEvent, nameof(ReactionAdded), cMsg, channel, reaction).ConfigureAwait(false); } else { @@ -1308,15 +1311,18 @@ namespace Discord.WebSocket var data = (payload as JToken).ToObject(_serializer); if (State.GetChannel(data.ChannelId) is ISocketMessageChannel channel) { - var cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; - bool isCached = cachedMsg != null; + var msg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; + var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly).ConfigureAwait(false); - var reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user)); - var cacheable = new Cacheable(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage); - cachedMsg?.RemoveReaction(reaction); + var cUser = new Cacheable(user, data.UserId, user != null, async () => await Rest.GetUserAsync(data.UserId).ConfigureAwait(false)); + var cMsg = new Cacheable(msg, data.MessageId, msg != null, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage); + + var reaction = SocketReaction.Create(data, channel, cMsg, cUser); + + msg?.RemoveReaction(reaction); - await TimedInvokeAsync(_reactionRemovedEvent, nameof(ReactionRemoved), cacheable, channel, reaction).ConfigureAwait(false); + await TimedInvokeAsync(_reactionRemovedEvent, nameof(ReactionRemoved), cMsg, channel, reaction).ConfigureAwait(false); } else { diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs index 9c3a5f32b..b64279ae3 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs @@ -15,13 +15,13 @@ namespace Discord.WebSocket /// public ulong UserId { get; } /// - /// Gets the user who added the reaction if possible. + /// Gets the user who added the reaction. /// /// - /// A user object where possible; a value is not always returned. + /// A socket-based user object where possible, otherwise a REST-based user. /// - /// - public Optional User { get; } + /// + public Cacheable User { get; } /// /// Gets the ID of the message that has been reacted to. /// @@ -30,13 +30,13 @@ namespace Discord.WebSocket /// public ulong MessageId { get; } /// - /// Gets the message that has been reacted to if possible. + /// Gets the message that has been reacted to. /// /// - /// A WebSocket-based message where possible; a value is not always returned. + /// A WebSocket-based message where possible, otherwise a REST-based message. /// - /// - public Optional Message { get; } + /// + public Cacheable Message { get; } /// /// Gets the channel where the reaction takes place in. /// @@ -47,7 +47,7 @@ namespace Discord.WebSocket /// public IEmote Emote { get; } - internal SocketReaction(ISocketMessageChannel channel, ulong messageId, Optional message, ulong userId, Optional user, IEmote emoji) + internal SocketReaction(ISocketMessageChannel channel, ulong messageId, Cacheable message, ulong userId, Cacheable user, IEmote emoji) { Channel = channel; MessageId = messageId; @@ -56,7 +56,7 @@ namespace Discord.WebSocket User = user; Emote = emoji; } - internal static SocketReaction Create(Model model, ISocketMessageChannel channel, Optional message, Optional user) + internal static SocketReaction Create(Model model, ISocketMessageChannel channel, Cacheable message, Cacheable user) { IEmote emote; if (model.Emoji.Id.HasValue)