2022-12-05 01:43:40 +00:00
|
|
|
|
namespace VpSharp.Commands.Attributes.ExecutionChecks;
|
|
|
|
|
|
2023-05-08 16:00:00 +01:00
|
|
|
|
#pragma warning disable CA1019 // Define accessors for attribute arguments
|
|
|
|
|
|
2022-12-05 01:43:40 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Specifies that this command can only be run by bots.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class RequireUserIdAttribute : PreExecutionCheckAttribute
|
|
|
|
|
{
|
2023-05-08 16:00:00 +01:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="RequireUserIdAttribute" /> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userIds">An enumerable collection of allowed user IDs.</param>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="userIds" /> is <see langword="null" />.</exception>
|
|
|
|
|
public RequireUserIdAttribute(IEnumerable<int> userIds)
|
|
|
|
|
{
|
2024-02-15 22:38:48 +00:00
|
|
|
|
if (userIds is null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(nameof(userIds));
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-08 16:00:00 +01:00
|
|
|
|
UserIds = userIds.ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-05 01:43:40 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="RequireUserIdAttribute" /> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userIds">An array of allowed user IDs.</param>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="userIds" /> is <see langword="null" />.</exception>
|
2023-05-08 16:00:00 +01:00
|
|
|
|
[CLSCompliant(false)]
|
2022-12-05 01:43:40 +00:00
|
|
|
|
public RequireUserIdAttribute(params int[] userIds)
|
|
|
|
|
{
|
2024-02-15 22:38:48 +00:00
|
|
|
|
if (userIds is null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(nameof(userIds));
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-05 01:43:40 +00:00
|
|
|
|
UserIds = userIds[..];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a read-only view of the user IDs allowed to run this command.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>A <see cref="IReadOnlyList{T}" /> of <see cref="string" /> representing the allowed user IDs.</value>
|
|
|
|
|
public IReadOnlyList<int> UserIds { get; }
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
protected internal override Task<bool> PerformAsync(CommandContext context)
|
|
|
|
|
{
|
2024-02-15 22:38:48 +00:00
|
|
|
|
if (context is null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(nameof(context));
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-20 17:30:24 +00:00
|
|
|
|
return Task.FromResult(UserIds.Contains(context.Avatar.UserId));
|
2022-12-05 01:43:40 +00:00
|
|
|
|
}
|
|
|
|
|
}
|