* initial * Interaction glossary entry * Sharded Interaction sample * Renames into solution * Debugging samples * Modify target location for webhookclient * Finalizing docs work, resolving docfx errors. * Adding threaduser to user chart * Add branch info to readme. * Edits to user chart * Resolve format for glossary entries * Patch sln target * Issue with file naming fixed * Patch 1/x for builds * Appending suggestions
38 lines
1.7 KiB
C#
38 lines
1.7 KiB
C#
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."));
|
|
}
|
|
}
|
|
}
|
|
}
|