Browse Source

[Feature] Age restricted (NSFW) application commands support (#2531)

* add `nsfw` to data model & internal methods; add missing property

* add `nsfw` prop to command builders

* add `NsfwCommandAttribute` to Interaction Framework

* working state

* docs?
tags/3.9.0
Misha133 GitHub 2 years ago
parent
commit
56b1a930e7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 230 additions and 15 deletions
  1. +5
    -0
      docs/guides/int_framework/permissions.md
  2. +6
    -0
      docs/guides/int_framework/samples/permissions/nsfw-permissions.cs
  3. +5
    -0
      src/Discord.Net.Core/Entities/Interactions/ApplicationCommandProperties.cs
  4. +19
    -2
      src/Discord.Net.Core/Entities/Interactions/ContextMenus/MessageCommandBuilder.cs
  5. +19
    -2
      src/Discord.Net.Core/Entities/Interactions/ContextMenus/UserCommandBuilder.cs
  6. +5
    -0
      src/Discord.Net.Core/Entities/Interactions/IApplicationCommand.cs
  7. +19
    -2
      src/Discord.Net.Core/Entities/Interactions/SlashCommands/SlashCommandBuilder.cs
  8. +25
    -0
      src/Discord.Net.Interactions/Attributes/NsfwCommandAttribute.cs
  9. +18
    -0
      src/Discord.Net.Interactions/Builders/Commands/ContextCommandBuilder.cs
  10. +18
    -0
      src/Discord.Net.Interactions/Builders/Commands/SlashCommandBuilder.cs
  11. +18
    -0
      src/Discord.Net.Interactions/Builders/ModuleBuilder.cs
  12. +9
    -0
      src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs
  13. +4
    -0
      src/Discord.Net.Interactions/Info/Commands/ContextCommands/ContextCommandInfo.cs
  14. +4
    -0
      src/Discord.Net.Interactions/Info/Commands/SlashCommandInfo.cs
  15. +5
    -0
      src/Discord.Net.Interactions/Info/IApplicationCommandInfo.cs
  16. +6
    -0
      src/Discord.Net.Interactions/Info/ModuleInfo.cs
  17. +8
    -1
      src/Discord.Net.Interactions/Utilities/ApplicationCommandRestUtil.cs
  18. +3
    -0
      src/Discord.Net.Rest/API/Common/ApplicationCommand.cs
  19. +5
    -1
      src/Discord.Net.Rest/API/Rest/CreateApplicationCommandParams.cs
  20. +6
    -0
      src/Discord.Net.Rest/API/Rest/ModifyApplicationCommandParams.cs
  21. +15
    -7
      src/Discord.Net.Rest/Entities/Interactions/InteractionHelper.cs
  22. +4
    -0
      src/Discord.Net.Rest/Entities/Interactions/RestApplicationCommand.cs
  23. +4
    -0
      src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketApplicationCommand.cs

+ 5
- 0
docs/guides/int_framework/permissions.md View File

@@ -55,5 +55,10 @@ The amount of nesting you can do is realistically endless.
> If the nested class is marked with `Group`, as required for setting up subcommands, this example will not work.
> As mentioned before, subcommands cannot have seperate permissions from the top level command.

### NSFW Commands
Commands can be limited to only age restricted channels and DMs:

[!code-csharp[Nsfw-Permissions](samples/permissions/nsfw-permissions.cs)]

[permissions]: xref:Discord.GuildPermission


+ 6
- 0
docs/guides/int_framework/samples/permissions/nsfw-permissions.cs View File

@@ -0,0 +1,6 @@
[NsfwCommand(true)]
[SlashCommand("beautiful-code", "Get an image of perfect code")]
public async Task BeautifulCodeAsync(...)
{
...
}

+ 5
- 0
src/Discord.Net.Core/Entities/Interactions/ApplicationCommandProperties.cs View File

@@ -83,6 +83,11 @@ namespace Discord
/// </summary>
public Optional<bool> IsDMEnabled { get; set; }

/// <summary>
/// Gets or sets whether or not this command is age restricted.
/// </summary>
public Optional<bool> IsNsfw { get; set; }

/// <summary>
/// Gets or sets the default permissions required by a user to execute this application command.
/// </summary>


+ 19
- 2
src/Discord.Net.Core/Entities/Interactions/ContextMenus/MessageCommandBuilder.cs View File

@@ -46,6 +46,11 @@ namespace Discord
/// </summary>
public bool IsDMEnabled { get; set; } = true;

/// <summary>
/// Gets or sets whether or not this command is age restricted.
/// </summary>
public bool IsNsfw{ get; set; } = false;

/// <summary>
/// Gets or sets the default permission required to use this slash command.
/// </summary>
@@ -68,7 +73,8 @@ namespace Discord
IsDefaultPermission = IsDefaultPermission,
IsDMEnabled = IsDMEnabled,
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified,
NameLocalizations = NameLocalizations
NameLocalizations = NameLocalizations,
IsNsfw = IsNsfw,
};

