| @@ -0,0 +1,25 @@ | |||
| using System; | |||
| namespace Discord.Interactions | |||
| { | |||
| /// <summary> | |||
| /// Sets the <see cref="IApplicationCommandInfo.IsNsfw"/> property of an application command or module. | |||
| /// </summary> | |||
| [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] | |||
| public class NsfwCommandAttribute : Attribute | |||
| { | |||
| /// <summary> | |||
| /// Gets whether or not this command is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; } | |||
| /// <summary> | |||
| /// Sets the <see cref="IApplicationCommandInfo.IsNsfw"/> property of an application command or module. | |||
| /// </summary> | |||
| /// <param name="isNsfw">Whether or not this command is age restricted.</param> | |||
| public NsfwCommandAttribute(bool isNsfw) | |||
| { | |||
| IsNsfw = isNsfw; | |||
| } | |||
| } | |||
| } | |||
| @@ -25,6 +25,11 @@ namespace Discord.Interactions.Builders | |||
| /// </summary> | |||
| public bool IsEnabledInDm { get; set; } = true; | |||
| /// <summary> | |||
| /// Gets whether this command is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; set; } = false; | |||
| /// <summary> | |||
| /// Gets the default permissions needed for executing this command. | |||
| /// </summary> | |||
| @@ -95,6 +100,19 @@ namespace Discord.Interactions.Builders | |||
| return this; | |||
| } | |||
| /// <summary> | |||
| /// Sets <see cref="IsNsfw"/>. | |||
| /// </summary> | |||
| /// <param name="isNsfw">New value of the <see cref="IsNsfw"/>.</param> | |||
| /// <returns> | |||
| /// The builder instance. | |||
| /// </returns> | |||
| public ContextCommandBuilder SetNsfw(bool isNsfw) | |||
| { | |||
| IsNsfw = isNsfw; | |||
| return this; | |||
| } | |||
| /// <summary> | |||
| /// Sets <see cref="DefaultMemberPermissions"/>. | |||
| /// </summary> | |||
| @@ -25,6 +25,11 @@ namespace Discord.Interactions.Builders | |||
| /// </summary> | |||
| public bool IsEnabledInDm { get; set; } = true; | |||
| /// <summary> | |||
| /// Gets whether this command is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; set; } = false; | |||
| /// <summary> | |||
| /// Gets the default permissions needed for executing this command. | |||
| /// </summary> | |||
| @@ -95,6 +100,19 @@ namespace Discord.Interactions.Builders | |||
| return this; | |||
| } | |||
| /// <summary> | |||
| /// Sets <see cref="IsNsfw"/>. | |||
| /// </summary> | |||
| /// <param name="isNsfw">New value of the <see cref="IsNsfw"/>.</param> | |||
| /// <returns> | |||
| /// The builder instance. | |||
| /// </returns> | |||
| public SlashCommandBuilder SetNsfw(bool isNsfw) | |||
| { | |||
| IsNsfw = isNsfw; | |||
| return this; | |||
| } | |||
| /// <summary> | |||
| /// Sets <see cref="DefaultMemberPermissions"/>. | |||
| /// </summary> | |||
| @@ -59,6 +59,11 @@ namespace Discord.Interactions.Builders | |||
| /// </summary> | |||
| public bool IsEnabledInDm { get; set; } = true; | |||
| /// <summary> | |||
| /// Gets whether this command is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; set; } = false; | |||
| /// <summary> | |||
| /// Gets the default permissions needed for executing this command. | |||
| /// </summary> | |||
| @@ -101,6 +101,9 @@ namespace Discord.Interactions.Builders | |||
| case DontAutoRegisterAttribute dontAutoRegister: | |||
| builder.DontAutoRegister = true; | |||
| break; | |||
| case NsfwCommandAttribute nsfwCommand: | |||
| builder.IsNsfw = nsfwCommand.IsNsfw; | |||
| break; | |||
| default: | |||
| builder.AddAttributes(attribute); | |||
| break; | |||
| @@ -192,6 +195,9 @@ namespace Discord.Interactions.Builders | |||
| case PreconditionAttribute precondition: | |||
| builder.WithPreconditions(precondition); | |||
| break; | |||
| case NsfwCommandAttribute nsfwCommand: | |||
| builder.SetNsfw(nsfwCommand.IsNsfw); | |||
| break; | |||
| default: | |||
| builder.WithAttributes(attribute); | |||
| break; | |||
| @@ -244,6 +250,9 @@ namespace Discord.Interactions.Builders | |||
| case PreconditionAttribute precondition: | |||
| builder.WithPreconditions(precondition); | |||
| break; | |||
| case NsfwCommandAttribute nsfwCommand: | |||
| builder.SetNsfw(nsfwCommand.IsNsfw); | |||
| break; | |||
| default: | |||
| builder.WithAttributes(attribute); | |||
| break; | |||
| @@ -20,6 +20,9 @@ namespace Discord.Interactions | |||
| /// <inheritdoc/> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <inheritdoc/> | |||
| public bool IsNsfw { get; } | |||
| /// <inheritdoc/> | |||
| public GuildPermission? DefaultMemberPermissions { get; } | |||
| @@ -37,6 +40,7 @@ namespace Discord.Interactions | |||
| { | |||
| CommandType = builder.CommandType; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsNsfw = builder.IsNsfw; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | |||
| @@ -29,6 +29,9 @@ namespace Discord.Interactions | |||
| /// <inheritdoc/> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <inheritdoc/> | |||
| public bool IsNsfw { get; } | |||
| /// <inheritdoc/> | |||
| public GuildPermission? DefaultMemberPermissions { get; } | |||
| @@ -48,6 +51,7 @@ namespace Discord.Interactions | |||
| Description = builder.Description; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| IsNsfw = builder.IsNsfw; | |||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | |||
| FlattenedParameters = FlattenParameters(Parameters).ToImmutableArray(); | |||
| @@ -28,6 +28,11 @@ namespace Discord.Interactions | |||
| /// </summary> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <summary> | |||
| /// Gets whether this command can is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; } | |||
| /// <summary> | |||
| /// Gets the default permissions needed for executing this command. | |||
| /// </summary> | |||
| @@ -49,6 +49,11 @@ namespace Discord.Interactions | |||
| /// </summary> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <summary> | |||
| /// Gets whether this command is age restricted. | |||
| /// </summary> | |||
| public bool IsNsfw { get; } | |||
| /// <summary> | |||
| /// Gets the default permissions needed for executing this command. | |||
| /// </summary> | |||
| @@ -121,6 +126,7 @@ namespace Discord.Interactions | |||
| Description = builder.Description; | |||
| Parent = parent; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsNsfw = builder.IsNsfw; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| DefaultMemberPermissions = BuildDefaultMemberPermissions(builder); | |||
| SlashCommands = BuildSlashCommands(builder).ToImmutableArray(); | |||
| @@ -54,6 +54,7 @@ namespace Discord.Interactions | |||
| Description = commandInfo.Description, | |||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||
| IsDMEnabled = commandInfo.IsEnabledInDm, | |||
| IsNsfw = commandInfo.IsNsfw, | |||
| DefaultMemberPermissions = ((commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0)).SanitizeGuildPermissions(), | |||
| }.WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) | |||
| .WithDescriptionLocalizations(localizationManager?.GetAllDescriptions(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) | |||
| @@ -97,7 +98,8 @@ namespace Discord.Interactions | |||
| Name = commandInfo.Name, | |||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||
| DefaultMemberPermissions = ((commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0)).SanitizeGuildPermissions(), | |||
| IsDMEnabled = commandInfo.IsEnabledInDm | |||
| IsDMEnabled = commandInfo.IsEnabledInDm, | |||
| IsNsfw = commandInfo.IsNsfw, | |||
| } | |||
| .WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) | |||
| .Build(), | |||
| @@ -106,6 +108,7 @@ namespace Discord.Interactions | |||
| Name = commandInfo.Name, | |||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||
| DefaultMemberPermissions = ((commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0)).SanitizeGuildPermissions(), | |||
| IsNsfw = commandInfo.IsNsfw, | |||
| IsDMEnabled = commandInfo.IsEnabledInDm | |||
| } | |||
| .WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) | |||
| @@ -225,6 +228,7 @@ namespace Discord.Interactions | |||
| IsDefaultPermission = command.IsDefaultPermission, | |||
| DefaultMemberPermissions = (GuildPermission)command.DefaultMemberPermissions.RawValue, | |||
| IsDMEnabled = command.IsEnabledInDm, | |||
| IsNsfw = command.IsNsfw, | |||
| Options = command.Options?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified, | |||
| NameLocalizations = command.NameLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty, | |||
| DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty, | |||
| @@ -234,6 +238,7 @@ namespace Discord.Interactions | |||
| Name = command.Name, | |||
| IsDefaultPermission = command.IsDefaultPermission, | |||
| DefaultMemberPermissions = (GuildPermission)command.DefaultMemberPermissions.RawValue, | |||
| IsNsfw = command.IsNsfw, | |||
| IsDMEnabled = command.IsEnabledInDm, | |||
| NameLocalizations = command.NameLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty, | |||
| DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty | |||
| @@ -243,6 +248,7 @@ namespace Discord.Interactions | |||
| Name = command.Name, | |||
| IsDefaultPermission = command.IsDefaultPermission, | |||
| DefaultMemberPermissions = (GuildPermission)command.DefaultMemberPermissions.RawValue, | |||
| IsNsfw = command.IsNsfw, | |||
| IsDMEnabled = command.IsEnabledInDm, | |||
| NameLocalizations = command.NameLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty, | |||
| DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary() ?? ImmutableDictionary<string, string>.Empty | |||