| @@ -17,6 +17,12 @@ namespace Discord.Interactions | |||
| /// <inheritdoc/> | |||
| public bool DefaultPermission { get; } | |||
| /// <inheritdoc/> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <inheritdoc/> | |||
| public GuildPermission? DefaultMemberPermissions { get; } | |||
| /// <inheritdoc/> | |||
| public override IReadOnlyCollection<CommandParameterInfo> Parameters { get; } | |||
| @@ -31,6 +37,8 @@ namespace Discord.Interactions | |||
| { | |||
| CommandType = builder.CommandType; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | |||
| } | |||
| @@ -26,6 +26,12 @@ namespace Discord.Interactions | |||
| /// <inheritdoc/> | |||
| public bool DefaultPermission { get; } | |||
| /// <inheritdoc/> | |||
| public bool IsEnabledInDm { get; } | |||
| /// <inheritdoc/> | |||
| public GuildPermission? DefaultMemberPermissions { get; } | |||
| /// <inheritdoc/> | |||
| public override IReadOnlyCollection<SlashCommandParameterInfo> Parameters { get; } | |||
| @@ -41,6 +47,8 @@ namespace Discord.Interactions | |||
| { | |||
| Description = builder.Description; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| DefaultMemberPermissions = builder.DefaultMemberPermissions; | |||
| Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray(); | |||
| FlattenedParameters = FlattenParameters(Parameters).ToImmutableArray(); | |||
| @@ -1,3 +1,5 @@ | |||
| using System; | |||
| namespace Discord.Interactions | |||
| { | |||
| /// <summary> | |||
| @@ -18,6 +20,17 @@ namespace Discord.Interactions | |||
| /// <summary> | |||
| /// Gets the DefaultPermission of this command. | |||
| /// </summary> | |||
| [Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")] | |||
| 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> | |||
| /// Gets the default Permission of this module. | |||
| /// </summary> | |||
| [Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")] | |||
| 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> | |||
| /// Gets the collection of Sub Modules of this module. | |||
| /// </summary> | |||
| @@ -110,6 +121,8 @@ namespace Discord.Interactions | |||
| Description = builder.Description; | |||
| Parent = parent; | |||
| DefaultPermission = builder.DefaultPermission; | |||
| IsEnabledInDm = builder.IsEnabledInDm; | |||
| DefaultMemberPermissions = BuildDefaultMemberPermissions(builder); | |||
| SlashCommands = BuildSlashCommands(builder).ToImmutableArray(); | |||
| ContextCommands = BuildContextCommands(builder).ToImmutableArray(); | |||
| ComponentCommands = BuildComponentCommands(builder).ToImmutableArray(); | |||
| @@ -226,5 +239,20 @@ namespace Discord.Interactions | |||
| } | |||
| 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, | |||
| Description = commandInfo.Description, | |||
| IsDefaultPermission = commandInfo.DefaultPermission, | |||
| IsDMEnabled = commandInfo.IsEnabledInDm, | |||
| DefaultMemberPermissions = (commandInfo.DefaultMemberPermissions ?? 0) | (commandInfo.Module.DefaultMemberPermissions ?? 0) | |||
| }.Build(); | |||
| if (commandInfo.Parameters.Count > SlashCommandBuilder.MaxOptionsCount) | |||
| @@ -64,8 +65,20 @@ namespace Discord.Interactions | |||
| public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) | |||
| => 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.") | |||
| }; | |||
| #endregion | |||
| @@ -113,6 +126,8 @@ namespace Discord.Interactions | |||
| Name = moduleInfo.SlashGroupName, | |||
| Description = moduleInfo.Description, | |||
| IsDefaultPermission = moduleInfo.DefaultPermission, | |||
| IsDMEnabled = moduleInfo.IsEnabledInDm, | |||
| DefaultMemberPermissions = moduleInfo.DefaultMemberPermissions | |||
| }.Build(); | |||
| if (options.Count > SlashCommandBuilder.MaxOptionsCount) | |||