return props;
@@ -123,7 +129,7 @@ namespace Discord
}

/// <summary>
/// Sets whether or not this command can be used in dms
/// Sets whether or not this command can be used in dms.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is available in dms, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
@@ -133,6 +139,17 @@ namespace Discord
return this;
}

/// <summary>
/// Sets whether or not this command is age restricted.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is age restricted, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
public MessageCommandBuilder WithNsfw(bool permission)
{
IsNsfw = permission;
return this;
}

/// <summary>
/// Adds a new entry to the <see cref="NameLocalizations"/> collection.
/// </summary>


+ 19
- 2
src/Discord.Net.Core/Entities/Interactions/ContextMenus/UserCommandBuilder.cs View File

@@ -46,6 +46,11 @@ namespace Discord
/// </summary>
public bool IsDMEnabled { get; set; } = true;

/// <summary>
/// Gets or sets whether or not this command is age restricted.
/// </summary>
public bool IsNsfw { get; set; } = false;

/// <summary>
/// Gets or sets the default permission required to use this slash command.
/// </summary>
@@ -66,7 +71,8 @@ namespace Discord
IsDefaultPermission = IsDefaultPermission,
IsDMEnabled = IsDMEnabled,
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified,
NameLocalizations = NameLocalizations
NameLocalizations = NameLocalizations,
IsNsfw = IsNsfw,
};

return props;
@@ -121,7 +127,7 @@ namespace Discord
}
/// <summary>
/// Sets whether or not this command can be used in dms
/// Sets whether or not this command can be used in dms.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is available in dms, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
@@ -131,6 +137,17 @@ namespace Discord
return this;
}

/// <summary>
/// Sets whether or not this command is age restricted.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is age restricted, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
public UserCommandBuilder WithNsfw(bool permission)
{
IsNsfw = permission;
return this;
}

/// <summary>
/// Adds a new entry to the <see cref="NameLocalizations"/> collection.
/// </summary>


+ 5
- 0
src/Discord.Net.Core/Entities/Interactions/IApplicationCommand.cs View File

@@ -42,6 +42,11 @@ namespace Discord
/// </remarks>
bool IsEnabledInDm { get; }

/// <summary>
/// Indicates whether the command is age restricted.
/// </summary>
bool IsNsfw { get; }

/// <summary>
/// Set of default <see cref="GuildPermission"/> required to invoke the command.
/// </summary>


+ 19
- 2
src/Discord.Net.Core/Entities/Interactions/SlashCommands/SlashCommandBuilder.cs View File

@@ -84,6 +84,11 @@ namespace Discord
/// Gets or sets whether or not this command can be used in DMs.
/// </summary>
public bool IsDMEnabled { get; set; } = true;
/// <summary>
/// Gets or sets whether or not this command is age restricted.
/// </summary>
public bool IsNsfw { get; set; } = false;

/// <summary>
/// Gets or sets the default permission required to use this slash command.
@@ -110,7 +115,8 @@ namespace Discord
NameLocalizations = _nameLocalizations,
DescriptionLocalizations = _descriptionLocalizations,
IsDMEnabled = IsDMEnabled,
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified,
IsNsfw = IsNsfw,
};

if (Options != null && Options.Any())
@@ -161,7 +167,7 @@ namespace Discord
}

/// <summary>
/// Sets whether or not this command can be used in dms
/// Sets whether or not this command can be used in dms.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is available in dms, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
@@ -171,6 +177,17 @@ namespace Discord
return this;
}

