Browse Source

Made properties that should have been Cacheable, Cacheable

pull/1362/head
Casino Boyale 6 years ago
parent
commit
9a0ac45098
2 changed files with 28 additions and 22 deletions
  1. +18
    -12
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  2. +10
    -10
      src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs

+ 18
- 12
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -1284,15 +1284,18 @@ namespace Discord.WebSocket
var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer); var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer);
if (State.GetChannel(data.ChannelId) is ISocketMessageChannel channel) 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 user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly).ConfigureAwait(false);
var reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage);


cachedMsg?.AddReaction(reaction);
var cUser = new Cacheable<IUser, ulong>(user, data.UserId, user != null, async () => await Rest.GetUserAsync(data.UserId).ConfigureAwait(false));
var cMsg = new Cacheable<IUserMessage, ulong>(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 else
{ {
@@ -1308,15 +1311,18 @@ namespace Discord.WebSocket
var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer); var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer);
if (State.GetChannel(data.ChannelId) is ISocketMessageChannel channel) 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 user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly).ConfigureAwait(false);
var reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
var cacheable = new Cacheable<IUserMessage, ulong>(cachedMsg, data.MessageId, isCached, async () => await channel.GetMessageAsync(data.MessageId).ConfigureAwait(false) as IUserMessage);


cachedMsg?.RemoveReaction(reaction);
var cUser = new Cacheable<IUser, ulong>(user, data.UserId, user != null, async () => await Rest.GetUserAsync(data.UserId).ConfigureAwait(false));
var cMsg = new Cacheable<IUserMessage, ulong>(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 else
{ {


+ 10
- 10
src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs View File

@@ -15,13 +15,13 @@ namespace Discord.WebSocket
/// </returns> /// </returns>
public ulong UserId { get; } public ulong UserId { get; }
/// <summary> /// <summary>
/// Gets the user who added the reaction if possible.
/// Gets the user who added the reaction.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// A user object where possible; a value is not always returned.
/// A socket-based user object where possible, otherwise a REST-based user.
/// </returns> /// </returns>
/// <seealso cref="Optional{T}"/>
public Optional<IUser> User { get; }
/// <seealso cref="Cacheable{TEntity, TId}"/>
public Cacheable<IUser, ulong> User { get; }
/// <summary> /// <summary>
/// Gets the ID of the message that has been reacted to. /// Gets the ID of the message that has been reacted to.
/// </summary> /// </summary>
@@ -30,13 +30,13 @@ namespace Discord.WebSocket
/// </returns> /// </returns>
public ulong MessageId { get; } public ulong MessageId { get; }
/// <summary> /// <summary>
/// Gets the message that has been reacted to if possible.
/// Gets the message that has been reacted to.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// A WebSocket-based message where possible; a value is not always returned.
/// A WebSocket-based message where possible, otherwise a REST-based message.
/// </returns> /// </returns>
/// <seealso cref="Optional{T}"/>
public Optional<SocketUserMessage> Message { get; }
/// <seealso cref="Cacheable{TEntity, TId}"/>
public Cacheable<IUserMessage, ulong> Message { get; }
/// <summary> /// <summary>
/// Gets the channel where the reaction takes place in. /// Gets the channel where the reaction takes place in.
/// </summary> /// </summary>
@@ -47,7 +47,7 @@ namespace Discord.WebSocket
/// <inheritdoc /> /// <inheritdoc />
public IEmote Emote { get; } public IEmote Emote { get; }


internal SocketReaction(ISocketMessageChannel channel, ulong messageId, Optional<SocketUserMessage> message, ulong userId, Optional<IUser> user, IEmote emoji)
internal SocketReaction(ISocketMessageChannel channel, ulong messageId, Cacheable<IUserMessage, ulong> message, ulong userId, Cacheable<IUser, ulong> user, IEmote emoji)
{ {
Channel = channel; Channel = channel;
MessageId = messageId; MessageId = messageId;
@@ -56,7 +56,7 @@ namespace Discord.WebSocket
User = user; User = user;
Emote = emoji; Emote = emoji;
} }
internal static SocketReaction Create(Model model, ISocketMessageChannel channel, Optional<SocketUserMessage> message, Optional<IUser> user)
internal static SocketReaction Create(Model model, ISocketMessageChannel channel, Cacheable<IUserMessage, ulong> message, Cacheable<IUser, ulong> user)
{ {
IEmote emote; IEmote emote;
if (model.Emoji.Id.HasValue) if (model.Emoji.Id.HasValue)


Loading…
Cancel
Save