| @@ -4461,7 +4461,7 @@ | |||
| </member> | |||
| <member name="T:Discord.ApplicationCommandProperties"> | |||
| <summary> | |||
| Provides properties that are used to modify a <see cref="T:Discord.IApplicationCommand" /> with the specified changes. | |||
| Represents the base class to create/modify application commands. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ApplicationCommandProperties.Name"> | |||
| @@ -4469,64 +4469,101 @@ | |||
| Gets or sets the name of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ApplicationCommandProperties.Description"> | |||
| <member name="T:Discord.ApplicationCommandType"> | |||
| <summary> | |||
| Gets or sets the discription of this command. | |||
| ApplicationCommandType is enum of current valid Application Command Types: Slash, User, Message | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ApplicationCommandProperties.Type"> | |||
| <member name="F:Discord.ApplicationCommandType.Slash"> | |||
| <summary> | |||
| Gets or sets the type for this command. | |||
| ApplicationCommandType.Slash is Slash command type | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ApplicationCommandProperties.Options"> | |||
| <member name="F:Discord.ApplicationCommandType.User"> | |||
| <summary> | |||
| Gets or sets the options for this command. | |||
| ApplicationCommandType.User is Context Menu User command type | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ApplicationCommandProperties.DefaultPermission"> | |||
| <member name="F:Discord.ApplicationCommandType.Message"> | |||
| <summary> | |||
| Whether the command is enabled by default when the app is added to a guild. Default is <see langword="true"/> | |||
| ApplicationCommandType.Message is Context Menu Message command type | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.ApplicationCommandType"> | |||
| <member name="T:Discord.MessageCommandBuilder"> | |||
| <summary> | |||
| ApplicationCommandType is enum of current valid Application Command Types: Slash, User, Message | |||
| A class used to build Message commands. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.ApplicationCommandType.Slash"> | |||
| <member name="F:Discord.MessageCommandBuilder.MaxNameLength"> | |||
| <summary> | |||
| Returns the maximun length a commands name allowed by Discord | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.MessageCommandBuilder.Name"> | |||
| <summary> | |||
| ApplicationCommandType.Slash is Slash command type | |||
| The name of this Message command. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.ApplicationCommandType.User"> | |||
| <member name="M:Discord.MessageCommandBuilder.Build"> | |||
| <summary> | |||
| ApplicationCommandType.User is Context Menu User command type | |||
| Build the current builder into a <see cref="T:Discord.MessageCommandProperties"/> class. | |||
| </summary> | |||
| <returns> | |||
| A <see cref="T:Discord.MessageCommandProperties"/> that can be used to create message commands. | |||
| </returns> | |||
| </member> | |||
| <member name="F:Discord.ApplicationCommandType.Message"> | |||
| <member name="M:Discord.MessageCommandBuilder.WithName(System.String)"> | |||
| <summary> | |||
| ApplicationCommandType.Message is Context Menu Message command type | |||
| Sets the field name. | |||
| </summary> | |||
| <param name="name">The value to set the field name to.</param> | |||
| <returns> | |||
| The current builder. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.ContextMenuCommandCreationProperties"> | |||
| <member name="T:Discord.MessageCommandProperties"> | |||
| <summary> | |||
| A class used to create Message commands. | |||
| A class used to create message commands. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.ContextMenuCommandCreationProperties.Name"> | |||
| <member name="T:Discord.UserCommandBuilder"> | |||
| <summary> | |||
| The name of this command. | |||
| A class used to build user commands. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.UserCommandBuilder.MaxNameLength"> | |||
| <summary> | |||
| Returns the maximun length a commands name allowed by Discord | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.UserCommandBuilder.Name"> | |||
| <summary> | |||
| The name of this User command. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.UserCommandBuilder.Build"> | |||
| <summary> | |||
| Build the current builder into a <see cref="T:Discord.UserCommandProperties"/> class. | |||
| </summary> | |||
| <returns>A <see cref="T:Discord.UserCommandProperties"/> that can be used to create user commands.</returns> | |||
| </member> | |||
| <member name="P:Discord.ContextMenuCommandCreationProperties.Type"> | |||
| <member name="M:Discord.UserCommandBuilder.WithName(System.String)"> | |||
| <summary> | |||
| Gets or sets the type for this command. | |||
| Sets the field name. | |||
| </summary> | |||
| <param name="name">The value to set the field name to.</param> | |||
| <returns> | |||
| The current builder. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.UserCommandProperties"> | |||
| <summary> | |||
| A class used to create User commands. | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.IApplicationCommand"> | |||
| <summary> | |||
| The base command model that belongs to an application. see <see href="https://discord.com/developers/docs/interactions/slash-commands#applicationcommand"/> | |||
| The base command model that belongs to an application. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.IApplicationCommand.ApplicationId"> | |||
| @@ -4559,6 +4596,16 @@ | |||
| If the option is a subcommand or subcommand group type, this nested options will be the parameters. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.IApplicationCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies the current application command. | |||
| </summary> | |||
| <param name="func">The new properties to use when modifying the command.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| A task that represents the asynchronous modification operation. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.IApplicationCommandInteractionData"> | |||
| <summary> | |||
| Represents data of an Interaction Command, see <see href="https://discord.com/developers/docs/interactions/slash-commands#interaction-applicationcommandinteractiondata"/>. | |||
| @@ -5571,36 +5618,6 @@ | |||
| Will render this option as selected by default. | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.MessageCommandBuilder"> | |||
| <summary> | |||
| A class used to build Message commands. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.MessageCommandBuilder.MaxNameLength"> | |||
| <summary> | |||
| Returns the maximun length a commands name allowed by Discord | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.MessageCommandBuilder.Name"> | |||
| <summary> | |||
| The name of this Message command. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.MessageCommandBuilder.Build"> | |||
| <summary> | |||
| Build the current builder into a <see cref="T:Discord.ContextMenuCommandCreationProperties"/> class. | |||
| </summary> | |||
| <returns>A <see cref="T:Discord.ContextMenuCommandCreationProperties"/> that can be used to create message commands over rest.</returns> | |||
| </member> | |||
| <member name="M:Discord.MessageCommandBuilder.WithName(System.String)"> | |||
| <summary> | |||
| Sets the field name. | |||
| </summary> | |||
| <param name="name">The value to set the field name to.</param> | |||
| <returns> | |||
| The current builder. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.SlashCommandBuilder"> | |||
| <summary> | |||
| A class used to build slash commands. | |||
| @@ -5643,9 +5660,9 @@ | |||
| </member> | |||
| <member name="M:Discord.SlashCommandBuilder.Build"> | |||
| <summary> | |||
| Build the current builder into a <see cref="T:Discord.SlashCommandCreationProperties"/> class. | |||
| Build the current builder into a <see cref="T:Discord.SlashCommandProperties"/> class. | |||
| </summary> | |||
| <returns>A <see cref="T:Discord.SlashCommandCreationProperties"/> that can be used to create slash commands over rest.</returns> | |||
| <returns>A <see cref="T:Discord.SlashCommandProperties"/> that can be used to create slash commands over rest.</returns> | |||
| </member> | |||
| <member name="M:Discord.SlashCommandBuilder.WithName(System.String)"> | |||
| <summary> | |||
| @@ -5833,86 +5850,26 @@ | |||
| <param name="type">The type to set.</param> | |||
| <returns>The current builder.</returns> | |||
| </member> | |||
| <member name="T:Discord.SlashCommandCreationProperties"> | |||
| <member name="T:Discord.SlashCommandProperties"> | |||
| <summary> | |||
| A class used to create slash commands. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.SlashCommandCreationProperties.Name"> | |||
| <summary> | |||
| The name of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.SlashCommandCreationProperties.Description"> | |||
| <member name="P:Discord.SlashCommandProperties.Description"> | |||
| <summary> | |||
| The discription of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.SlashCommandCreationProperties.Type"> | |||
| <summary> | |||
| Gets or sets the type for this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.SlashCommandCreationProperties.Options"> | |||
| <member name="P:Discord.SlashCommandProperties.Options"> | |||
| <summary> | |||
| Gets or sets the options for this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.SlashCommandCreationProperties.DefaultPermission"> | |||
| <member name="P:Discord.SlashCommandProperties.DefaultPermission"> | |||
| <summary> | |||
| Whether the command is enabled by default when the app is added to a guild. Default is <see langword="true"/> | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.UserCommandBuilder"> | |||
| <summary> | |||
| A class used to build user commands. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.UserCommandBuilder.MaxNameLength"> | |||
| <summary> | |||
| Returns the maximun length a commands name allowed by Discord | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.UserCommandBuilder.Name"> | |||
| <summary> | |||
| The name of this User command. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.UserCommandBuilder.Build"> | |||
| <summary> | |||
| Build the current builder into a <see cref="T:Discord.ContextMenuCommandCreationProperties"/> class. | |||
| </summary> | |||
| <returns>A <see cref="T:Discord.ContextMenuCommandCreationProperties"/> that can be used to create user commands over rest.</returns> | |||
| </member> | |||
| <member name="M:Discord.UserCommandBuilder.WithName(System.String)"> | |||
| <summary> | |||
| Sets the field name. | |||
| </summary> | |||
| <param name="name">The value to set the field name to.</param> | |||
| <returns> | |||
| The current builder. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.UserCommandCreationProperties"> | |||
| <summary> | |||
| A class used to create User commands. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.UserCommandCreationProperties.Name"> | |||
| <summary> | |||
| The name of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.UserCommandCreationProperties.Description"> | |||
| <summary> | |||
| The discription of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.UserCommandCreationProperties.Type"> | |||
| <summary> | |||
| Gets or sets the type for this command. | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.IInvite"> | |||
| <summary> | |||
| Represents a generic invite object. | |||
| @@ -7,33 +7,17 @@ using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// Provides properties that are used to modify a <see cref="IApplicationCommand" /> with the specified changes. | |||
| /// Represents the base class to create/modify application commands. | |||
| /// </summary> | |||
| public class ApplicationCommandProperties | |||
| public abstract class ApplicationCommandProperties | |||
| { | |||
| internal abstract ApplicationCommandType Type { get; } | |||
| /// <summary> | |||
| /// Gets or sets the name of this command. | |||
| /// </summary> | |||
| public Optional<string> Name { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the discription of this command. | |||
| /// </summary> | |||
| public Optional<string> Description { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the type for this command. | |||
| /// </summary> | |||
| public Optional<ApplicationCommandType> Type { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the options for this command. | |||
| /// </summary> | |||
| public Optional<List<ApplicationCommandOptionProperties>> Options { get; set; } | |||
| /// <summary> | |||
| /// Whether the command is enabled by default when the app is added to a guild. Default is <see langword="true"/> | |||
| /// </summary> | |||
| public Optional<bool> DefaultPermission { get; set; } | |||
| internal ApplicationCommandProperties() { } | |||
| } | |||
| } | |||
| @@ -7,20 +7,22 @@ using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// ApplicationCommandType is enum of current valid Application Command Types: Slash, User, Message | |||
| /// ApplicationCommandType is enum of current valid Application Command Types: Slash, User, Message | |||
| /// </summary> | |||
| public enum ApplicationCommandType : byte | |||
| { | |||
| /// <summary> | |||
| /// ApplicationCommandType.Slash is Slash command type | |||
| /// ApplicationCommandType.Slash is Slash command type | |||
| /// </summary> | |||
| Slash = 1, | |||
| /// <summary> | |||
| /// ApplicationCommandType.User is Context Menu User command type | |||
| /// ApplicationCommandType.User is Context Menu User command type | |||
| /// </summary> | |||
| User = 2, | |||
| /// <summary> | |||
| /// ApplicationCommandType.Message is Context Menu Message command type | |||
| /// ApplicationCommandType.Message is Context Menu Message command type | |||
| /// </summary> | |||
| Message = 3 | |||
| } | |||
| @@ -44,15 +44,16 @@ namespace Discord | |||
| private string _name { get; set; } | |||
| /// <summary> | |||
| /// Build the current builder into a <see cref="ContextMenuCommandCreationProperties"/> class. | |||
| /// Build the current builder into a <see cref="MessageCommandProperties"/> class. | |||
| /// </summary> | |||
| /// <returns>A <see cref="ContextMenuCommandCreationProperties"/> that can be used to create message commands over rest.</returns> | |||
| public ContextMenuCommandCreationProperties Build() | |||
| /// <returns> | |||
| /// A <see cref="MessageCommandProperties"/> that can be used to create message commands. | |||
| /// </returns> | |||
| public MessageCommandProperties Build() | |||
| { | |||
| ContextMenuCommandCreationProperties props = new ContextMenuCommandCreationProperties() | |||
| MessageCommandProperties props = new MessageCommandProperties() | |||
| { | |||
| Name = this.Name, | |||
| Type=ApplicationCommandType.Message | |||
| }; | |||
| return props; | |||
| @@ -0,0 +1,16 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// A class used to create message commands. | |||
| /// </summary> | |||
| public class MessageCommandProperties : ApplicationCommandProperties | |||
| { | |||
| internal override ApplicationCommandType Type => ApplicationCommandType.Message; | |||
| } | |||
| } | |||
| @@ -44,15 +44,14 @@ namespace Discord | |||
| private string _name { get; set; } | |||
| /// <summary> | |||
| /// Build the current builder into a <see cref="ContextMenuCommandCreationProperties"/> class. | |||
| /// Build the current builder into a <see cref="UserCommandProperties"/> class. | |||
| /// </summary> | |||
| /// <returns>A <see cref="ContextMenuCommandCreationProperties"/> that can be used to create user commands over rest.</returns> | |||
| public ContextMenuCommandCreationProperties Build() | |||
| /// <returns>A <see cref="UserCommandProperties"/> that can be used to create user commands.</returns> | |||
| public UserCommandProperties Build() | |||
| { | |||
| ContextMenuCommandCreationProperties props = new ContextMenuCommandCreationProperties() | |||
| UserCommandProperties props = new UserCommandProperties() | |||
| { | |||
| Name = this.Name, | |||
| Type=ApplicationCommandType.User | |||
| }; | |||
| return props; | |||
| @@ -0,0 +1,16 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// A class used to create User commands. | |||
| /// </summary> | |||
| public class UserCommandProperties : ApplicationCommandProperties | |||
| { | |||
| internal override ApplicationCommandType Type => ApplicationCommandType.User; | |||
| } | |||
| } | |||
| @@ -1,24 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// A class used to create Message commands. | |||
| /// </summary> | |||
| public class ContextMenuCommandCreationProperties | |||
| { | |||
| /// <summary> | |||
| /// The name of this command. | |||
| /// </summary> | |||
| public string Name { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the type for this command. | |||
| /// </summary> | |||
| public ApplicationCommandType Type { get; set; } | |||
| } | |||
| } | |||
| @@ -7,7 +7,7 @@ using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// The base command model that belongs to an application. see <see href="https://discord.com/developers/docs/interactions/slash-commands#applicationcommand"/> | |||
| /// The base command model that belongs to an application. | |||
| /// </summary> | |||
| public interface IApplicationCommand : ISnowflakeEntity, IDeletable | |||
| { | |||
| @@ -40,5 +40,15 @@ namespace Discord | |||
| /// If the option is a subcommand or subcommand group type, this nested options will be the parameters. | |||
| /// </summary> | |||
| IReadOnlyCollection<IApplicationCommandOption> Options { get; } | |||
| /// <summary> | |||
| /// Modifies the current application command. | |||
| /// </summary> | |||
| /// <param name="func">The new properties to use when modifying the command.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous modification operation. | |||
| /// </returns> | |||
| Task ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null); | |||
| } | |||
| } | |||
| @@ -93,17 +93,16 @@ namespace Discord | |||
| private List<SlashCommandOptionBuilder> _options { get; set; } | |||
| /// <summary> | |||
| /// Build the current builder into a <see cref="SlashCommandCreationProperties"/> class. | |||
| /// Build the current builder into a <see cref="SlashCommandProperties"/> class. | |||
| /// </summary> | |||
| /// <returns>A <see cref="SlashCommandCreationProperties"/> that can be used to create slash commands over rest.</returns> | |||
| public SlashCommandCreationProperties Build() | |||
| /// <returns>A <see cref="SlashCommandProperties"/> that can be used to create slash commands over rest.</returns> | |||
| public SlashCommandProperties Build() | |||
| { | |||
| SlashCommandCreationProperties props = new SlashCommandCreationProperties() | |||
| SlashCommandProperties props = new SlashCommandProperties() | |||
| { | |||
| Name = this.Name, | |||
| Description = this.Description, | |||
| DefaultPermission = this.DefaultPermission, | |||
| Type = ApplicationCommandType.Slash | |||
| }; | |||
| if (this.Options != null && this.Options.Any()) | |||
| @@ -9,22 +9,13 @@ namespace Discord | |||
| /// <summary> | |||
| /// A class used to create slash commands. | |||
| /// </summary> | |||
| public class SlashCommandCreationProperties | |||
| public class SlashCommandProperties : ApplicationCommandProperties | |||
| { | |||
| /// <summary> | |||
| /// The name of this command. | |||
| /// </summary> | |||
| public string Name { get; set; } | |||
| internal override ApplicationCommandType Type => ApplicationCommandType.Slash; | |||
| /// <summary> | |||
| /// The discription of this command. | |||
| /// </summary> | |||
| public string Description { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the type for this command. | |||
| /// </summary> | |||
| public ApplicationCommandType Type { get; set; } | |||
| public Optional<string> Description { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the options for this command. | |||
| @@ -35,5 +26,7 @@ namespace Discord | |||
| /// Whether the command is enabled by default when the app is added to a guild. Default is <see langword="true"/> | |||
| /// </summary> | |||
| public Optional<bool> DefaultPermission { get; set; } | |||
| internal SlashCommandProperties() { } | |||
| } | |||
| } | |||
| @@ -1,30 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord | |||
| { | |||
| /// <summary> | |||
| /// A class used to create User commands. | |||
| /// </summary> | |||
| public class UserCommandCreationProperties | |||
| { | |||
| /// <summary> | |||
| /// The name of this command. | |||
| /// </summary> | |||
| public string Name { get; set; } | |||
| /// <summary> | |||
| /// The discription of this command. | |||
| /// </summary> | |||
| public string Description { get; set; } | |||
| /// <summary> | |||
| /// Gets or sets the type for this command. | |||
| /// </summary> | |||
| public ApplicationCommandType Type { get; set; } | |||
| } | |||
| } | |||
| @@ -11,14 +11,22 @@ namespace Discord.API | |||
| { | |||
| [JsonProperty("id")] | |||
| public ulong Id { get; set; } | |||
| [JsonProperty("type")] | |||
| public ApplicationCommandType Type { get; set; } = ApplicationCommandType.Slash; // defaults to 1 which is slash. | |||
| [JsonProperty("application_id")] | |||
| public ulong ApplicationId { get; set; } | |||
| [JsonProperty("name")] | |||
| public string Name { get; set; } | |||
| [JsonProperty("description")] | |||
| public string Description { get; set; } | |||
| [JsonProperty("options")] | |||
| public Optional<ApplicationCommandOption[]> Options { get; set; } | |||
| [JsonProperty("default_permission")] | |||
| public Optional<bool> DefaultPermissions { get; set; } | |||
| } | |||
| @@ -9,6 +9,5 @@ namespace Discord.API | |||
| internal interface IResolvable | |||
| { | |||
| Optional<ApplicationCommandInteractionDataResolved> Resolved { get; } | |||
| } | |||
| } | |||
| @@ -15,9 +15,6 @@ namespace Discord.API.Rest | |||
| [JsonProperty("description")] | |||
| public Optional<string> Description { get; set; } | |||
| [JsonProperty("type")] | |||
| public Optional<ApplicationCommandType> Type { get; set; } | |||
| [JsonProperty("options")] | |||
| public Optional<ApplicationCommandOption[]> Options { get; set; } | |||
| @@ -3762,17 +3762,15 @@ | |||
| The options of this command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestApplicationCommand.CommandType"> | |||
| <summary> | |||
| The type of this rest application command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestApplicationCommand.CreatedAt"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestApplicationCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestApplicationCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestApplicationCommandChoice"> | |||
| <summary> | |||
| Represents a Rest-based implementation of <see cref="T:Discord.IApplicationCommandOptionChoice"/>. | |||
| @@ -3814,24 +3812,9 @@ | |||
| A collection of <see cref="T:Discord.Rest.RestApplicationCommandOption"/>'s for this command. | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestApplicationCommandType"> | |||
| <summary> | |||
| Represents a type of Rest-based command. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.Rest.RestApplicationCommandType.GlobalCommand"> | |||
| <summary> | |||
| Specifies that this command is a Global command. | |||
| </summary> | |||
| </member> | |||
| <member name="F:Discord.Rest.RestApplicationCommandType.GuildCommand"> | |||
| <summary> | |||
| Specifies that this command is a Guild specific command. | |||
| </summary> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestGlobalCommand"> | |||
| <summary> | |||
| Represents a global Slash command. | |||
| Represents a Rest-based global application command. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGlobalCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| @@ -3847,35 +3830,9 @@ | |||
| The modified command. | |||
| </returns> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGlobalMessageCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGlobalMessageCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies this <see cref="T:Discord.Rest.RestApplicationCommand"/>. | |||
| </summary> | |||
| <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| The modified command. | |||
| </returns> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGlobalUserCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGlobalUserCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies this <see cref="T:Discord.Rest.RestApplicationCommand"/>. | |||
| </summary> | |||
| <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| The modified command. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestGuildCommand"> | |||
| <summary> | |||
| Represents a Rest-based guild command. | |||
| Represents a Rest-based guild application command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestGuildCommand.GuildId"> | |||
| @@ -3928,74 +3885,6 @@ | |||
| <see cref="T:Discord.Rest.RestGuild"/>. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestGuildMessageCommand"> | |||
| <summary> | |||
| Represents a Rest-based guild command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestGuildMessageCommand.GuildId"> | |||
| <summary> | |||
| The guild Id where this command originates. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildMessageCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildMessageCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies this <see cref="T:Discord.Rest.RestApplicationCommand"/>. | |||
| </summary> | |||
| <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| The modified command | |||
| </returns> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildMessageCommand.GetGuild(System.Boolean,Discord.RequestOptions)"> | |||
| <summary> | |||
| Gets the guild that this slash command resides in. | |||
| </summary> | |||
| <param name="withCounts"><see langword="true"/> if you want the approximate member and presence counts for the guild, otherwise <see langword="false"/>.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| A task that represents the asynchronous get operation. The task result contains a | |||
| <see cref="T:Discord.Rest.RestGuild"/>. | |||
| </returns> | |||
| </member> | |||
| <member name="T:Discord.Rest.RestGuildUserCommand"> | |||
| <summary> | |||
| Represents a Rest-based guild command. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestGuildUserCommand.GuildId"> | |||
| <summary> | |||
| The guild Id where this command originates. | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildUserCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildUserCommand.ModifyAsync(System.Action{Discord.ApplicationCommandProperties},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies this <see cref="T:Discord.Rest.RestApplicationCommand"/>. | |||
| </summary> | |||
| <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| The modified command | |||
| </returns> | |||
| </member> | |||
| <member name="M:Discord.Rest.RestGuildUserCommand.GetGuild(System.Boolean,Discord.RequestOptions)"> | |||
| <summary> | |||
| Gets the guild that this slash command resides in. | |||
| </summary> | |||
| <param name="withCounts"><see langword="true"/> if you want the approximate member and presence counts for the guild, otherwise <see langword="false"/>.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| A task that represents the asynchronous get operation. The task result contains a | |||
| <see cref="T:Discord.Rest.RestGuild"/>. | |||
| </returns> | |||
| </member> | |||
| <member name="P:Discord.Rest.RestInvite.ChannelName"> | |||
| <inheritdoc /> | |||
| </member> | |||
| @@ -108,37 +108,21 @@ namespace Discord.Rest | |||
| public Task<RestWebhook> GetWebhookAsync(ulong id, RequestOptions options = null) | |||
| => ClientHelper.GetWebhookAsync(this, id, options); | |||
| public Task<RestGlobalCommand> CreateGlobalCommand(SlashCommandCreationProperties properties, RequestOptions options = null) | |||
| public Task<RestGlobalCommand> CreateGlobalCommand(ApplicationCommandProperties properties, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalCommand(this, properties, options); | |||
| public Task<RestGlobalCommand> CreateGlobalCommand(Action<SlashCommandCreationProperties> func, RequestOptions options = null) | |||
| public Task<RestGlobalCommand> CreateGlobalCommand(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalCommand(this, func, options); | |||
| public Task<RestGlobalUserCommand> CreateGlobalUserCommand(ContextMenuCommandCreationProperties properties, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalUserCommand(this, properties, options); | |||
| public Task<RestGlobalUserCommand> CreateGlobalUserCommand(Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalUserCommand(this, func, options); | |||
| public Task<RestGlobalMessageCommand> CreateGlobalMessageCommand(ContextMenuCommandCreationProperties properties, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalMessageCommand(this, properties, options); | |||
| public Task<RestGlobalMessageCommand> CreateGlobalMessageCommand(Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| => InteractionHelper.CreateGlobalMessageCommand(this, func, options); | |||
| public Task<RestGuildCommand> CreateGuildCommand(SlashCommandCreationProperties properties, ulong guildId, RequestOptions options = null) | |||
| public Task<RestGuildCommand> CreateGuildCommand(ApplicationCommandProperties properties, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildCommand(this, guildId, properties, options); | |||
| public Task<RestGuildCommand> CreateGuildCommand(Action<SlashCommandCreationProperties> func, ulong guildId, RequestOptions options = null) | |||
| public Task<RestGuildCommand> CreateGuildCommand(Action<ApplicationCommandProperties> func, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildCommand(this, guildId, func, options); | |||
| public Task<RestGuildUserCommand> CreateGuildUserCommand(ContextMenuCommandCreationProperties properties, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildUserCommand(this, guildId, properties, options); | |||
| public Task<RestGuildUserCommand> CreateGuildUserCommand(Action<ContextMenuCommandCreationProperties> func, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildUserCommand(this, guildId, func, options); | |||
| public Task<RestGuildMessageCommand> CreateGuildMessageCommand(ContextMenuCommandCreationProperties properties, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildMessageCommand(this, guildId, properties, options); | |||
| public Task<RestGuildMessageCommand> CreateGuildMessageCommand(Action<ContextMenuCommandCreationProperties> func, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.CreateGuildMessageCommand(this, guildId, func, options); | |||
| public Task<IReadOnlyCollection<RestGlobalCommand>> GetGlobalApplicationCommands(RequestOptions options = null) | |||
| => ClientHelper.GetGlobalApplicationCommands(this, options); | |||
| public Task<IReadOnlyCollection<RestGuildCommand>> GetGuildApplicationCommands(ulong guildId, RequestOptions options = null) | |||
| => ClientHelper.GetGuildApplicationCommands(this, guildId, options); | |||
| public Task<IReadOnlyCollection<RestGlobalCommand>> BulkOverwriteGlobalCommands(SlashCommandCreationProperties[] commandProperties, RequestOptions options = null) | |||
| public Task<IReadOnlyCollection<RestGlobalCommand>> BulkOverwriteGlobalCommands(ApplicationCommandProperties[] commandProperties, RequestOptions options = null) | |||
| => InteractionHelper.BulkOverwriteGlobalCommands(this, commandProperties, options); | |||
| public Task<IReadOnlyCollection<RestGuildCommand>> BulkOverwriteGuildCommands(SlashCommandCreationProperties[] commandProperties, ulong guildId, RequestOptions options = null) | |||
| public Task<IReadOnlyCollection<RestGuildCommand>> BulkOverwriteGuildCommands(ApplicationCommandProperties[] commandProperties, ulong guildId, RequestOptions options = null) | |||
| => InteractionHelper.BulkOverwriteGuildCommands(this, guildId, commandProperties, options); | |||
| public Task<IReadOnlyCollection<GuildApplicationCommandPermission>> BatchEditGuildCommandPermissions(ulong guildId, IDictionary<ulong, ApplicationCommandPermission[]> permissions, RequestOptions options = null) | |||
| => InteractionHelper.BatchEditGuildCommandPermissionsAsync(this, guildId, permissions, options); | |||
| @@ -44,41 +44,45 @@ namespace Discord.Rest | |||
| } | |||
| // Global commands | |||
| public static async Task<RestGlobalCommand> CreateGlobalCommand(BaseDiscordClient client, | |||
| Action<SlashCommandCreationProperties> func, RequestOptions options = null) | |||
| public static async Task<RestGlobalCommand> CreateGlobalCommand<TArg>(BaseDiscordClient client, | |||
| Action<TArg> func, RequestOptions options) where TArg : ApplicationCommandProperties | |||
| { | |||
| var args = new SlashCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGlobalCommand(client, args, options).ConfigureAwait(false); | |||
| var args = Activator.CreateInstance(typeof(TArg)); | |||
| func((TArg)args); | |||
| return await CreateGlobalCommand(client, (TArg)args, options); | |||
| } | |||
| public static async Task<RestGlobalCommand> CreateGlobalCommand(BaseDiscordClient client, | |||
| SlashCommandCreationProperties arg, RequestOptions options = null) | |||
| ApplicationCommandProperties arg, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.NotNullOrEmpty(arg.Description, nameof(arg.Description)); | |||
| if (arg.Options.IsSpecified) | |||
| Preconditions.AtMost(arg.Options.Value.Count, 25, nameof(arg.Options)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Description = arg.Description, | |||
| Type= arg.Type, | |||
| Options = arg.Options.IsSpecified | |||
| ? arg.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = arg.DefaultPermission.IsSpecified | |||
| ? arg.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| Name = arg.Name.Value, | |||
| Type = arg.Type, | |||
| }; | |||
| if (arg is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.NotNullOrEmpty(slashProps.Description, nameof(slashProps.Description)); | |||
| model.Description = slashProps.Description.Value; | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| var cmd = await client.ApiClient.CreateGlobalApplicationCommandAsync(model, options).ConfigureAwait(false); | |||
| return RestGlobalCommand.Create(client, cmd); | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGlobalCommand>> BulkOverwriteGlobalCommands(BaseDiscordClient client, | |||
| SlashCommandCreationProperties[] args, RequestOptions options = null) | |||
| ApplicationCommandProperties[] args, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| @@ -87,24 +91,28 @@ namespace Discord.Rest | |||
| foreach (var arg in args) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.NotNullOrEmpty(arg.Description, nameof(arg.Description)); | |||
| if (arg.Options.IsSpecified) | |||
| Preconditions.AtMost(arg.Options.Value.Count, 25, nameof(arg.Options)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Description = arg.Description, | |||
| Name = arg.Name.Value, | |||
| Type = arg.Type, | |||
| Options = arg.Options.IsSpecified | |||
| ? arg.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = arg.DefaultPermission.IsSpecified | |||
| ? arg.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| }; | |||
| if (arg is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.NotNullOrEmpty(slashProps.Description, nameof(slashProps.Description)); | |||
| model.Description = slashProps.Description.Value; | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| models.Add(model); | |||
| } | |||
| @@ -114,7 +122,7 @@ namespace Discord.Rest | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGuildCommand>> BulkOverwriteGuildCommands(BaseDiscordClient client, ulong guildId, | |||
| SlashCommandCreationProperties[] args, RequestOptions options = null) | |||
| ApplicationCommandProperties[] args, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| @@ -123,236 +131,88 @@ namespace Discord.Rest | |||
| foreach (var arg in args) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.NotNullOrEmpty(arg.Description, nameof(arg.Description)); | |||
| if (arg.Options.IsSpecified) | |||
| Preconditions.AtMost(arg.Options.Value.Count, 25, nameof(arg.Options)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Description = arg.Description, | |||
| Name = arg.Name.Value, | |||
| Type = arg.Type, | |||
| Options = arg.Options.IsSpecified | |||
| ? arg.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = arg.DefaultPermission.IsSpecified | |||
| ? arg.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| }; | |||
| models.Add(model); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGuildApplicationCommands(guildId, models.ToArray(), options); | |||
| return apiModels.Select(x => RestGuildCommand.Create(client, x, guildId)).ToArray(); | |||
| } | |||
| if (arg is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.NotNullOrEmpty(slashProps.Description, nameof(slashProps.Description)); | |||
| public static async Task<RestGlobalCommand> ModifyGlobalCommand(BaseDiscordClient client, RestGlobalCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| model.Description = slashProps.Description.Value; | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Description.Value.Length, 100, nameof(args.Description)); | |||
| Preconditions.AtLeast(args.Description.Value.Length, 1, nameof(args.Description)); | |||
| } | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| if (args.Options.IsSpecified) | |||
| { | |||
| if (args.Options.Value.Count > 10) | |||
| throw new ArgumentException("Option count must be 10 or less"); | |||
| models.Add(model); | |||
| } | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description, | |||
| Type = args.Type, | |||
| Options = args.Options.IsSpecified | |||
| ? args.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = args.DefaultPermission.IsSpecified | |||
| ? args.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGlobalApplicationCommandAsync(model, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| } | |||
| public static async Task DeleteGlobalCommand(BaseDiscordClient client, RestGlobalCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| await client.ApiClient.DeleteGlobalApplicationCommandAsync(command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task<RestGlobalUserCommand> CreateGlobalUserCommand(BaseDiscordClient client, Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| { | |||
| var args = new ContextMenuCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGlobalUserCommand(client, args, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task<RestGlobalUserCommand> CreateGlobalUserCommand(BaseDiscordClient client, ContextMenuCommandCreationProperties arg, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| var cmd = await client.ApiClient.CreateGlobalApplicationUserCommandAsync(model, options).ConfigureAwait(false); | |||
| return RestGlobalUserCommand.Create(client, cmd); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGuildApplicationCommands(guildId, models.ToArray(), options); | |||
| public static async Task<RestGlobalMessageCommand> CreateGlobalMessageCommand(BaseDiscordClient client, Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| { | |||
| var args = new ContextMenuCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGlobalMessageCommand(client, args, options).ConfigureAwait(false); | |||
| return apiModels.Select(x => RestGuildCommand.Create(client, x, guildId)).ToArray(); | |||
| } | |||
| public static async Task<RestGlobalMessageCommand> CreateGlobalMessageCommand(BaseDiscordClient client, ContextMenuCommandCreationProperties arg, RequestOptions options = null) | |||
| public static Task<ApplicationCommand> ModifyGlobalCommand<TArg>(BaseDiscordClient client, IApplicationCommand command, | |||
| Action<TArg> func, RequestOptions options = null) where TArg : ApplicationCommandProperties | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| var cmd = await client.ApiClient.CreateGlobalApplicationMessageCommandAsync(model, options).ConfigureAwait(false); | |||
| return RestGlobalMessageCommand.Create(client, cmd); | |||
| var arg = (TArg)Activator.CreateInstance(typeof(TArg)); | |||
| func(arg); | |||
| return ModifyGlobalCommand(client, command, arg, options); | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGlobalUserCommand>> BulkOverwriteGlobalUserCommands(BaseDiscordClient client, ContextMenuCommandCreationProperties[] args, RequestOptions options = null) | |||
| public static async Task<ApplicationCommand> ModifyGlobalCommand(BaseDiscordClient client, IApplicationCommand command, | |||
| ApplicationCommandProperties args, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| List<CreateApplicationCommandParams> models = new List<CreateApplicationCommandParams>(); | |||
| foreach (var arg in args) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.Equals(arg.Type, ApplicationCommandType.User); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| models.Add(model); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGlobalApplicationUserCommands(models.ToArray(), options); | |||
| return apiModels.Select(x => RestGlobalUserCommand.Create(client, x)).ToArray(); | |||
| } | |||
| public static async Task<RestGlobalUserCommand> ModifyGlobalUserCommand(BaseDiscordClient client, RestGlobalUserCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| { | |||
| Preconditions.Equals(args.Description.Value, ""); | |||
| } | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGlobalApplicationUserCommandAsync(model, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| } | |||
| public static async Task DeleteGlobalUserCommand(BaseDiscordClient client, RestGlobalUserCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| await client.ApiClient.DeleteGlobalApplicationCommandAsync(command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGlobalMessageCommand>> BulkOverwriteGlobalMessageCommands(BaseDiscordClient client, ContextMenuCommandCreationProperties[] args, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| List<CreateApplicationCommandParams> models = new List<CreateApplicationCommandParams>(); | |||
| foreach (var arg in args) | |||
| if(args is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.Equals(arg.Type, ApplicationCommandType.Message); | |||
| var model = new CreateApplicationCommandParams() | |||
| if (slashProps.Description.IsSpecified) | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| Preconditions.AtMost(slashProps.Description.Value.Length, 100, nameof(slashProps.Description)); | |||
| Preconditions.AtLeast(slashProps.Description.Value.Length, 1, nameof(slashProps.Description)); | |||
| } | |||
| models.Add(model); | |||
| } | |||
| if (slashProps.Options.IsSpecified) | |||
| { | |||
| if (slashProps.Options.Value.Count > 10) | |||
| throw new ArgumentException("Option count must be 10 or less"); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGlobalApplicationMessageCommands(models.ToArray(), options); | |||
| model.Description = slashProps.Description; | |||
| return apiModels.Select(x => RestGlobalMessageCommand.Create(client, x)).ToArray(); | |||
| } | |||
| public static async Task<RestGlobalMessageCommand> ModifyGlobalMessageCommand(BaseDiscordClient client, RestGlobalMessageCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| { | |||
| Preconditions.Equals(args.Description.Value, ""); | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGlobalApplicationMessageCommandAsync(model, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| return await client.ApiClient.ModifyGlobalApplicationCommandAsync(model, command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task DeleteGlobalMessageCommand(BaseDiscordClient client, RestGlobalMessageCommand command, RequestOptions options = null) | |||
| public static async Task DeleteGlobalCommand(BaseDiscordClient client, IApplicationCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| @@ -361,197 +221,77 @@ namespace Discord.Rest | |||
| } | |||
| // Guild Commands | |||
| public static async Task<RestGuildCommand> CreateGuildCommand(BaseDiscordClient client, ulong guildId, | |||
| Action<SlashCommandCreationProperties> func, RequestOptions options = null) | |||
| public static async Task<RestGuildCommand> CreateGuildCommand<TArg>(BaseDiscordClient client, ulong guildId, | |||
| Action<TArg> func, RequestOptions options) where TArg : ApplicationCommandProperties | |||
| { | |||
| var args = new SlashCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGuildCommand(client, guildId, args, options).ConfigureAwait(false); | |||
| var args = Activator.CreateInstance(typeof(TArg)); | |||
| func((TArg)args); | |||
| return await CreateGuildCommand(client, guildId, (TArg)args, options); | |||
| } | |||
| public static async Task<RestGuildCommand> CreateGuildCommand(BaseDiscordClient client, ulong guildId, | |||
| SlashCommandCreationProperties args, RequestOptions options = null) | |||
| ApplicationCommandProperties arg, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNullOrEmpty(args.Name, nameof(args.Name)); | |||
| Preconditions.NotNullOrEmpty(args.Description, nameof(args.Description)); | |||
| Preconditions.AtMost(args.Name.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Length, 3, nameof(args.Name)); | |||
| Preconditions.AtMost(args.Description.Length, 100, nameof(args.Description)); | |||
| Preconditions.AtLeast(args.Description.Length, 1, nameof(args.Description)); | |||
| if (args.Options.IsSpecified) | |||
| { | |||
| if (args.Options.Value.Count > 10) | |||
| throw new ArgumentException("Option count must be 10 or less"); | |||
| foreach (var item in args.Options.Value) | |||
| { | |||
| Preconditions.NotNullOrEmpty(item.Name, nameof(item.Name)); | |||
| Preconditions.NotNullOrEmpty(item.Description, nameof(item.Description)); | |||
| } | |||
| } | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description, | |||
| Type = args.Type, | |||
| Options = args.Options.IsSpecified | |||
| ? args.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = args.DefaultPermission.IsSpecified | |||
| ? args.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| Name = arg.Name.Value, | |||
| Type = arg.Type, | |||
| }; | |||
| var cmd = await client.ApiClient.CreateGuildApplicationCommandAsync(model, guildId, options).ConfigureAwait(false); | |||
| return RestGuildCommand.Create(client, cmd, guildId); | |||
| } | |||
| public static async Task<RestGuildCommand> ModifyGuildCommand(BaseDiscordClient client, RestGuildCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| if (arg is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.AtMost(args.Description.Value.Length, 100, nameof(args.Description)); | |||
| Preconditions.AtLeast(args.Description.Value.Length, 1, nameof(args.Description)); | |||
| } | |||
| Preconditions.NotNullOrEmpty(slashProps.Description, nameof(slashProps.Description)); | |||
| if (args.Options.IsSpecified) | |||
| { | |||
| if (args.Options.Value.Count > 10) | |||
| throw new ArgumentException("Option count must be 10 or less"); | |||
| } | |||
| model.Description = slashProps.Description.Value; | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description, | |||
| Type = args.Type, | |||
| Options = args.Options.IsSpecified | |||
| ? args.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified, | |||
| DefaultPermission = args.DefaultPermission.IsSpecified | |||
| ? args.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGuildApplicationCommandAsync(model, command.GuildId, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| } | |||
| public static async Task DeleteGuildCommand(BaseDiscordClient client, ulong guildId, IApplicationCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| await client.ApiClient.DeleteGuildApplicationCommandAsync(guildId, command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task<RestGuildUserCommand> CreateGuildUserCommand(BaseDiscordClient client, ulong guildId, Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| { | |||
| var args = new ContextMenuCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGuildUserCommand(client, guildId, args, options).ConfigureAwait(false); | |||
| } | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| public static async Task<RestGuildUserCommand> CreateGuildUserCommand(BaseDiscordClient client, ulong guildId, ContextMenuCommandCreationProperties arg, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| var cmd = await client.ApiClient.CreateGuildApplicationUserCommandAsync(model, guildId, options).ConfigureAwait(false); | |||
| return RestGuildUserCommand.Create(client, cmd, guildId); | |||
| var cmd = await client.ApiClient.CreateGuildApplicationCommandAsync(model, guildId, options).ConfigureAwait(false); | |||
| return RestGuildCommand.Create(client, cmd, guildId); | |||
| } | |||
| public static async Task<RestGuildMessageCommand> CreateGuildMessageCommand(BaseDiscordClient client, ulong guildId, Action<ContextMenuCommandCreationProperties> func, RequestOptions options = null) | |||
| public static Task<ApplicationCommand> ModifyGuildCommand<TArg>(BaseDiscordClient client, IApplicationCommand command, ulong guildId, | |||
| Action<TArg> func, RequestOptions options = null) where TArg : ApplicationCommandProperties | |||
| { | |||
| var args = new ContextMenuCommandCreationProperties(); | |||
| func(args); | |||
| return await CreateGuildMessageCommand(client, guildId, args, options).ConfigureAwait(false); | |||
| var arg = (TArg)Activator.CreateInstance(typeof(TArg)); | |||
| func(arg); | |||
| return ModifyGuildCommand(client, command, guildId, arg, options); | |||
| } | |||
| public static async Task<RestGuildMessageCommand> CreateGuildMessageCommand(BaseDiscordClient client, ulong guildId, ContextMenuCommandCreationProperties arg, RequestOptions options = null) | |||
| public static async Task<ApplicationCommand> ModifyGuildCommand(BaseDiscordClient client, IApplicationCommand command, ulong guildId, | |||
| ApplicationCommandProperties arg, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| var model = new CreateApplicationCommandParams() | |||
| var model = new ModifyApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| Name = arg.Name.Value, | |||
| }; | |||
| var cmd = await client.ApiClient.CreateGuildApplicationMessageCommandAsync(model, guildId, options).ConfigureAwait(false); | |||
| return RestGuildMessageCommand.Create(client, cmd, guildId); | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGuildUserCommand>> BulkOverwriteGuildUserCommands(BaseDiscordClient client, ulong guildId, ContextMenuCommandCreationProperties[] args, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| List<CreateApplicationCommandParams> models = new List<CreateApplicationCommandParams>(); | |||
| foreach (var arg in args) | |||
| if (arg is SlashCommandProperties slashProps) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.Equals(arg.Type, ApplicationCommandType.User); | |||
| Preconditions.NotNullOrEmpty(slashProps.Description, nameof(slashProps.Description)); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| model.Description = slashProps.Description.Value; | |||
| models.Add(model); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGuildApplicationUserCommands(guildId, models.ToArray(), options); | |||
| return apiModels.Select(x => RestGuildUserCommand.Create(client, x, guildId)).ToArray(); | |||
| } | |||
| public static async Task<RestGuildUserCommand> ModifyGuildUserCommand(BaseDiscordClient client, RestGuildUserCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| model.Options = slashProps.Options.IsSpecified | |||
| ? slashProps.Options.Value.Select(x => new Discord.API.ApplicationCommandOption(x)).ToArray() | |||
| : Optional<Discord.API.ApplicationCommandOption[]>.Unspecified; | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| { | |||
| Preconditions.Equals(args.Description.Value, ""); | |||
| model.DefaultPermission = slashProps.DefaultPermission.IsSpecified | |||
| ? slashProps.DefaultPermission.Value | |||
| : Optional<bool>.Unspecified; | |||
| } | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description, | |||
| Type=args.Type | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGuildApplicationUserCommandAsync(model, command.GuildId, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| return await client.ApiClient.ModifyGuildApplicationCommandAsync(model, guildId, command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task DeleteGuildUserCommand(BaseDiscordClient client, ulong guildId, RestGuildUserCommand command, RequestOptions options = null) | |||
| public static async Task DeleteGuildCommand(BaseDiscordClient client, ulong guildId, IApplicationCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| @@ -559,67 +299,19 @@ namespace Discord.Rest | |||
| await client.ApiClient.DeleteGuildApplicationCommandAsync(guildId, command.Id, options).ConfigureAwait(false); | |||
| } | |||
| public static async Task<IReadOnlyCollection<RestGuildMessageCommand>> BulkOverwriteGuildMessageCommands(BaseDiscordClient client, ulong guildId, ContextMenuCommandCreationProperties[] args, RequestOptions options = null) | |||
| public static Task DeleteUnknownApplicationCommand(BaseDiscordClient client, ulong? guildId, IApplicationCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| List<CreateApplicationCommandParams> models = new List<CreateApplicationCommandParams>(); | |||
| foreach (var arg in args) | |||
| if (guildId.HasValue) | |||
| { | |||
| Preconditions.NotNullOrEmpty(arg.Name, nameof(arg.Name)); | |||
| Preconditions.Equals(arg.Type, ApplicationCommandType.Message); | |||
| var model = new CreateApplicationCommandParams() | |||
| { | |||
| Name = arg.Name, | |||
| Type = arg.Type | |||
| }; | |||
| models.Add(model); | |||
| } | |||
| var apiModels = await client.ApiClient.BulkOverwriteGuildApplicationMessageCommands(guildId, models.ToArray(), options); | |||
| return apiModels.Select(x => RestGuildMessageCommand.Create(client, x, guildId)).ToArray(); | |||
| } | |||
| public static async Task<RestGuildMessageCommand> ModifyGuildMessageCommand(BaseDiscordClient client, RestGuildMessageCommand command, | |||
| Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| ApplicationCommandProperties args = new ApplicationCommandProperties(); | |||
| func(args); | |||
| if (args.Name.IsSpecified) | |||
| { | |||
| Preconditions.AtMost(args.Name.Value.Length, 32, nameof(args.Name)); | |||
| Preconditions.AtLeast(args.Name.Value.Length, 3, nameof(args.Name)); | |||
| return DeleteGuildCommand(client, guildId.Value, command, options); | |||
| } | |||
| if (args.Description.IsSpecified) | |||
| else | |||
| { | |||
| Preconditions.Equals(args.Description.Value, ""); | |||
| return DeleteGlobalCommand(client, command, options); | |||
| } | |||
| var model = new Discord.API.Rest.ModifyApplicationCommandParams() | |||
| { | |||
| Name = args.Name, | |||
| Description = args.Description, | |||
| Type = args.Type | |||
| }; | |||
| var msg = await client.ApiClient.ModifyGuildApplicationMessageCommandAsync(model, command.GuildId, command.Id, options).ConfigureAwait(false); | |||
| command.Update(msg); | |||
| return command; | |||
| } | |||
| public static async Task DeleteGuildMessageCommand(BaseDiscordClient client, ulong guildId, RestGuildMessageCommand command, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotNull(command, nameof(command)); | |||
| Preconditions.NotEqual(command.Id, 0, nameof(command.Id)); | |||
| await client.ApiClient.DeleteGuildApplicationCommandAsync(guildId, command.Id, options).ConfigureAwait(false); | |||
| } | |||
| // Responses | |||
| public static async Task<Discord.API.Message> ModifyFollowupMessage(BaseDiscordClient client, RestFollowupMessage message, Action<MessageProperties> func, | |||
| RequestOptions options = null) | |||
| { | |||
| @@ -33,11 +33,6 @@ namespace Discord.Rest | |||
| /// </summary> | |||
| public IReadOnlyCollection<RestApplicationCommandOption> Options { get; private set; } | |||
| /// <summary> | |||
| /// The type of this rest application command. | |||
| /// </summary> | |||
| public RestApplicationCommandType CommandType { get; internal set; } | |||
| /// <inheritdoc/> | |||
| public DateTimeOffset CreatedAt | |||
| => SnowflakeUtils.FromSnowflake(this.Id); | |||
| @@ -48,31 +43,15 @@ namespace Discord.Rest | |||
| } | |||
| internal static RestApplicationCommand Create(BaseDiscordClient client, Model model, RestApplicationCommandType type, ulong guildId = 0) | |||
| internal static RestApplicationCommand Create(BaseDiscordClient client, Model model, ulong? guildId) | |||
| { | |||
| switch (type) | |||
| if (guildId.HasValue) | |||
| { | |||
| return RestGuildCommand.Create(client, model, guildId.Value); | |||
| } | |||
| else | |||
| { | |||
| case RestApplicationCommandType.GlobalCommand: | |||
| return RestGlobalCommand.Create(client, model); | |||
| break; | |||
| case RestApplicationCommandType.GlobalUserCommand: | |||
| return RestGlobalUserCommand.Create(client, model); | |||
| break; | |||
| case RestApplicationCommandType.GlobalMessageCommand: | |||
| return RestGlobalMessageCommand.Create(client, model); | |||
| break; | |||
| case RestApplicationCommandType.GuildCommand: | |||
| return RestGuildCommand.Create(client, model, guildId); | |||
| break; | |||
| case RestApplicationCommandType.GuildUserCommand: | |||
| return RestGuildUserCommand.Create(client, model, guildId); | |||
| break; | |||
| case RestApplicationCommandType.GuildMessageCommand: | |||
| return RestGuildMessageCommand.Create(client, model, guildId); | |||
| break; | |||
| default: | |||
| return null; | |||
| break; | |||
| return RestGlobalCommand.Create(client, model); | |||
| } | |||
| } | |||
| @@ -92,7 +71,9 @@ namespace Discord.Rest | |||
| /// <inheritdoc/> | |||
| public abstract Task DeleteAsync(RequestOptions options = null); | |||
| IReadOnlyCollection<IApplicationCommandOption> IApplicationCommand.Options => Options; | |||
| /// <inheritdoc/> | |||
| public abstract Task ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null); | |||
| IReadOnlyCollection<IApplicationCommandOption> IApplicationCommand.Options => Options; | |||
| } | |||
| } | |||
| @@ -68,7 +68,10 @@ namespace Discord.Rest | |||
| : null; | |||
| } | |||
| IReadOnlyCollection<IApplicationCommandOption> IApplicationCommandOption.Options => Options; | |||
| IReadOnlyCollection<IApplicationCommandOptionChoice> IApplicationCommandOption.Choices => Choices; | |||
| //IApplicationCommandOption | |||
| IReadOnlyCollection<IApplicationCommandOption> IApplicationCommandOption.Options | |||
| => Options; | |||
| IReadOnlyCollection<IApplicationCommandOptionChoice> IApplicationCommandOption.Choices | |||
| => Choices; | |||
| } | |||
| } | |||
| @@ -1,28 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a type of Rest-based command. | |||
| /// </summary> | |||
| public enum RestApplicationCommandType | |||
| { | |||
| /// <summary> | |||
| /// Specifies that this command is a Global command. | |||
| /// </summary> | |||
| GlobalCommand, | |||
| GlobalUserCommand, | |||
| GlobalMessageCommand, | |||
| /// <summary> | |||
| /// Specifies that this command is a Guild specific command. | |||
| /// </summary> | |||
| GuildCommand, | |||
| GuildUserCommand, | |||
| GuildMessageCommand | |||
| } | |||
| } | |||
| @@ -8,14 +8,14 @@ using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a global Slash command. | |||
| /// Represents a Rest-based global application command. | |||
| /// </summary> | |||
| public class RestGlobalCommand : RestApplicationCommand | |||
| { | |||
| internal RestGlobalCommand(BaseDiscordClient client, ulong id) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GlobalCommand; | |||
| } | |||
| internal static RestGlobalCommand Create(BaseDiscordClient client, Model model) | |||
| @@ -37,7 +37,10 @@ namespace Discord.Rest | |||
| /// <returns> | |||
| /// The modified command. | |||
| /// </returns> | |||
| public async Task<RestGlobalCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGlobalCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| public override async Task ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| var cmd = await InteractionHelper.ModifyGlobalCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| this.Update(cmd); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,41 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Reflection; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| public class RestGlobalMessageCommand : RestApplicationCommand | |||
| { | |||
| internal RestGlobalMessageCommand(BaseDiscordClient client, ulong id) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GlobalMessageCommand; | |||
| } | |||
| internal static RestGlobalMessageCommand Create(BaseDiscordClient client, Model model) | |||
| { | |||
| var entity = new RestGlobalMessageCommand(client, model.Id); | |||
| entity.Update(model); | |||
| return entity; | |||
| } | |||
| /// <inheritdoc/> | |||
| public override async Task DeleteAsync(RequestOptions options = null) | |||
| => await InteractionHelper.DeleteGlobalMessageCommand(Discord, this).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Modifies this <see cref="RestApplicationCommand"/>. | |||
| /// </summary> | |||
| /// <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// The modified command. | |||
| /// </returns> | |||
| public async Task<RestGlobalMessageCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGlobalMessageCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| } | |||
| } | |||
| @@ -1,41 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Reflection; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| public class RestGlobalUserCommand : RestApplicationCommand | |||
| { | |||
| internal RestGlobalUserCommand(BaseDiscordClient client, ulong id) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GlobalUserCommand; | |||
| } | |||
| internal static RestGlobalUserCommand Create(BaseDiscordClient client, Model model) | |||
| { | |||
| var entity = new RestGlobalUserCommand(client, model.Id); | |||
| entity.Update(model); | |||
| return entity; | |||
| } | |||
| /// <inheritdoc/> | |||
| public override async Task DeleteAsync(RequestOptions options = null) | |||
| => await InteractionHelper.DeleteGlobalUserCommand(Discord, this).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Modifies this <see cref="RestApplicationCommand"/>. | |||
| /// </summary> | |||
| /// <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// The modified command. | |||
| /// </returns> | |||
| public async Task<RestGlobalUserCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGlobalUserCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| } | |||
| } | |||
| @@ -8,7 +8,7 @@ using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a Rest-based guild command. | |||
| /// Represents a Rest-based guild application command. | |||
| /// </summary> | |||
| public class RestGuildCommand : RestApplicationCommand | |||
| { | |||
| @@ -20,7 +20,6 @@ namespace Discord.Rest | |||
| internal RestGuildCommand(BaseDiscordClient client, ulong id, ulong guildId) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GuildCommand; | |||
| this.GuildId = guildId; | |||
| } | |||
| @@ -43,8 +42,11 @@ namespace Discord.Rest | |||
| /// <returns> | |||
| /// The modified command | |||
| /// </returns> | |||
| public async Task<RestGuildCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGuildCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| public override async Task ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| { | |||
| var model = await InteractionHelper.ModifyGuildCommand(Discord, this, GuildId, func, options).ConfigureAwait(false); | |||
| this.Update(model); | |||
| } | |||
| /// <summary> | |||
| /// Gets this commands permissions inside of the current guild. | |||
| @@ -1,61 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a Rest-based guild command. | |||
| /// </summary> | |||
| public class RestGuildMessageCommand : RestApplicationCommand | |||
| { | |||
| /// <summary> | |||
| /// The guild Id where this command originates. | |||
| /// </summary> | |||
| public ulong GuildId { get; private set; } | |||
| internal RestGuildMessageCommand(BaseDiscordClient client, ulong id, ulong guildId) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GuildMessageCommand; | |||
| this.GuildId = guildId; | |||
| } | |||
| internal static RestGuildMessageCommand Create(BaseDiscordClient client, Model model, ulong guildId) | |||
| { | |||
| var entity = new RestGuildMessageCommand(client, model.Id, guildId); | |||
| entity.Update(model); | |||
| return entity; | |||
| } | |||
| /// <inheritdoc/> | |||
| public override async Task DeleteAsync(RequestOptions options = null) | |||
| => await InteractionHelper.DeleteGuildMessageCommand(Discord, GuildId, this).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Modifies this <see cref="RestApplicationCommand"/>. | |||
| /// </summary> | |||
| /// <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// The modified command | |||
| /// </returns> | |||
| public async Task<RestGuildMessageCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGuildMessageCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Gets the guild that this slash command resides in. | |||
| /// </summary> | |||
| /// <param name="withCounts"><see langword="true"/> if you want the approximate member and presence counts for the guild, otherwise <see langword="false"/>.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a | |||
| /// <see cref="RestGuild"/>. | |||
| /// </returns> | |||
| public Task<RestGuild> GetGuild(bool withCounts = false, RequestOptions options = null) | |||
| => ClientHelper.GetGuildAsync(this.Discord, this.GuildId, withCounts, options); | |||
| } | |||
| } | |||
| @@ -1,61 +0,0 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| using Model = Discord.API.ApplicationCommand; | |||
| namespace Discord.Rest | |||
| { | |||
| /// <summary> | |||
| /// Represents a Rest-based guild command. | |||
| /// </summary> | |||
| public class RestGuildUserCommand : RestApplicationCommand | |||
| { | |||
| /// <summary> | |||
| /// The guild Id where this command originates. | |||
| /// </summary> | |||
| public ulong GuildId { get; private set; } | |||
| internal RestGuildUserCommand(BaseDiscordClient client, ulong id, ulong guildId) | |||
| : base(client, id) | |||
| { | |||
| this.CommandType = RestApplicationCommandType.GuildUserCommand; | |||
| this.GuildId = guildId; | |||
| } | |||
| internal static RestGuildUserCommand Create(BaseDiscordClient client, Model model, ulong guildId) | |||
| { | |||
| var entity = new RestGuildUserCommand(client, model.Id, guildId); | |||
| entity.Update(model); | |||
| return entity; | |||
| } | |||
| /// <inheritdoc/> | |||
| public override async Task DeleteAsync(RequestOptions options = null) | |||
| => await InteractionHelper.DeleteGuildUserCommand(Discord, GuildId, this).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Modifies this <see cref="RestApplicationCommand"/>. | |||
| /// </summary> | |||
| /// <param name="func">The delegate containing the properties to modify the command with.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// The modified command | |||
| /// </returns> | |||
| public async Task<RestGuildUserCommand> ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options = null) | |||
| => await InteractionHelper.ModifyGuildUserCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Gets the guild that this slash command resides in. | |||
| /// </summary> | |||
| /// <param name="withCounts"><see langword="true"/> if you want the approximate member and presence counts for the guild, otherwise <see langword="false"/>.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a | |||
| /// <see cref="RestGuild"/>. | |||
| /// </returns> | |||
| public Task<RestGuild> GetGuild(bool withCounts = false, RequestOptions options = null) | |||
| => ClientHelper.GetGuildAsync(this.Discord, this.GuildId, withCounts, options); | |||
| } | |||
| } | |||
| @@ -7,27 +7,9 @@ using System.Threading.Tasks; | |||
| namespace Discord.API.Gateway | |||
| { | |||
| internal class ApplicationCommandCreatedUpdatedEvent | |||
| internal class ApplicationCommandCreatedUpdatedEvent : API.ApplicationCommand | |||
| { | |||
| [JsonProperty("name")] | |||
| public string Name { get; set; } | |||
| [JsonProperty("id")] | |||
| public ulong Id { get; set; } | |||
| [JsonProperty("description")] | |||
| public string Description { get; set; } | |||
| [JsonProperty("application_id")] | |||
| public ulong ApplicationId { get; set; } | |||
| [JsonProperty("guild_id")] | |||
| public ulong GuildId { get; set; } | |||
| [JsonProperty("options")] | |||
| public Optional<List<Discord.API.ApplicationCommandOption>> Options { get; set; } | |||
| [JsonProperty("default_permission")] | |||
| public Optional<bool> DefaultPermission { get; set; } | |||
| public Optional<ulong> GuildId { get; set; } | |||
| } | |||
| } | |||
| @@ -3752,7 +3752,12 @@ | |||
| </member> | |||
| <member name="T:Discord.WebSocket.SocketApplicationCommand"> | |||
| <summary> | |||
| Represends a Websocket-based <see cref="T:Discord.IApplicationCommand"/> recieved over the gateway. | |||
| Represends a Websocket-based <see cref="T:Discord.IApplicationCommand"/>. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.WebSocket.SocketApplicationCommand.IsGlobalCommand"> | |||
| <summary> | |||
| <see langword="true"/> if this command is a global command, otherwise <see langword="false"/>. | |||
| </summary> | |||
| </member> | |||
| <member name="P:Discord.WebSocket.SocketApplicationCommand.ApplicationId"> | |||
| @@ -3772,20 +3777,34 @@ | |||
| </member> | |||
| <member name="P:Discord.WebSocket.SocketApplicationCommand.Options"> | |||
| <summary> | |||
| A collection of <see cref="T:Discord.WebSocket.SocketApplicationCommandOption"/>'s recieved over the gateway. | |||
| A collection of <see cref="T:Discord.WebSocket.SocketApplicationCommandOption"/>'s for this command. | |||
| </summary> | |||
| <remarks> | |||
| If the <see cref="P:Discord.WebSocket.SocketApplicationCommand.Type"/> is not a slash command, this field will be an empty collection. | |||
| </remarks> | |||
| </member> | |||
| <member name="P:Discord.WebSocket.SocketApplicationCommand.CreatedAt"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="P:Discord.WebSocket.SocketApplicationCommand.Guild"> | |||
| <summary> | |||
| The <see cref="T:Discord.WebSocket.SocketGuild"/> where this application was created. | |||
| Returns the guild this command resides in, if this command is a global command then it will return <see langword="null"/> | |||
| </summary> | |||
| </member> | |||
| <member name="M:Discord.WebSocket.SocketApplicationCommand.DeleteAsync(Discord.RequestOptions)"> | |||
| <inheritdoc/> | |||
| </member> | |||
| <member name="M:Discord.WebSocket.SocketApplicationCommand.ModifyAsync``1(System.Action{``0},Discord.RequestOptions)"> | |||
| <summary> | |||
| Modifies the current application command. | |||
| </summary> | |||
| <param name="func">The new properties to use when modifying the command.</param> | |||
| <param name="options">The options to be used when sending the request.</param> | |||
| <returns> | |||
| A task that represents the asynchronous modification operation. | |||
| </returns> | |||
| <exception cref="T:System.InvalidOperationException">Thrown when you pass in an invalid <see cref="T:Discord.ApplicationCommandProperties"/> type.</exception> | |||
| </member> | |||
| <member name="T:Discord.WebSocket.SocketApplicationCommandChoice"> | |||
| <summary> | |||
| Represents a choice for a <see cref="T:Discord.WebSocket.SocketApplicationCommandOption"/>. | |||
| @@ -1946,11 +1946,14 @@ namespace Discord.WebSocket | |||
| var data = (payload as JToken).ToObject<API.Gateway.ApplicationCommandCreatedUpdatedEvent>(_serializer); | |||
| var guild = State.GetGuild(data.GuildId); | |||
| if(guild == null) | |||
| if (data.GuildId.IsSpecified) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false); | |||
| return; | |||
| var guild = State.GetGuild(data.GuildId.Value); | |||
| if (guild == null) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId.Value).ConfigureAwait(false); | |||
| return; | |||
| } | |||
| } | |||
| var applicationCommand = SocketApplicationCommand.Create(this, data); | |||
| @@ -1964,11 +1967,14 @@ namespace Discord.WebSocket | |||
| var data = (payload as JToken).ToObject<API.Gateway.ApplicationCommandCreatedUpdatedEvent>(_serializer); | |||
| var guild = State.GetGuild(data.GuildId); | |||
| if (guild == null) | |||
| if (data.GuildId.IsSpecified) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false); | |||
| return; | |||
| var guild = State.GetGuild(data.GuildId.Value); | |||
| if (guild == null) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId.Value).ConfigureAwait(false); | |||
| return; | |||
| } | |||
| } | |||
| var applicationCommand = SocketApplicationCommand.Create(this, data); | |||
| @@ -1982,11 +1988,14 @@ namespace Discord.WebSocket | |||
| var data = (payload as JToken).ToObject<API.Gateway.ApplicationCommandCreatedUpdatedEvent>(_serializer); | |||
| var guild = State.GetGuild(data.GuildId); | |||
| if (guild == null) | |||
| if (data.GuildId.IsSpecified) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false); | |||
| return; | |||
| var guild = State.GetGuild(data.GuildId.Value); | |||
| if (guild == null) | |||
| { | |||
| await UnknownGuildAsync(type, data.GuildId.Value).ConfigureAwait(false); | |||
| return; | |||
| } | |||
| } | |||
| var applicationCommand = SocketApplicationCommand.Create(this, data); | |||
| @@ -10,10 +10,16 @@ using Model = Discord.API.Gateway.ApplicationCommandCreatedUpdatedEvent; | |||
| namespace Discord.WebSocket | |||
| { | |||
| /// <summary> | |||
| /// Represends a Websocket-based <see cref="IApplicationCommand"/> recieved over the gateway. | |||
| /// Represends a Websocket-based <see cref="IApplicationCommand"/>. | |||
| /// </summary> | |||
| public class SocketApplicationCommand : SocketEntity<ulong>, IApplicationCommand | |||
| { | |||
| /// <summary> | |||
| /// <see langword="true"/> if this command is a global command, otherwise <see langword="false"/>. | |||
| /// </summary> | |||
| public bool IsGlobalCommand | |||
| => Guild == null; | |||
| /// <inheritdoc/> | |||
| public ulong ApplicationId { get; private set; } | |||
| @@ -30,8 +36,11 @@ namespace Discord.WebSocket | |||
| public bool DefaultPermission { get; private set; } | |||
| /// <summary> | |||
| /// A collection of <see cref="SocketApplicationCommandOption"/>'s recieved over the gateway. | |||
| /// A collection of <see cref="SocketApplicationCommandOption"/>'s for this command. | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// If the <see cref="Type"/> is not a slash command, this field will be an empty collection. | |||
| /// </remarks> | |||
| public IReadOnlyCollection<SocketApplicationCommandOption> Options { get; private set; } | |||
| /// <inheritdoc/> | |||
| @@ -39,32 +48,31 @@ namespace Discord.WebSocket | |||
| => SnowflakeUtils.FromSnowflake(this.Id); | |||
| /// <summary> | |||
| /// The <see cref="SocketGuild"/> where this application was created. | |||
| /// Returns the guild this command resides in, if this command is a global command then it will return <see langword="null"/> | |||
| /// </summary> | |||
| public SocketGuild Guild | |||
| => Discord.GetGuild(this.GuildId); | |||
| private ulong GuildId { get; set; } | |||
| => GuildId.HasValue ? Discord.GetGuild(this.GuildId.Value) : null; | |||
| private ulong? GuildId { get; set; } | |||
| internal SocketApplicationCommand(DiscordSocketClient client, ulong id) | |||
| internal SocketApplicationCommand(DiscordSocketClient client, ulong id, ulong? guildId) | |||
| : base(client, id) | |||
| { | |||
| this.GuildId = guildId; | |||
| } | |||
| internal static SocketApplicationCommand Create(DiscordSocketClient client, Model model) | |||
| { | |||
| var entity = new SocketApplicationCommand(client, model.Id); | |||
| var entity = new SocketApplicationCommand(client, model.Id, model.GuildId.ToNullable()); | |||
| entity.Update(model); | |||
| return entity; | |||
| } | |||
| internal void Update(Model model) | |||
| internal void Update(API.ApplicationCommand model) | |||
| { | |||
| this.ApplicationId = model.ApplicationId; | |||
| this.Description = model.Description; | |||
| this.Name = model.Name; | |||
| this.GuildId = model.GuildId; | |||
| this.DefaultPermission = model.DefaultPermission.GetValueOrDefault(true); | |||
| this.DefaultPermission = model.DefaultPermissions.GetValueOrDefault(true); | |||
| this.Options = model.Options.IsSpecified | |||
| ? model.Options.Value.Select(x => SocketApplicationCommandOption.Create(x)).ToImmutableArray() | |||
| @@ -73,8 +81,44 @@ namespace Discord.WebSocket | |||
| /// <inheritdoc/> | |||
| public Task DeleteAsync(RequestOptions options = null) | |||
| => InteractionHelper.DeleteGuildCommand(Discord, this.GuildId, this, options); | |||
| => InteractionHelper.DeleteUnknownApplicationCommand(Discord, this.GuildId, this, options); | |||
| /// <summary> | |||
| /// Modifies the current application command. | |||
| /// </summary> | |||
| /// <param name="func">The new properties to use when modifying the command.</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous modification operation. | |||
| /// </returns> | |||
| /// <exception cref="InvalidOperationException">Thrown when you pass in an invalid <see cref="ApplicationCommandProperties"/> type.</exception> | |||
| public async Task ModifyAsync<TArg>(Action<TArg> func, RequestOptions options = null) where TArg : ApplicationCommandProperties | |||
| { | |||
| switch (typeof(TArg)) | |||
| { | |||
| case Type messageCommand when messageCommand == typeof(MessageCommandProperties) && this.Type != ApplicationCommandType.Message: | |||
| case Type slashCommand when slashCommand == typeof(SlashCommandProperties) && this.Type != ApplicationCommandType.Slash: | |||
| case Type userCommand when userCommand == typeof(UserCommandProperties) && this.Type != ApplicationCommandType.User: | |||
| throw new InvalidOperationException($"Cannot modify this application command with the parameter type {nameof(TArg)}"); | |||
| } | |||
| API.ApplicationCommand command = null; | |||
| if (this.IsGlobalCommand) | |||
| { | |||
| command = await InteractionHelper.ModifyGlobalCommand(Discord, this, func, options).ConfigureAwait(false); | |||
| } | |||
| else | |||
| { | |||
| command = await InteractionHelper.ModifyGuildCommand(Discord, this, this.GuildId.Value, func, options); | |||
| } | |||
| this.Update(command); | |||
| } | |||
| // IApplicationCommand | |||
| IReadOnlyCollection<IApplicationCommandOption> IApplicationCommand.Options => Options; | |||
| Task IApplicationCommand.ModifyAsync(Action<ApplicationCommandProperties> func, RequestOptions options) | |||
| => ModifyAsync(func, options); | |||
| } | |||
| } | |||