-
-
Notifications
You must be signed in to change notification settings - Fork 737
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add an unscuffed precondition attribute (#2976)
* fix lul * why does v3 has to be so scuffed
- Loading branch information
Showing
2 changed files
with
78 additions
and
0 deletions.
There are no files selected for viewing
77 changes: 77 additions & 0 deletions
77
src/Discord.Net.Interactions/Attributes/Preconditions/RequireAppPermissionAttribute.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
using System.Threading.Tasks; | ||
using System; | ||
|
||
namespace Discord.Interactions; | ||
|
||
/// <summary> | ||
/// Requires the bot to have a specific permission in the channel a command is invoked in. | ||
/// </summary> | ||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] | ||
public class RequireAppPermissionAttribute : PreconditionAttribute | ||
{ | ||
/// <summary> | ||
/// Gets the specified <see cref="Discord.GuildPermission" /> of the precondition. | ||
/// </summary> | ||
public GuildPermission? GuildPermission { get; } | ||
|
||
/// <summary> | ||
/// Gets the specified <see cref="Discord.ChannelPermission" /> of the precondition. | ||
/// </summary> | ||
public ChannelPermission? ChannelPermission { get; } | ||
|
||
/// <summary> | ||
/// Gets or sets the error message if the precondition | ||
/// fails due to being run outside of a Guild channel. | ||
/// </summary> | ||
public string NotAGuildErrorMessage { get; set; } | ||
|
||
/// <summary> | ||
/// Requires the bot account to have a specific <see cref="Discord.GuildPermission"/>. | ||
/// </summary> | ||
/// <remarks> | ||
/// This precondition will always fail if the command is being invoked in a <see cref="IPrivateChannel"/>. | ||
/// </remarks> | ||
/// <param name="permission"> | ||
/// The <see cref="Discord.GuildPermission"/> that the bot must have. Multiple permissions can be specified | ||
/// by ORing the permissions together. | ||
/// </param> | ||
public RequireAppPermissionAttribute(GuildPermission permission) | ||
{ | ||
GuildPermission = permission; | ||
ChannelPermission = null; | ||
} | ||
/// <summary> | ||
/// Requires that the bot account to have a specific <see cref="Discord.ChannelPermission"/>. | ||
/// </summary> | ||
/// <param name="permission"> | ||
/// The <see cref="Discord.ChannelPermission"/> that the bot must have. Multiple permissions can be | ||
/// specified by ORing the permissions together. | ||
/// </param> | ||
public RequireAppPermissionAttribute(ChannelPermission permission) | ||
{ | ||
ChannelPermission = permission; | ||
GuildPermission = null; | ||
} | ||
|
||
/// <inheritdoc /> | ||
public override Task<PreconditionResult> CheckRequirementsAsync(IInteractionContext context, ICommandInfo command, IServiceProvider services) | ||
{ | ||
if (GuildPermission.HasValue) | ||
{ | ||
if (context.Interaction.GuildId is null) | ||
return Task.FromResult(PreconditionResult.FromError(NotAGuildErrorMessage ?? "Command must be used in a guild channel.")); | ||
if (context.Interaction.Permissions.Has(GuildPermission.Value)) | ||
return Task.FromResult(PreconditionResult.FromError(ErrorMessage ?? $"Bot requires guild permission {GuildPermission.Value}.")); | ||
} | ||
|
||
if (ChannelPermission.HasValue) | ||
{ | ||
var channelPerms = new ChannelPermissions(context.Interaction.Permissions.RawValue); | ||
if (!channelPerms.Has(ChannelPermission.Value)) | ||
return Task.FromResult(PreconditionResult.FromError(ErrorMessage ?? $"Bot requires channel permission {ChannelPermission.Value}.")); | ||
} | ||
|
||
return Task.FromResult(PreconditionResult.FromSuccess()); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters