@@ -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) | ||||