@@ -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 FromApi(API.Emoji emoji) | |||||
internal static Emoji Create(Model emoji) | |||||
{ | { | ||||
return new Emoji(emoji.Id.GetValueOrDefault(), emoji.Name); | return new Emoji(emoji.Id.GetValueOrDefault(), emoji.Name); | ||||
} | } | ||||
@@ -1,9 +1,4 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
namespace Discord | |||||
namespace Discord | |||||
{ | { | ||||
public interface IReaction | public interface IReaction | ||||
{ | { | ||||
@@ -42,8 +42,7 @@ namespace Discord | |||||
if (obj.Value == null) throw CreateNotNullException(name, msg); | if (obj.Value == null) throw CreateNotNullException(name, msg); | ||||
if (obj.Value.Trim().Length == 0) throw CreateNotEmptyException(name, msg); | if (obj.Value.Trim().Length == 0) throw CreateNotEmptyException(name, msg); | ||||
} | } | ||||
} | |||||
} | |||||
private static ArgumentException CreateNotEmptyException(string name, string msg) | private static ArgumentException CreateNotEmptyException(string name, string msg) | ||||
{ | { | ||||
@@ -1,22 +1,22 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
using Model = Discord.API.Reaction; | |||||
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; } | |||||
public bool Me { get; } | |||||
internal RestReaction(Emoji emoji, int count, bool me) | |||||
{ | { | ||||
Emoji = Emoji.FromApi(model.Emoji); | |||||
Count = model.Count; | |||||
Me = model.Me; | |||||
Emoji = emoji; | |||||
Count = count; | |||||
Me = me; | |||||
} | |||||
internal static RestReaction Create(Model model) | |||||
{ | |||||
return new RestReaction(Emoji.Create(model.Emoji), model.Count, model.Me); | |||||
} | } | ||||
public Emoji Emoji { get; private set; } | |||||
public int Count { get; private set; } | |||||
public bool Me { get; private set; } | |||||
} | } | ||||
} | } |
@@ -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 | ||||
@@ -1,12 +1,8 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
using Newtonsoft.Json; | |||||
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; } |
@@ -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); | ||||
@@ -1,28 +1,28 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
using Model = Discord.API.Gateway.GatewayReaction; | |||||
using Model = Discord.API.Gateway.Reaction; | |||||
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.FromApi(model.Emoji); | |||||
Emoji = 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; } | |||||
} | } | ||||
} | } |