Refactor, rearrange, reimplement reactions; receive over gateway

This commit is contained in:
Christopher F
2016-11-05 18:15:47 -04:00
parent 7018bc9c58
commit e2e2c4308d
15 changed files with 96 additions and 41 deletions

View File

@@ -27,7 +27,6 @@ namespace Discord.WebSocket
public virtual IReadOnlyCollection<SocketRole> MentionedRoles => ImmutableArray.Create<SocketRole>();
public virtual IReadOnlyCollection<SocketUser> MentionedUsers => ImmutableArray.Create<SocketUser>();
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>();
public virtual IReadOnlyCollection<IReaction> Reactions => ImmutableArray.Create<IReaction>();
public virtual ulong? WebhookId => null;
public bool IsWebhook => WebhookId != null;

View File

@@ -13,12 +13,12 @@ namespace Discord.WebSocket
UserId = model.UserId;
MessageId = model.MessageId;
ChannelId = model.ChannelId;
Emoji = model.Emoji;
Emoji = Emoji.FromApi(model.Emoji);
}
public ulong UserId { get; internal set; }
public ulong MessageId { get; internal set; }
public ulong ChannelId { get; internal set; }
public API.Emoji Emoji { get; internal set; }
public ulong UserId { get; private set; }
public ulong MessageId { get; private set; }
public ulong ChannelId { get; private set; }
public Emoji Emoji { get; private set; }
}
}

View File

@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Linq;
using Discord.API.Gateway;
using Model = Discord.API.Message;
@@ -19,7 +20,7 @@ namespace Discord.WebSocket
private ImmutableArray<Attachment> _attachments;
private ImmutableArray<Embed> _embeds;
private ImmutableArray<ITag> _tags;
private ImmutableArray<IReaction> _reactions;
private List<SocketReaction> _reactions = new List<SocketReaction>();
public override bool IsTTS => _isTTS;
public override bool IsPinned => _isPinned;
@@ -31,7 +32,7 @@ namespace Discord.WebSocket
public override IReadOnlyCollection<SocketGuildChannel> MentionedChannels => MessageHelper.FilterTagsByValue<SocketGuildChannel>(TagType.ChannelMention, _tags);
public override IReadOnlyCollection<SocketRole> MentionedRoles => MessageHelper.FilterTagsByValue<SocketRole>(TagType.RoleMention, _tags);
public override IReadOnlyCollection<SocketUser> MentionedUsers => MessageHelper.FilterTagsByValue<SocketUser>(TagType.UserMention, _tags);
public override IReadOnlyCollection<IReaction> Reactions => _reactions;
public IReadOnlyDictionary<Emoji, int> Reactions => _reactions.GroupBy(r => r.Emoji).ToDictionary(x => x.Key, x => x.Count());
internal SocketUserMessage(DiscordSocketClient discord, ulong id, ISocketMessageChannel channel, SocketUser author)
: base(discord, id, channel, author)
@@ -104,20 +105,6 @@ namespace Discord.WebSocket
}
}
if (model.Reactions.IsSpecified)
{
var value = model.Reactions.Value;
if (value.Length > 0)
{
var reactions = ImmutableArray.CreateBuilder<IReaction>(value.Length);
for (int i = 0; i < value.Length; i++)
reactions.Add(new SocketReaction(value[i] as GatewayReaction));
_reactions = reactions.ToImmutable();
}
else
_reactions = ImmutableArray.Create<IReaction>();
}
if (model.Content.IsSpecified)
{
var text = model.Content.Value;
@@ -126,6 +113,15 @@ namespace Discord.WebSocket
model.Content = text;
}
}
internal void AddReaction(SocketReaction reaction)
{
_reactions.Add(reaction);
}
internal void RemoveReaction(SocketReaction reaction)
{
if (_reactions.Contains(reaction))
_reactions.Remove(reaction);
}
public Task ModifyAsync(Action<ModifyMessageParams> func, RequestOptions options = null)
=> MessageHelper.ModifyAsync(this, Discord, func, options);