* Init * Fix channelid xmldoctags/3.7.1
| @@ -121,7 +121,7 @@ namespace Discord.Rest | |||
| /// A <see cref="RestInteraction"/> that represents the incoming http interaction. | |||
| /// </returns> | |||
| /// <exception cref="BadSignatureException">Thrown when the signature doesn't match the public key.</exception> | |||
| public Task<RestInteraction> ParseHttpInteractionAsync(string publicKey, string signature, string timestamp, string body, Func<InteractionType, bool> doApiCallOnCreation = null) | |||
| public Task<RestInteraction> ParseHttpInteractionAsync(string publicKey, string signature, string timestamp, string body, Func<InteractionProperties, bool> doApiCallOnCreation = null) | |||
| => ParseHttpInteractionAsync(publicKey, signature, timestamp, Encoding.UTF8.GetBytes(body), doApiCallOnCreation); | |||
| /// <summary> | |||
| @@ -135,7 +135,7 @@ namespace Discord.Rest | |||
| /// A <see cref="RestInteraction"/> that represents the incoming http interaction. | |||
| /// </returns> | |||
| /// <exception cref="BadSignatureException">Thrown when the signature doesn't match the public key.</exception> | |||
| public async Task<RestInteraction> ParseHttpInteractionAsync(string publicKey, string signature, string timestamp, byte[] body, Func<InteractionType, bool> doApiCallOnCreation = null) | |||
| public async Task<RestInteraction> ParseHttpInteractionAsync(string publicKey, string signature, string timestamp, byte[] body, Func<InteractionProperties, bool> doApiCallOnCreation = null) | |||
| { | |||
| if (!IsValidHttpInteraction(publicKey, signature, timestamp, body)) | |||
| { | |||
| @@ -146,7 +146,7 @@ namespace Discord.Rest | |||
| using (var jsonReader = new JsonTextReader(textReader)) | |||
| { | |||
| var model = Serializer.Deserialize<API.Interaction>(jsonReader); | |||
| return await RestInteraction.CreateAsync(this, model, doApiCallOnCreation != null ? doApiCallOnCreation(model.Type) : _apiOnCreation); | |||
| return await RestInteraction.CreateAsync(this, model, doApiCallOnCreation is not null ? doApiCallOnCreation(new InteractionProperties(model)) : _apiOnCreation); | |||
| } | |||
| } | |||
| @@ -0,0 +1,101 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a class that contains data present in all interactions to evaluate against at rest-interaction creation. | |||
| /// </summary> | |||
| public readonly struct InteractionProperties | |||
| { | |||
| /// <summary> | |||
| /// The type of this interaction. | |||
| /// </summary> | |||
| public InteractionType Type { get; } | |||
| /// <summary> | |||
| /// Gets the type of application command this interaction represents. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// This will be <see langword="null"/> if the <see cref="Type"/> is not <see cref="InteractionType.ApplicationCommand"/>. | |||
| /// </remarks> | |||
| public ApplicationCommandType? CommandType { get; } | |||
| /// <summary> | |||
| /// Gets the name of the interaction. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// This will be <see cref="string.Empty"/> if the <see cref="Type"/> is not <see cref="InteractionType.ApplicationCommand"/>. | |||
| /// </remarks> | |||
| public string Name { get; } = string.Empty; | |||
| /// <summary> | |||
| /// Gets the custom ID of the interaction. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// This will be <see cref="string.Empty"/> if the <see cref="Type"/> is not <see cref="InteractionType.MessageComponent"/> or <see cref="InteractionType.ModalSubmit"/>. | |||
| /// </remarks> | |||
| public string CustomId { get; } = string.Empty; | |||
| /// <summary> | |||
| /// Gets the guild ID of the interaction. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// This will be <see langword="null"/> if this interaction was not executed in a guild. | |||
| /// </remarks> | |||
| public ulong? GuildId { get; } | |||
| /// <summary> | |||
| /// Gets the channel ID of the interaction. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// This will be <see langword="null"/> if this interaction is <see cref="InteractionType.Ping"/>. | |||
| /// </remarks> | |||
| public ulong? ChannelId { get; } | |||
| internal InteractionProperties(API.Interaction model) | |||
| { | |||
| Type = model.Type; | |||
| CommandType = null; | |||
| if (model.GuildId.IsSpecified) | |||
| GuildId = model.GuildId.Value; | |||
| else | |||
| GuildId = null; | |||
| if (model.ChannelId.IsSpecified) | |||
| ChannelId = model.ChannelId.Value; | |||
| else | |||
| ChannelId = null; | |||
| switch (Type) | |||
| { | |||
| case InteractionType.ApplicationCommand: | |||
| { | |||
| var data = (API.ApplicationCommandInteractionData)model.Data; | |||
| CommandType = data.Type; | |||
| Name = data.Name; | |||
| } | |||
| break; | |||
| case InteractionType.MessageComponent: | |||
| { | |||
| var data = (API.MessageComponentInteractionData)model.Data; | |||
| CustomId = data.CustomId; | |||
| } | |||
| break; | |||
| case InteractionType.ModalSubmit: | |||
| { | |||
| var data = (API.ModalInteractionData)model.Data; | |||
| CustomId = data.CustomId; | |||
| } | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||