Cleaned up Reactions PR

This commit is contained in:
RogueException
2016-11-27 00:55:01 -04:00
parent 2e1ec5803b
commit f56a1b653d
8 changed files with 41 additions and 51 deletions

View File

@@ -2,6 +2,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Globalization; using System.Globalization;
using Model = Discord.API.Emoji;
namespace Discord namespace Discord
{ {
@@ -18,8 +19,7 @@ namespace Discord
Id = id; Id = id;
Name = name; Name = name;
} }
internal static Emoji Create(Model emoji)
internal static Emoji FromApi(API.Emoji emoji)
{ {
return new Emoji(emoji.Id.GetValueOrDefault(), emoji.Name); return new Emoji(emoji.Id.GetValueOrDefault(), emoji.Name);
} }

View File

@@ -1,9 +1,4 @@
using System; namespace Discord
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Discord
{ {
public interface IReaction public interface IReaction
{ {

View File

@@ -44,7 +44,6 @@ namespace Discord
} }
} }
private static ArgumentException CreateNotEmptyException(string name, string msg) private static ArgumentException CreateNotEmptyException(string name, string msg)
{ {
if (msg == null) return new ArgumentException(name, "Argument cannot be blank."); if (msg == null) return new ArgumentException(name, "Argument cannot be blank.");

View File

@@ -1,22 +1,22 @@
using System; using Model = Discord.API.Reaction;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Model = Discord.API.Reaction;
namespace Discord namespace Discord
{ {
public class RestReaction : IReaction public class RestReaction : IReaction
{ {
internal RestReaction(Model model) public Emoji Emoji { get; }
{ public int Count { get; }
Emoji = Emoji.FromApi(model.Emoji); public bool Me { get; }
Count = model.Count;
Me = model.Me;
}
public Emoji Emoji { get; private set; } internal RestReaction(Emoji emoji, int count, bool me)
public int Count { get; private set; } {
public bool Me { get; private set; } Emoji = emoji;
Count = count;
Me = me;
}
internal static RestReaction Create(Model model)
{
return new RestReaction(Emoji.Create(model.Emoji), model.Count, model.Me);
}
} }
} }

View File

@@ -109,7 +109,7 @@ namespace Discord.Rest
{ {
var reactions = ImmutableArray.CreateBuilder<RestReaction>(value.Length); var reactions = ImmutableArray.CreateBuilder<RestReaction>(value.Length);
for (int i = 0; i < value.Length; i++) for (int i = 0; i < value.Length; i++)
reactions.Add(new RestReaction(value[i])); reactions.Add(RestReaction.Create(value[i]));
_reactions = reactions.ToImmutable(); _reactions = reactions.ToImmutable();
} }
else else

View File

@@ -1,12 +1,8 @@
using System; using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Discord.API.Gateway namespace Discord.API.Gateway
{ {
public class GatewayReaction public class Reaction
{ {
[JsonProperty("user_id")] [JsonProperty("user_id")]
public ulong UserId { get; set; } public ulong UserId { get; set; }

View File

@@ -1312,13 +1312,13 @@ namespace Discord.WebSocket
{ {
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_REACTION_ADD)").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_REACTION_ADD)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<GatewayReaction>(_serializer); var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer);
var channel = State.GetChannel(data.ChannelId) as ISocketMessageChannel; var channel = State.GetChannel(data.ChannelId) as ISocketMessageChannel;
if (channel != null) if (channel != null)
{ {
SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage;
var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly); var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly);
SocketReaction reaction = new SocketReaction(data, channel, Optional.Create(cachedMsg), Optional.Create(user)); SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
if (cachedMsg != null) if (cachedMsg != null)
{ {
@@ -1339,13 +1339,13 @@ namespace Discord.WebSocket
{ {
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_REACTION_REMOVE)").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_REACTION_REMOVE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<GatewayReaction>(_serializer); var data = (payload as JToken).ToObject<API.Gateway.Reaction>(_serializer);
var channel = State.GetChannel(data.ChannelId) as ISocketMessageChannel; var channel = State.GetChannel(data.ChannelId) as ISocketMessageChannel;
if (channel != null) if (channel != null)
{ {
SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage; SocketUserMessage cachedMsg = channel.GetCachedMessage(data.MessageId) as SocketUserMessage;
var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly); var user = await channel.GetUserAsync(data.UserId, CacheMode.CacheOnly);
SocketReaction reaction = new SocketReaction(data, channel, Optional.Create(cachedMsg), Optional.Create(user)); SocketReaction reaction = SocketReaction.Create(data, channel, cachedMsg, Optional.Create(user));
if (cachedMsg != null) if (cachedMsg != null)
{ {
cachedMsg.RemoveReaction(reaction); cachedMsg.RemoveReaction(reaction);

View File

@@ -1,28 +1,28 @@
using System; using Model = Discord.API.Gateway.Reaction;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Model = Discord.API.Gateway.GatewayReaction;
namespace Discord.WebSocket namespace Discord.WebSocket
{ {
public class SocketReaction : IReaction public class SocketReaction : IReaction
{ {
internal SocketReaction(Model model, ISocketMessageChannel channel, Optional<SocketUserMessage> message, Optional<IUser> user) public ulong UserId { get; }
public Optional<IUser> User { get; }
public ulong MessageId { get; }
public Optional<SocketUserMessage> Message { get; }
public ISocketMessageChannel Channel { get; }
public Emoji Emoji { get; }
internal SocketReaction(ISocketMessageChannel channel, ulong messageId, Optional<SocketUserMessage> message, ulong userId, Optional<IUser> user, Emoji emoji)
{ {
Channel = channel; Channel = channel;
MessageId = messageId;
Message = message; Message = message;
MessageId = model.MessageId; UserId = userId;
User = user; User = user;
UserId = model.UserId; Emoji = emoji;
Emoji = Emoji.FromApi(model.Emoji); }
internal static SocketReaction Create(Model model, ISocketMessageChannel channel, Optional<SocketUserMessage> message, Optional<IUser> user)
{
return new SocketReaction(channel, model.MessageId, message, model.UserId, user, Emoji.Create(model.Emoji));
} }
public ulong UserId { get; private set; }
public Optional<IUser> User { get; private set; }
public ulong MessageId { get; private set; }
public Optional<SocketUserMessage> Message { get; private set; }
public ISocketMessageChannel Channel { get; private set; }
public Emoji Emoji { get; private set; }
} }
} }