| @@ -17,6 +17,12 @@ namespace Discord.Interactions | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public bool DefaultPermission { get; } | public bool DefaultPermission { get; } | ||||
| /// <inheritdoc/> | |||||
| public bool IsEnabledInDm { get; } | |||||
| /// <inheritdoc/> | |||||
| public GuildPermission? DefaultMemberPermissions { get; } | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override IReadOnlyCollection<CommandParameterInfo> Parameters { get; } | public override IReadOnlyCollection<CommandParameterInfo> Parameters { get; } | ||||
| @@ -31,6 +37,8 @@ namespace Discord.Interactions | |||||
| { | { | ||||
| CommandType = builder.CommandType; | CommandType = builder.CommandType; | ||||
| DefaultPermission = builder.DefaultPermission; | DefaultPermission = builder.DefaultPermission; | ||||
| IsEnabledInDm = builder.IsEnabledInDm; | |||||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | ||||
| } | } | ||||
| @@ -26,6 +26,12 @@ namespace Discord.Interactions | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public bool DefaultPermission { get; } | public bool DefaultPermission { get; } | ||||
| /// <inheritdoc/> | |||||
| public bool IsEnabledInDm { get; } | |||||
| /// <inheritdoc/> | |||||
| public GuildPermission? DefaultMemberPermissions { get; } | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override IReadOnlyCollection<SlashCommandParameterInfo> Parameters { get; } | public override IReadOnlyCollection<SlashCommandParameterInfo> Parameters { get; } | ||||
| @@ -41,6 +47,8 @@ namespace Discord.Interactions | |||||
| { | { | ||||
| Description = builder.Description; | Description = builder.Description; | ||||
| DefaultPermission = builder.DefaultPermission; | DefaultPermission = builder.DefaultPermission; | ||||
| IsEnabledInDm = builder.IsEnabledInDm; | |||||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | ||||
| FlattenedParameters = FlattenParameters(Parameters).ToImmutableArray(); | FlattenedParameters = FlattenParameters(Parameters).ToImmutableArray(); | ||||
| @@ -1,3 +1,5 @@ | |||||
| using System; | |||||
| namespace Discord.Interactions | namespace Discord.Interactions | ||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| @@ -18,6 +20,17 @@ namespace Discord.Interactions | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the DefaultPermission of this command. | /// Gets the DefaultPermission of this command. | ||||
| /// </summary> | /// </summary> | ||||
| [Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")] | |||||
| bool DefaultPermission { get; } | bool DefaultPermission { get; } | ||||
| /// <summary> | |||||
| /// Gets whether this command can be used in DMs. | |||||
| /// </summary> | |||||
| public bool IsEnabledInDm { get; } | |||||
| /// <summary> | |||||
| /// Gets the default permissions needed for executing this command. | |||||
| /// </summary> | |||||
| public GuildPermission? DefaultMemberPermissions { get; } | |||||
| } | } | ||||
| } | } | ||||
| @@ -41,8 +41,19 @@ namespace Discord.Interactions | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the default Permission of this module. | /// Gets the default Permission of this module. | ||||
| /// </summary> | /// </summary> | ||||
| [Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")] | |||||
| public bool DefaultPermission { get; } | public bool DefaultPermission { get; } | ||||
| /// <summary> | |||||
| /// Gets whether this command can be used in DMs. | |||||
| /// </summary> | |||||
| public bool IsEnabledInDm { get; } | |||||
| /// <summary> | |||||
| /// Gets the default permissions needed for executing this command. | |||||
| /// </summary> | |||||
| public GuildPermission? DefaultMemberPermissions { get; } | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the collection of Sub Modules of this module. | /// Gets the collection of Sub Modules of this module. | ||||
| /// </summary> | /// </summary> | ||||
| @@ -110,6 +121,8 @@ namespace Discord.Interactions | |||||
| Description = builder.Description; | Description = builder.Description; | ||||
| Parent = parent; | Parent = parent; | ||||
| DefaultPermission = builder.DefaultPermission; | DefaultPermission = builder.DefaultPermission; | ||||
| IsEnabledInDm = builder.IsEnabledInDm; | |||||
| DefaultMemberPermissions = BuildDefaultMemberPermissions(builder); | |||||
| SlashCommands = BuildSlashCommands(builder).ToImmutableArray(); | SlashCommands = BuildSlashCommands(builder).ToImmutableArray(); | ||||
| ContextCommands = BuildContextCommands(builder).ToImmutableArray(); | ContextCommands = BuildContextCommands(builder).ToImmutableArray(); | ||||
| ComponentCommands = BuildComponentCommands(builder).ToImmutableArray(); | ComponentCommands = BuildComponentCommands(builder).ToImmutableArray(); | ||||
| @@ -226,5 +239,20 @@ namespace Discord.Interactions | |||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| private static GuildPermission? BuildDefaultMemberPermissions(ModuleBuilder builder) | |||||
| { | |||||
| var permissions = builder.DefaultMemberPermissions; | |||||
| var parent = builder.Parent; | |||||
| while (parent != null) | |||||
| { | |||||
| permissions = (permissions ?? 0) | (parent.DefaultMemberPermissions ?? 0); | |||||
| parent = parent.Parent; | |||||
| } | |||||
| return permissions; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -40,7 +40,8 @@ namespace Discord.Interactions | |||||
| { | { | ||||
| Name = commandInfo.Name, | Name = commandInfo.Name, | ||||
| Description = commandInfo.Description, | Description = commandInfo.Description, | ||||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||||
| IsDMEnabled = commandInfo.IsEnabledInDm, | |||||
| DefaultMemberPermissions = (commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0) | |||||
| }.Build(); | }.Build(); | ||||
| if (commandInfo.Parameters.Count > SlashCommandBuilder.MaxOptionsCount) | if (commandInfo.Parameters.Count > SlashCommandBuilder.MaxOptionsCount) | ||||
| @@ -64,8 +65,20 @@ namespace Discord.Interactions | |||||
| public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) | public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) | ||||
| => commandInfo.CommandType switch | => commandInfo.CommandType switch | ||||
| { | { | ||||
| ApplicationCommandType.Message => new MessageCommandBuilder { Name = commandInfo.Name, IsDefaultPermission = commandInfo.DefaultPermission}.Build(), | |||||
| ApplicationCommandType.User => new UserCommandBuilder { Name = commandInfo.Name, IsDefaultPermission=commandInfo.DefaultPermission}.Build(), | |||||
| ApplicationCommandType.Message => new MessageCommandBuilder | |||||
| { | |||||
| Name = commandInfo.Name, | |||||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||||
| DefaultMemberPermissions = (commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0), | |||||
| IsDMEnabled = commandInfo.IsEnabledInDm | |||||
| }.Build(), | |||||
| ApplicationCommandType.User => new UserCommandBuilder | |||||
| { | |||||
| Name = commandInfo.Name, | |||||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||||
| DefaultMemberPermissions = (commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0), | |||||
| IsDMEnabled = commandInfo.IsEnabledInDm | |||||
| }.Build(), | |||||
| _ => throw new InvalidOperationException($"{commandInfo.CommandType} isn't a supported command type.") | _ => throw new InvalidOperationException($"{commandInfo.CommandType} isn't a supported command type.") | ||||
| }; | }; | ||||
| #endregion | #endregion | ||||
| @@ -113,6 +126,8 @@ namespace Discord.Interactions | |||||
| Name = moduleInfo.SlashGroupName, | Name = moduleInfo.SlashGroupName, | ||||
| Description = moduleInfo.Description, | Description = moduleInfo.Description, | ||||
| IsDefaultPermission = moduleInfo.DefaultPermission, | IsDefaultPermission = moduleInfo.DefaultPermission, | ||||
| IsDMEnabled = moduleInfo.IsEnabledInDm, | |||||
| DefaultMemberPermissions = moduleInfo.DefaultMemberPermissions | |||||
| }.Build(); | }.Build(); | ||||
| if (options.Count > SlashCommandBuilder.MaxOptionsCount) | if (options.Count > SlashCommandBuilder.MaxOptionsCount) | ||||