|
- using System;
-
- namespace Discord.Interactions.Builders
- {
- /// <summary>
- /// Represents a builder for creating <see cref="SlashCommandInfo"/>.
- /// </summary>
- public sealed class SlashCommandBuilder : CommandBuilder<SlashCommandInfo, SlashCommandBuilder, SlashCommandParameterBuilder>
- {
- protected override SlashCommandBuilder Instance => this;
-
- /// <summary>
- /// Gets and sets the description of this command.
- /// </summary>
- public string Description { get; set; }
-
- /// <summary>
- /// Gets and sets the default permission of this command.
- /// </summary>
- [Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")]
- public bool DefaultPermission { get; set; } = true;
-
- /// <summary>
- /// Gets whether this command can be used in DMs.
- /// </summary>
- public bool IsEnabledInDm { get; set; } = true;
-
- /// <summary>
- /// Gets the default permissions needed for executing this command.
- /// </summary>
- public GuildPermission? DefaultMemberPermissions { get; set; } = null;
-
- internal SlashCommandBuilder (ModuleBuilder module) : base(module) { }
-
- /// <summary>
- /// Initializes a new <see cref="SlashCommandBuilder"/>.
- /// </summary>
- /// <param name="module">Parent module of this command.</param>
- /// <param name="name">Name of this command.</param>
- /// <param name="callback">Execution callback of this command.</param>
- public SlashCommandBuilder (ModuleBuilder module, string name, ExecuteCallback callback) : base(module, name, callback) { }
-
- /// <summary>
- /// Sets <see cref="Description"/>.
- /// </summary>
- /// <param name="description">New value of the <see cref="Description"/>.</param>
- /// <returns>
- /// The builder instance.
- /// </returns>
- public SlashCommandBuilder WithDescription (string description)
- {
- Description = description;
- return this;
- }
-
- /// <summary>
- /// Sets <see cref="DefaultPermission"/>.
- /// </summary>
- /// <param name="permission">New value of the <see cref="DefaultPermission"/>.</param>
- /// <returns>
- /// The builder instance.
- /// </returns>
- [Obsolete($"To be deprecated soon, use {nameof(SetEnabledInDm)} and {nameof(WithDefaultMemberPermissions)} instead.")]
- public SlashCommandBuilder WithDefaultPermission (bool permission)
- {
- DefaultPermission = permission;
- return Instance;
- }
-
- /// <summary>
- /// Adds a command parameter to the parameters collection.
- /// </summary>
- /// <param name="configure"><see cref="SlashCommandParameterBuilder"/> factory.</param>
- /// <returns>
- /// The builder instance.
- /// </returns>
- public override SlashCommandBuilder AddParameter (Action<SlashCommandParameterBuilder> configure)
- {
- var parameter = new SlashCommandParameterBuilder(this);
- configure(parameter);
- AddParameters(parameter);
- return this;
- }
-
- /// <summary>
- /// Sets <see cref="IsEnabledInDm"/>.
- /// </summary>
- /// <param name="isEnabled">New value of the <see cref="IsEnabledInDm"/>.</param>
- /// <returns>
- /// The builder instance.
- /// </returns>
- public SlashCommandBuilder SetEnabledInDm(bool isEnabled)
- {
- IsEnabledInDm = isEnabled;
- return this;
- }
-
- /// <summary>
- /// Sets <see cref="DefaultMemberPermissions"/>.
- /// </summary>
- /// <param name="permissions">New value of the <see cref="DefaultMemberPermissions"/>.</param>
- /// <returns>
- /// The builder instance.
- /// </returns>
- public SlashCommandBuilder WithDefaultMemberPermissions(GuildPermission permissions)
- {
- DefaultMemberPermissions = permissions;
- return this;
- }
-
- internal override SlashCommandInfo Build (ModuleInfo module, InteractionService commandService) =>
- new SlashCommandInfo(this, module, commandService);
- }
- }
|