* Enforce valid button styles * support command option type 11 * missing '.' * Added type converter. Co-authored-by: Cat <lumitydev@gmail.com> Co-authored-by: CottageDwellingCat <80918250+CottageDwellingCat@users.noreply.github.com> Co-authored-by: FeroxFoxxo <feroxfoxxo@gmail.com> Co-authored-by: Cat <lumitydev@gmail.com> Co-authored-by: CottageDwellingCat <80918250+CottageDwellingCat@users.noreply.github.com>tags/3.3.0
@@ -53,6 +53,11 @@ namespace Discord | |||||
/// <summary> | /// <summary> | ||||
/// A <see cref="double"/>. | /// A <see cref="double"/>. | ||||
/// </summary> | /// </summary> | ||||
Number = 10 | |||||
Number = 10, | |||||
/// <summary> | |||||
/// A <see cref="Discord.Attachment"/>. | |||||
/// </summary> | |||||
Attachment = 11 | |||||
} | } | ||||
} | } |
@@ -163,6 +163,7 @@ namespace Discord.Interactions | |||||
{ | { | ||||
[typeof(IChannel)] = typeof(DefaultChannelConverter<>), | [typeof(IChannel)] = typeof(DefaultChannelConverter<>), | ||||
[typeof(IRole)] = typeof(DefaultRoleConverter<>), | [typeof(IRole)] = typeof(DefaultRoleConverter<>), | ||||
[typeof(IAttachment)] = typeof(DefaultAttachmentConverter<>), | |||||
[typeof(IUser)] = typeof(DefaultUserConverter<>), | [typeof(IUser)] = typeof(DefaultUserConverter<>), | ||||
[typeof(IMentionable)] = typeof(DefaultMentionableConverter<>), | [typeof(IMentionable)] = typeof(DefaultMentionableConverter<>), | ||||
[typeof(IConvertible)] = typeof(DefaultValueConverter<>), | [typeof(IConvertible)] = typeof(DefaultValueConverter<>), | ||||
@@ -20,6 +20,11 @@ namespace Discord.Interactions | |||||
} | } | ||||
} | } | ||||
internal class DefaultAttachmentConverter<T> : DefaultEntityTypeConverter<T> where T : class, IAttachment | |||||
{ | |||||
public override ApplicationCommandOptionType GetDiscordType() => ApplicationCommandOptionType.Attachment; | |||||
} | |||||
internal class DefaultRoleConverter<T> : DefaultEntityTypeConverter<T> where T : class, IRole | internal class DefaultRoleConverter<T> : DefaultEntityTypeConverter<T> where T : class, IRole | ||||
{ | { | ||||
public override ApplicationCommandOptionType GetDiscordType ( ) => ApplicationCommandOptionType.Role; | public override ApplicationCommandOptionType GetDiscordType ( ) => ApplicationCommandOptionType.Role; | ||||
@@ -18,5 +18,7 @@ namespace Discord.API | |||||
public Optional<Dictionary<string, Role>> Roles { get; set; } | public Optional<Dictionary<string, Role>> Roles { get; set; } | ||||
[JsonProperty("messages")] | [JsonProperty("messages")] | ||||
public Optional<Dictionary<string, Message>> Messages { get; set; } | public Optional<Dictionary<string, Message>> Messages { get; set; } | ||||
[JsonProperty("attachments")] | |||||
public Optional<Dictionary<string, Attachment>> Attachments { get; set; } | |||||
} | } | ||||
} | } |
@@ -19,6 +19,9 @@ namespace Discord.Rest | |||||
internal readonly Dictionary<ulong, RestMessage> Messages | internal readonly Dictionary<ulong, RestMessage> Messages | ||||
= new Dictionary<ulong, RestMessage>(); | = new Dictionary<ulong, RestMessage>(); | ||||
internal readonly Dictionary<ulong, Attachment> Attachments | |||||
= new Dictionary<ulong, Attachment>(); | |||||
internal async Task PopulateAsync(DiscordRestClient discord, RestGuild guild, IRestMessageChannel channel, T model) | internal async Task PopulateAsync(DiscordRestClient discord, RestGuild guild, IRestMessageChannel channel, T model) | ||||
{ | { | ||||
var resolved = model.Resolved.Value; | var resolved = model.Resolved.Value; | ||||
@@ -91,6 +94,16 @@ namespace Discord.Rest | |||||
Messages.Add(message.Id, message); | Messages.Add(message.Id, message); | ||||
} | } | ||||
} | } | ||||
if (resolved.Attachments.IsSpecified) | |||||
{ | |||||
foreach (var attachment in resolved.Attachments.Value) | |||||
{ | |||||
var discordAttachment = Attachment.Create(attachment.Value); | |||||
Attachments.Add(ulong.Parse(attachment.Key), discordAttachment); | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -43,6 +43,7 @@ namespace Discord.Rest | |||||
case ApplicationCommandOptionType.Role: | case ApplicationCommandOptionType.Role: | ||||
case ApplicationCommandOptionType.Channel: | case ApplicationCommandOptionType.Channel: | ||||
case ApplicationCommandOptionType.Mentionable: | case ApplicationCommandOptionType.Mentionable: | ||||
case ApplicationCommandOptionType.Attachment: | |||||
if (ulong.TryParse($"{model.Value.Value}", out var valueId)) | if (ulong.TryParse($"{model.Value.Value}", out var valueId)) | ||||
{ | { | ||||
switch (Type) | switch (Type) | ||||
@@ -80,6 +81,9 @@ namespace Discord.Rest | |||||
} | } | ||||
} | } | ||||
break; | break; | ||||
case ApplicationCommandOptionType.Attachment: | |||||
Value = data.ResolvableData.Attachments.FirstOrDefault(x => x.Key == valueId).Value; | |||||
break; | |||||
default: | default: | ||||
Value = model.Value.Value; | Value = model.Value.Value; | ||||
break; | break; | ||||
@@ -39,6 +39,7 @@ namespace Discord.WebSocket | |||||
case ApplicationCommandOptionType.Role: | case ApplicationCommandOptionType.Role: | ||||
case ApplicationCommandOptionType.Channel: | case ApplicationCommandOptionType.Channel: | ||||
case ApplicationCommandOptionType.Mentionable: | case ApplicationCommandOptionType.Mentionable: | ||||
case ApplicationCommandOptionType.Attachment: | |||||
if (ulong.TryParse($"{model.Value.Value}", out var valueId)) | if (ulong.TryParse($"{model.Value.Value}", out var valueId)) | ||||
{ | { | ||||
switch (Type) | switch (Type) | ||||
@@ -76,6 +77,9 @@ namespace Discord.WebSocket | |||||
} | } | ||||
} | } | ||||
break; | break; | ||||
case ApplicationCommandOptionType.Attachment: | |||||
Value = data.ResolvableData.Attachments.FirstOrDefault(x => x.Key == valueId).Value; | |||||
break; | |||||
default: | default: | ||||
Value = model.Value.Value; | Value = model.Value.Value; | ||||
break; | break; | ||||
@@ -16,6 +16,9 @@ namespace Discord.WebSocket | |||||
internal readonly Dictionary<ulong, SocketMessage> Messages | internal readonly Dictionary<ulong, SocketMessage> Messages | ||||
= new Dictionary<ulong, SocketMessage>(); | = new Dictionary<ulong, SocketMessage>(); | ||||
internal readonly Dictionary<ulong, Attachment> Attachments | |||||
= new Dictionary<ulong, Attachment>(); | |||||
internal SocketResolvableData(DiscordSocketClient discord, ulong? guildId, T model) | internal SocketResolvableData(DiscordSocketClient discord, ulong? guildId, T model) | ||||
{ | { | ||||
var guild = guildId.HasValue ? discord.GetGuild(guildId.Value) : null; | var guild = guildId.HasValue ? discord.GetGuild(guildId.Value) : null; | ||||
@@ -104,6 +107,16 @@ namespace Discord.WebSocket | |||||
Messages.Add(message.Id, message); | Messages.Add(message.Id, message); | ||||
} | } | ||||
} | } | ||||
if (resolved.Attachments.IsSpecified) | |||||
{ | |||||
foreach (var attachment in resolved.Attachments.Value) | |||||
{ | |||||
var discordAttachment = Attachment.Create(attachment.Value); | |||||
Attachments.Add(ulong.Parse(attachment.Key), discordAttachment); | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |