Browse Source

add `NsfwCommandAttribute` to Interaction Framework

pull/2531/head
Misha133 2 years ago
parent
commit
1c1ff8c085
10 changed files with 101 additions and 1 deletions
  1. +25
    -0
      src/Discord.Net.Interactions/Attributes/NsfwCommandAttribute.cs
  2. +18
    -0
      src/Discord.Net.Interactions/Builders/Commands/ContextCommandBuilder.cs
  3. +18
    -0
      src/Discord.Net.Interactions/Builders/Commands/SlashCommandBuilder.cs
  4. +5
    -0
      src/Discord.Net.Interactions/Builders/ModuleBuilder.cs
  5. +9
    -0
      src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs
  6. +4
    -0
      src/Discord.Net.Interactions/Info/Commands/ContextCommands/ContextCommandInfo.cs
  7. +4
    -0
      src/Discord.Net.Interactions/Info/Commands/SlashCommandInfo.cs
  8. +5
    -0
      src/Discord.Net.Interactions/Info/IApplicationCommandInfo.cs
  9. +6
    -0
      src/Discord.Net.Interactions/Info/ModuleInfo.cs
  10. +7
    -1
      src/Discord.Net.Interactions/Utilities/ApplicationCommandRestUtil.cs

+ 25
- 0
src/Discord.Net.Interactions/Attributes/NsfwCommandAttribute.cs View File

@@ -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;
}
}
}

+ 18
- 0
src/Discord.Net.Interactions/Builders/Commands/ContextCommandBuilder.cs View File

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


+ 18
- 0
src/Discord.Net.Interactions/Builders/Commands/SlashCommandBuilder.cs View File

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


+ 5
- 0
src/Discord.Net.Interactions/Builders/ModuleBuilder.cs View File

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


+ 9
- 0
src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs View File

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


+ 4
- 0
src/Discord.Net.Interactions/Info/Commands/ContextCommands/ContextCommandInfo.cs View File

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


+ 4
- 0
src/Discord.Net.Interactions/Info/Commands/SlashCommandInfo.cs View File

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


+ 5
- 0
src/Discord.Net.Interactions/Info/IApplicationCommandInfo.cs View File

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


+ 6
- 0
src/Discord.Net.Interactions/Info/ModuleInfo.cs View File

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


+ 7
- 1
src/Discord.Net.Interactions/Utilities/ApplicationCommandRestUtil.cs View File

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


Loading…
Cancel
Save