feature: V2 Permissions (#2222)

* Initial V2 permissions

* add perms-v2 attributes and properties, add deprecation messages

* add perms-v2 properties to command info classes

* add perms-v2 fields to Rest/SocketApplicationCommand entities and IApplicationCommand

* fix json name of DmPermission field

Co-authored-by: Cenngo <cenk.ergen1@gmail.com>
This commit is contained in:
Quin Lynch
2022-04-28 08:47:52 -03:00
committed by GitHub
parent 4ce1801bdf
commit d98b3cc495
22 changed files with 451 additions and 9 deletions

View File

@@ -17,8 +17,19 @@ namespace Discord.Interactions.Builders
/// <summary>
/// Gets the default permission of this command.
/// </summary>
[Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")]
public bool DefaultPermission { get; set; } = true;
/// <summary>
/// Gets whether this command can be used in DMs.
/// </summary>
public bool IsEnabledInDm { get; set; } = true;
/// <summary>
/// Gets the default permissions needed for executing this command.
/// </summary>
public GuildPermission? DefaultMemberPermissions { get; set; } = null;
internal ContextCommandBuilder (ModuleBuilder module) : base(module) { }
/// <summary>
@@ -49,6 +60,7 @@ namespace Discord.Interactions.Builders
/// <returns>
/// The builder instance.
/// </returns>
[Obsolete($"To be deprecated soon, use {nameof(SetEnabledInDm)} and {nameof(WithDefaultMemberPermissions)} instead.")]
public ContextCommandBuilder SetDefaultPermission (bool defaultPermision)
{
DefaultPermission = defaultPermision;
@@ -70,6 +82,32 @@ namespace Discord.Interactions.Builders
return this;
}
/// <summary>
/// Sets <see cref="IsEnabledInDm"/>.
/// </summary>
/// <param name="isEnabled">New value of the <see cref="IsEnabledInDm"/>.</param>
/// <returns>
/// The builder instance.
/// </returns>
public ContextCommandBuilder SetEnabledInDm(bool isEnabled)
{
IsEnabledInDm = isEnabled;
return this;
}
/// <summary>
/// Sets <see cref="DefaultMemberPermissions"/>.
/// </summary>
/// <param name="permissions">New value of the <see cref="DefaultMemberPermissions"/>.</param>
/// <returns>
/// The builder instance.
/// </returns>
public ContextCommandBuilder WithDefaultMemberPermissions(GuildPermission permissions)
{
DefaultMemberPermissions = permissions;
return this;
}
internal override ContextCommandInfo Build (ModuleInfo module, InteractionService commandService) =>
ContextCommandInfo.Create(this, module, commandService);
}

View File

@@ -17,8 +17,19 @@ namespace Discord.Interactions.Builders
/// <summary>
/// Gets and sets the default permission of this command.
/// </summary>
[Obsolete($"To be deprecated soon, use {nameof(IsEnabledInDm)} and {nameof(DefaultMemberPermissions)} instead.")]
public bool DefaultPermission { get; set; } = true;
/// <summary>
/// Gets whether this command can be used in DMs.
/// </summary>
public bool IsEnabledInDm { get; set; } = true;
/// <summary>
/// Gets the default permissions needed for executing this command.
/// </summary>
public GuildPermission? DefaultMemberPermissions { get; set; } = null;
internal SlashCommandBuilder (ModuleBuilder module) : base(module) { }
/// <summary>
@@ -49,6 +60,7 @@ namespace Discord.Interactions.Builders
/// <returns>
/// The builder instance.
/// </returns>
[Obsolete($"To be deprecated soon, use {nameof(SetEnabledInDm)} and {nameof(WithDefaultMemberPermissions)} instead.")]
public SlashCommandBuilder WithDefaultPermission (bool permission)
{
DefaultPermission = permission;
@@ -70,6 +82,32 @@ namespace Discord.Interactions.Builders
return this;
}
/// <summary>
/// Sets <see cref="IsEnabledInDm"/>.
/// </summary>
/// <param name="isEnabled">New value of the <see cref="IsEnabledInDm"/>.</param>
/// <returns>
/// The builder instance.
/// </returns>
public SlashCommandBuilder SetEnabledInDm(bool isEnabled)
{
IsEnabledInDm = isEnabled;
return this;
}
/// <summary>
/// Sets <see cref="DefaultMemberPermissions"/>.
/// </summary>
/// <param name="permissions">New value of the <see cref="DefaultMemberPermissions"/>.</param>
/// <returns>
/// The builder instance.
/// </returns>
public SlashCommandBuilder WithDefaultMemberPermissions(GuildPermission permissions)
{
DefaultMemberPermissions = permissions;
return this;
}
internal override SlashCommandInfo Build (ModuleInfo module, InteractionService commandService) =>
new SlashCommandInfo(this, module, commandService);
}