/// <summary>
/// Sets whether or not this command is age restricted.
/// </summary>
/// <param name="permission"><see langword="true"/> if the command is age restricted, otherwise <see langword="false"/>.</param>
/// <returns>The current builder.</returns>
public SlashCommandBuilder WithNsfw(bool permission)
{
IsNsfw = permission;
return this;
}

/// <summary>
/// Sets the default member permissions required to use this application command.
/// </summary>


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


+ 18
- 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>
@@ -190,6 +195,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 ModuleBuilder SetNsfw(bool isNsfw)
{
IsNsfw = isNsfw;
return this;
}

/// <summary>
/// Sets <see cref="DefaultMemberPermissions"/>.
/// </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.SetNsfw(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();


+ 8
- 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)
@@ -162,6 +165,7 @@ namespace Discord.Interactions
Description = moduleInfo.Description,
IsDefaultPermission = moduleInfo.DefaultPermission,
IsDMEnabled = moduleInfo.IsEnabledInDm,
IsNsfw = moduleInfo.IsNsfw,
DefaultMemberPermissions = moduleInfo.DefaultMemberPermissions
}
.WithNameLocalizations(localizationManager?.GetAllNames(modulePath, LocalizationTarget.Group) ?? ImmutableDictionary<string, string>.Empty)
@@ -225,6 +229,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 +239,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 +249,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


+ 3
- 0
src/Discord.Net.Rest/API/Common/ApplicationCommand.cs View File

@@ -44,5 +44,8 @@ namespace Discord.API

[JsonProperty("default_member_permissions")]
public Optional<GuildPermission?> DefaultMemberPermission { get; set; }

[JsonProperty("nsfw")]
public Optional<bool?> Nsfw { get; set; }
}
}

+ 5
- 1
src/Discord.Net.Rest/API/Rest/CreateApplicationCommandParams.cs View File

@@ -35,9 +35,12 @@ namespace Discord.API.Rest
[JsonProperty("default_member_permissions")]
public Optional<GuildPermission?> DefaultMemberPermission { get; set; }

[JsonProperty("nsfw")]
public Optional<bool> Nsfw { get; set; }

public CreateApplicationCommandParams() { }
public CreateApplicationCommandParams(string name, string description, ApplicationCommandType type, ApplicationCommandOption[] options = null,
IDictionary<string, string> nameLocalizations = null, IDictionary<string, string> descriptionLocalizations = null)
IDictionary<string, string> nameLocalizations = null, IDictionary<string, string> descriptionLocalizations = null, bool nsfw = false)
{
Name = name;
Description = description;
@@ -45,6 +48,7 @@ namespace Discord.API.Rest
Type = type;
NameLocalizations = nameLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional<Dictionary<string, string>>.Unspecified;
DescriptionLocalizations = descriptionLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional<Dictionary<string, string>>.Unspecified;
Nsfw = nsfw;
}
}
}

+ 6
- 0
src/Discord.Net.Rest/API/Rest/ModifyApplicationCommandParams.cs View File

@@ -17,6 +17,12 @@ namespace Discord.API.Rest
[JsonProperty("default_permission")]
public Optional<bool> DefaultPermission { get; set; }

[JsonProperty("nsfw")]
public Optional<bool> Nsfw { get; set; }

[JsonProperty("default_member_permissions")]
public Optional<GuildPermission?> DefaultMemberPermission { get; set; }

[JsonProperty("name_localizations")]
public Optional<Dictionary<string, string>> NameLocalizations { get; set; }



+ 15
- 7
src/Discord.Net.Rest/Entities/Interactions/InteractionHelper.cs View File

@@ -107,7 +107,8 @@ namespace Discord.Rest

// TODO: better conversion to nullable optionals
DefaultMemberPermission = arg.DefaultMemberPermissions.ToNullable(),
DmPermission = arg.IsDMEnabled.ToNullable()
DmPermission = arg.IsDMEnabled.ToNullable(),
Nsfw = arg.IsNsfw.GetValueOrDefault(false),
};

if (arg is SlashCommandProperties slashProps)
@@ -147,8 +148,9 @@ namespace Discord.Rest

