|
- using Discord;
- using Discord.Interactions;
- using Discord.WebSocket;
- using System;
- using System.Threading.Tasks;
-
- namespace InteractionFramework.Attributes
- {
- internal class DoUserCheck : PreconditionAttribute
- {
- public override Task<PreconditionResult> CheckRequirementsAsync(IInteractionContext context, ICommandInfo commandInfo, IServiceProvider services)
- {
- // Check if the component matches the target properly.
- if (context.Interaction is not SocketMessageComponent componentContext)
- return Task.FromResult(PreconditionResult.FromError("Context unrecognized as component context."));
-
- else
- {
- // The approach here entirely depends on how you construct your custom ID. In this case, the format is:
- // unique-name:*,*
-
- // here the name and wildcards are split by ':'
- var param = componentContext.Data.CustomId.Split(':');
-
- // here we determine that we should always check for the first ',' present.
- // This will deal with additional wildcards by always selecting the first wildcard present.
- if (param.Length > 1 && ulong.TryParse(param[1].Split(',')[0], out ulong id))
- return (context.User.Id == id)
- // If the user ID
- ? Task.FromResult(PreconditionResult.FromSuccess())
- : Task.FromResult(PreconditionResult.FromError("User ID does not match component ID!"));
-
- else return Task.FromResult(PreconditionResult.FromError("Parse cannot be done if no userID exists."));
- }
- }
- }
- }
|