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);
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);