-
Notifications
You must be signed in to change notification settings - Fork 6
Description
What?
Allow restriction of a command to an arbitrary permission understood by discord (or rather javacord/jda) without having to create a custom Restriction implementation.
Why?
Use cases will most commonly be cases where a bot command reproduces a discord (moderation) functionality and should only be made available to users that have that capability, like:
- Restricting a cleanup command to users with the
MANAGE_MESSAGESpermission. - Restricting a mass timeout/kick/ban command to users with the
MODERATE_MEMBERS/KICK_MEMBERS/BAN_MEMBERSpermission
Providing a functionality like this directly in command-framework will standardize handling. It will allow other code to better inspect the RestrictionChain and from that derive the actual permissions required - this will aid, for example, if slash commands are to be registered with the appropriate default permissions.
What it...
should be
- Provide a class or interface for parameter based restrictions.
- Allow to specify whether the
ADMINISTRATORpermission being present should also be accepted (defaults totrue) - Provide an annotation like
RestrictedToPermission("MANAGE_MESSAGES")orRestrictedToPermission("MANAGE_MESSAGES", acceptAdmin=false)
might be
- Implementation-specific with different annotations / classes / interfaces for Javacord and JDA accepting their respective permission types
- Extensible for custom string-based permission systems (provided a resolver is supplied)
should not be
- anything more than that
Problems / Thoughts
Such a system is not supported with the current annotation / restriction concept as far as I can see, so it will require some thought on how to properly integrate it. Maybe it could be implemented by adding a phase to hook into during creation of the commands where a user-provided bean could transform the command and for example check for custom annotations, parse them and add elements to the restriction chains - but those wouldn't play nicely with the @{All,Any,None}Of annotations.