Browse Source

Use IUser instead of userid, add IGuild param to ToEntity

Replace ulong? user id of GuildEmote with Optional<IUser>.

Adds a util function in EntityExtensions for getting the emote
author, which requires the IGuild. Updates the GuildEmote
ToEntity extension to require an IGuild as a parameter.

Updates all instances of ToEntity to supply this IGuild parameter.
pull/1214/head
Chris Johnston 6 years ago
parent
commit
989418e056
5 changed files with 21 additions and 14 deletions
  1. +6
    -6
      src/Discord.Net.Core/Entities/Emotes/GuildEmote.cs
  2. +3
    -3
      src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
  3. +1
    -1
      src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
  4. +9
    -2
      src/Discord.Net.Rest/Extensions/EntityExtensions.cs
  5. +2
    -2
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs

+ 6
- 6
src/Discord.Net.Core/Entities/Emotes/GuildEmote.cs View File

@@ -31,19 +31,19 @@ namespace Discord
/// </returns>
public IReadOnlyList<ulong> RoleIds { get; }
/// <summary>
/// Gets the user Id that created this emoji.
/// Gets the User that created this emoji.
/// </summary>
/// <returns>
/// A user Id of the user who created this emoji, which may be null. A null value only indicates that the creator was not supplied as part of the API response.
/// </returns>
public ulong? CreatorId { get; }
/// An optional <see cref="IUser"/> who created this emoji. An unspecified value only indicates that the creator was not supplied as part of the API response.
/// </returns>
public Optional<IUser> Creator { get; }

internal GuildEmote(ulong id, string name, bool animated, bool isManaged, bool requireColons, IReadOnlyList<ulong> roleIds, ulong? userId) : base(id, name, animated)
internal GuildEmote(ulong id, string name, bool animated, bool isManaged, bool requireColons, IReadOnlyList<ulong> roleIds, Optional<IUser> creator) : base(id, name, animated)
{
IsManaged = isManaged;
RequireColons = requireColons;
RoleIds = roleIds;
CreatorId = userId;
Creator = creator;
}

private string DebuggerDisplay => $"{Name} ({Id})";


+ 3
- 3
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs View File

@@ -393,7 +393,7 @@ namespace Discord.Rest
public static async Task<GuildEmote> GetEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, RequestOptions options)
{
var emote = await client.ApiClient.GetGuildEmoteAsync(guild.Id, id, options).ConfigureAwait(false);
return emote.ToEntity();
return emote.ToEntity(guild);
}
public static async Task<GuildEmote> CreateEmoteAsync(IGuild guild, BaseDiscordClient client, string name, Image image, Optional<IEnumerable<IRole>> roles,
RequestOptions options)
@@ -407,7 +407,7 @@ namespace Discord.Rest
apiargs.RoleIds = roles.Value?.Select(xr => xr.Id).ToArray();

var emote = await client.ApiClient.CreateGuildEmoteAsync(guild.Id, apiargs, options).ConfigureAwait(false);
return emote.ToEntity();
return emote.ToEntity(guild);
}
/// <exception cref="ArgumentNullException"><paramref name="func"/> is <c>null</c>.</exception>
public static async Task<GuildEmote> ModifyEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, Action<EmoteProperties> func,
@@ -426,7 +426,7 @@ namespace Discord.Rest
apiargs.RoleIds = props.Roles.Value?.Select(xr => xr.Id).ToArray();

var emote = await client.ApiClient.ModifyGuildEmoteAsync(guild.Id, id, apiargs, options).ConfigureAwait(false);
return emote.ToEntity();
return emote.ToEntity(guild);
}
public static Task DeleteEmoteAsync(IGuild guild, BaseDiscordClient client, ulong id, RequestOptions options)
=> client.ApiClient.DeleteGuildEmoteAsync(guild.Id, id, options);


+ 1
- 1
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs View File

@@ -109,7 +109,7 @@ namespace Discord.Rest
{
var emotes = ImmutableArray.CreateBuilder<GuildEmote>(model.Emojis.Length);
for (int i = 0; i < model.Emojis.Length; i++)
emotes.Add(model.Emojis[i].ToEntity());
emotes.Add(model.Emojis[i].ToEntity(this));
_emotes = emotes.ToImmutableArray();
}
else


+ 9
- 2
src/Discord.Net.Rest/Extensions/EntityExtensions.cs View File

@@ -5,9 +5,16 @@ namespace Discord.Rest
{
internal static class EntityExtensions
{
public static GuildEmote ToEntity(this API.Emoji model)
public static GuildEmote ToEntity(this API.Emoji model, IGuild guild)
{
return new GuildEmote(model.Id.Value, model.Name, model.Animated.GetValueOrDefault(), model.Managed, model.RequireColons, ImmutableArray.Create(model.Roles), model.User.IsSpecified ? model.User.Value.Id : (ulong?)null);
return new GuildEmote(model.Id.Value, model.Name, model.Animated.GetValueOrDefault(), model.Managed, model.RequireColons, ImmutableArray.Create(model.Roles), GetEmoteAuthor(model, guild));
}

internal static Optional<IUser> GetEmoteAuthor(API.Emoji model, IGuild guild)
{
if (!model.User.IsSpecified || guild == null)
return new Optional<IUser>();
return new Optional<IUser>(guild.GetUserAsync(model.User.Value.Id).Result);
}

public static Embed ToEntity(this API.Embed model)


+ 2
- 2
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -359,7 +359,7 @@ namespace Discord.WebSocket
{
var emojis = ImmutableArray.CreateBuilder<GuildEmote>(model.Emojis.Length);
for (int i = 0; i < model.Emojis.Length; i++)
emojis.Add(model.Emojis[i].ToEntity());
emojis.Add(model.Emojis[i].ToEntity(this));
_emotes = emojis.ToImmutable();
}
else
@@ -409,7 +409,7 @@ namespace Discord.WebSocket
{
var emotes = ImmutableArray.CreateBuilder<GuildEmote>(model.Emojis.Length);
for (int i = 0; i < model.Emojis.Length; i++)
emotes.Add(model.Emojis[i].ToEntity());
emotes.Add(model.Emojis[i].ToEntity(this));
_emotes = emotes.ToImmutable();
}



Loading…
Cancel
Save