Restructure and replace emojis with a new emote system (#619)

This commit is contained in:
Christopher F
2017-05-04 11:52:48 -04:00
committed by RogueException
parent ba1982a3f9
commit 576a52cdc6
18 changed files with 170 additions and 140 deletions

View File

@@ -3,10 +3,10 @@ using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Threading.Tasks;
using Model = Discord.API.Guild;
using EmbedModel = Discord.API.GuildEmbed;
using System.Linq;
using System.Threading.Tasks;
using EmbedModel = Discord.API.GuildEmbed;
using Model = Discord.API.Guild;
namespace Discord.Rest
{
@@ -14,7 +14,7 @@ namespace Discord.Rest
public class RestGuild : RestEntity<ulong>, IGuild, IUpdateable
{
private ImmutableDictionary<ulong, RestRole> _roles;
private ImmutableArray<GuildEmoji> _emojis;
private ImmutableArray<GuildEmote> _emotes;
private ImmutableArray<string> _features;
public string Name { get; private set; }
@@ -39,7 +39,7 @@ namespace Discord.Rest
public RestRole EveryoneRole => GetRole(Id);
public IReadOnlyCollection<RestRole> Roles => _roles.ToReadOnlyCollection();
public IReadOnlyCollection<GuildEmoji> Emojis => _emojis;
public IReadOnlyCollection<GuildEmote> Emotes => _emotes;
public IReadOnlyCollection<string> Features => _features;
internal RestGuild(BaseDiscordClient client, ulong id)
@@ -69,13 +69,13 @@ namespace Discord.Rest
if (model.Emojis != null)
{
var emojis = ImmutableArray.CreateBuilder<GuildEmoji>(model.Emojis.Length);
var emotes = ImmutableArray.CreateBuilder<GuildEmote>(model.Emojis.Length);
for (int i = 0; i < model.Emojis.Length; i++)
emojis.Add(model.Emojis[i].ToEntity());
_emojis = emojis.ToImmutableArray();
emotes.Add(model.Emojis[i].ToEntity());
_emotes = emotes.ToImmutableArray();
}
else
_emojis = ImmutableArray.Create<GuildEmoji>();
_emotes = ImmutableArray.Create<GuildEmote>();
if (model.Features != null)
_features = model.Features.ToImmutableArray();

View File

@@ -28,19 +28,14 @@ namespace Discord.Rest
await client.ApiClient.DeleteMessageAsync(msg.Channel.Id, msg.Id, options).ConfigureAwait(false);
}
public static async Task AddReactionAsync(IMessage msg, Emoji emoji, BaseDiscordClient client, RequestOptions options)
=> await AddReactionAsync(msg, $"{emoji.Name}:{emoji.Id}", client, options).ConfigureAwait(false);
public static async Task AddReactionAsync(IMessage msg, string emoji, BaseDiscordClient client, RequestOptions options)
public static async Task AddReactionAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options)
{
await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emoji, options).ConfigureAwait(false);
await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false);
}
public static async Task RemoveReactionAsync(IMessage msg, IUser user, Emoji emoji, BaseDiscordClient client, RequestOptions options)
=> await RemoveReactionAsync(msg, user, emoji.Id == null ? emoji.Name : $"{emoji.Name}:{emoji.Id}", client, options).ConfigureAwait(false);
public static async Task RemoveReactionAsync(IMessage msg, IUser user, string emoji, BaseDiscordClient client,
RequestOptions options)
public static async Task RemoveReactionAsync(IMessage msg, IUser user, IEmote emote, BaseDiscordClient client, RequestOptions options)
{
await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, user.Id, emoji, options).ConfigureAwait(false);
await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, user.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false);
}
public static async Task RemoveAllReactionsAsync(IMessage msg, BaseDiscordClient client, RequestOptions options)
@@ -109,8 +104,8 @@ namespace Discord.Rest
mentionedRole = guild.GetRole(id);
tags.Add(new Tag<IRole>(TagType.RoleMention, index, content.Length, id, mentionedRole));
}
else if (Emoji.TryParse(content, out var emoji))
tags.Add(new Tag<Emoji>(TagType.Emoji, index, content.Length, emoji.Id ?? 0, emoji));
else if (Emote.TryParse(content, out var emoji))
tags.Add(new Tag<Emote>(TagType.Emoji, index, content.Length, emoji.Id, emoji));
else //Bad Tag
{
index = index + 1;

View File

@@ -4,19 +4,24 @@ namespace Discord.Rest
{
public class RestReaction : IReaction
{
public Emoji Emoji { get; }
public IEmote Emote { get; }
public int Count { get; }
public bool Me { get; }
internal RestReaction(Emoji emoji, int count, bool me)
internal RestReaction(IEmote emote, int count, bool me)
{
Emoji = emoji;
Emote = emote;
Count = count;
Me = me;
}
internal static RestReaction Create(Model model)
{
return new RestReaction(new Emoji(model.Emoji.Id, model.Emoji.Name), model.Count, model.Me);
IEmote emote;
if (model.Emoji.Id.HasValue)
emote = new Emote(model.Emoji.Id.Value, model.Emoji.Name);
else
emote = new Emoji(model.Emoji.Name);
return new RestReaction(emote, model.Count, model.Me);
}
}
}

View File

@@ -27,7 +27,7 @@ namespace Discord.Rest
public override IReadOnlyCollection<ulong> MentionedRoleIds => MessageHelper.FilterTagsByKey(TagType.RoleMention, _tags);
public override IReadOnlyCollection<RestUser> MentionedUsers => MessageHelper.FilterTagsByValue<RestUser>(TagType.UserMention, _tags);
public override IReadOnlyCollection<ITag> Tags => _tags;
public IReadOnlyDictionary<Emoji, ReactionMetadata> Reactions => _reactions.ToDictionary(x => x.Emoji, x => new ReactionMetadata { ReactionCount = x.Count, IsMe = x.Me });
public IReadOnlyDictionary<IEmote, ReactionMetadata> Reactions => _reactions.ToDictionary(x => x.Emote, x => new ReactionMetadata { ReactionCount = x.Count, IsMe = x.Me });
internal RestUserMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source)
: base(discord, id, channel, author, source)
@@ -130,21 +130,15 @@ namespace Discord.Rest
Update(model);
}
public Task AddReactionAsync(Emoji emoji, RequestOptions options = null)
=> MessageHelper.AddReactionAsync(this, emoji, Discord, options);
public Task AddReactionAsync(string emoji, RequestOptions options = null)
=> MessageHelper.AddReactionAsync(this, emoji, Discord, options);
public Task RemoveReactionAsync(Emoji emoji, IUser user, RequestOptions options = null)
=> MessageHelper.RemoveReactionAsync(this, user, emoji, Discord, options);
public Task RemoveReactionAsync(string emoji, IUser user, RequestOptions options = null)
=> MessageHelper.RemoveReactionAsync(this, user, emoji, Discord, options);
public Task AddReactionAsync(IEmote emote, RequestOptions options = null)
=> MessageHelper.AddReactionAsync(this, emote, Discord, options);
public Task RemoveReactionAsync(IEmote emote, IUser user, RequestOptions options = null)
=> MessageHelper.RemoveReactionAsync(this, user, emote, Discord, options);
public Task RemoveAllReactionsAsync(RequestOptions options = null)
=> MessageHelper.RemoveAllReactionsAsync(this, Discord, options);
public Task<IReadOnlyCollection<IUser>> GetReactionUsersAsync(string emoji, int limit = 100, ulong? afterUserId = null, RequestOptions options = null)
=> MessageHelper.GetReactionUsersAsync(this, emoji, x => { x.Limit = limit; x.AfterUserId = afterUserId.HasValue ? afterUserId.Value : Optional.Create<ulong>(); }, Discord, options);
=> MessageHelper.GetReactionUsersAsync(this, emoji, x => { x.Limit = limit; x.AfterUserId = afterUserId ?? Optional.Create<ulong>(); }, Discord, options);
public Task PinAsync(RequestOptions options = null)