// TODO: better conversion to nullable optionals
DefaultMemberPermission = arg.DefaultMemberPermissions.ToNullable(),
DmPermission = arg.IsDMEnabled.ToNullable()
};
DmPermission = arg.IsDMEnabled.ToNullable(),
Nsfw = arg.IsNsfw.GetValueOrDefault(false)
};

if (arg is SlashCommandProperties slashProps)
{
@@ -190,7 +192,8 @@ namespace Discord.Rest

// TODO: better conversion to nullable optionals
DefaultMemberPermission = arg.DefaultMemberPermissions.ToNullable(),
DmPermission = arg.IsDMEnabled.ToNullable()
DmPermission = arg.IsDMEnabled.ToNullable(),
Nsfw = arg.IsNsfw.GetValueOrDefault(false)
};

if (arg is SlashCommandProperties slashProps)
@@ -252,7 +255,9 @@ namespace Discord.Rest
? args.IsDefaultPermission.Value
: Optional<bool>.Unspecified,
NameLocalizations = args.NameLocalizations?.ToDictionary(),
DescriptionLocalizations = args.DescriptionLocalizations?.ToDictionary()
DescriptionLocalizations = args.DescriptionLocalizations?.ToDictionary(),
Nsfw = args.IsNsfw.GetValueOrDefault(false),
DefaultMemberPermission = args.DefaultMemberPermissions.ToNullable()
};

if (args is SlashCommandProperties slashProps)
@@ -312,7 +317,8 @@ namespace Discord.Rest

// TODO: better conversion to nullable optionals
DefaultMemberPermission = arg.DefaultMemberPermissions.ToNullable(),
DmPermission = arg.IsDMEnabled.ToNullable()
DmPermission = arg.IsDMEnabled.ToNullable(),
Nsfw = arg.IsNsfw.GetValueOrDefault(false)
};

if (arg is SlashCommandProperties slashProps)
@@ -347,7 +353,9 @@ namespace Discord.Rest
? arg.IsDefaultPermission.Value
: Optional<bool>.Unspecified,
NameLocalizations = arg.NameLocalizations?.ToDictionary(),
DescriptionLocalizations = arg.DescriptionLocalizations?.ToDictionary()
DescriptionLocalizations = arg.DescriptionLocalizations?.ToDictionary(),
Nsfw = arg.IsNsfw.GetValueOrDefault(false),
DefaultMemberPermission = arg.DefaultMemberPermissions.ToNullable()
};

if (arg is SlashCommandProperties slashProps)


+ 4
- 0
src/Discord.Net.Rest/Entities/Interactions/RestApplicationCommand.cs View File

@@ -30,6 +30,9 @@ namespace Discord.Rest
/// <inheritdoc/>
public bool IsEnabledInDm { get; private set; }

/// <inheritdoc/>
public bool IsNsfw { get; private set; }

/// <inheritdoc/>
public GuildPermissions DefaultMemberPermissions { get; private set; }

@@ -101,6 +104,7 @@ namespace Discord.Rest
IsEnabledInDm = model.DmPermission.GetValueOrDefault(true).GetValueOrDefault(true);
DefaultMemberPermissions = new GuildPermissions((ulong)model.DefaultMemberPermission.GetValueOrDefault(0).GetValueOrDefault(0));
IsNsfw = model.Nsfw.GetValueOrDefault(false).GetValueOrDefault(false);
}

/// <inheritdoc/>


+ 4
- 0
src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketApplicationCommand.cs View File

@@ -39,6 +39,9 @@ namespace Discord.WebSocket
/// <inheritdoc/>
public bool IsEnabledInDm { get; private set; }

/// <inheritdoc/>
public bool IsNsfw { get; private set; }

/// <inheritdoc/>
public GuildPermissions DefaultMemberPermissions { get; private set; }

@@ -130,6 +133,7 @@ namespace Discord.WebSocket

IsEnabledInDm = model.DmPermission.GetValueOrDefault(true).GetValueOrDefault(true);
DefaultMemberPermissions = new GuildPermissions((ulong)model.DefaultMemberPermission.GetValueOrDefault(0).GetValueOrDefault(0));
IsNsfw = model.Nsfw.GetValueOrDefault(false).GetValueOrDefault(false);
}

/// <inheritdoc/>


Loading…
Cancel
Save