Skip to content

Commit e4c7db8

Browse files
authored
Implement permissions decorator for cogs. (#237)
1 parent 5b9183e commit e4c7db8

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

discord_slash/client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -876,11 +876,11 @@ def wrapper(cmd):
876876
def permission(self, guild_id: int, permissions: list):
877877
"""
878878
Decorator that add permissions. This will set the permissions for a single guild, you can use it more than once for each command.
879+
879880
:param guild_id: ID of the guild for the permissions.
880881
:type guild_id: int
881-
:param permissions: Permission requirements of the slash command. Default ``None``.
882-
:type permissions: dict
883-
882+
:param permissions: List of permissions to be set for the specified guild.
883+
:type permissions: list
884884
"""
885885

886886
def wrapper(cmd):

discord_slash/cog_ext.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ async def ping(self, ctx: SlashContext):
5050
:param connector: Kwargs connector for the command. Default ``None``.
5151
:type connector: dict
5252
"""
53+
if not permissions:
54+
permissions = {}
5355

5456
def wrapper(cmd):
57+
decorator_permissions = getattr(cmd, "__permissions__", None)
58+
if decorator_permissions:
59+
permissions.update(decorator_permissions)
60+
5561
desc = description or inspect.getdoc(cmd)
5662
if options is None:
5763
opts = manage_commands.generate_options(cmd, desc, connector)
@@ -138,8 +144,14 @@ async def group_say(self, ctx: SlashContext, text: str):
138144
base_description = base_description or base_desc
139145
subcommand_group_description = subcommand_group_description or sub_group_desc
140146
guild_ids = guild_ids if guild_ids else []
147+
if not base_permissions:
148+
base_permissions = {}
141149

142150
def wrapper(cmd):
151+
decorator_permissions = getattr(cmd, "__permissions__", None)
152+
if decorator_permissions:
153+
base_permissions.update(decorator_permissions)
154+
143155
desc = description or inspect.getdoc(cmd)
144156
if options is None:
145157
opts = manage_commands.generate_options(cmd, desc, connector)
@@ -177,6 +189,25 @@ def wrapper(cmd):
177189
return wrapper
178190

179191

192+
def permission(guild_id: int, permissions: list):
193+
"""
194+
Decorator that add permissions. This will set the permissions for a single guild, you can use it more than once for each command.
195+
196+
:param guild_id: ID of the guild for the permissions.
197+
:type guild_id: int
198+
:param permissions: List of permissions to be set for the specified guild.
199+
:type permissions: list
200+
"""
201+
202+
def wrapper(cmd):
203+
if not getattr(cmd, "__permissions__", None):
204+
cmd.__permissions__ = {}
205+
cmd.__permissions__[guild_id] = permissions
206+
return cmd
207+
208+
return wrapper
209+
210+
180211
def cog_component(
181212
*,
182213
messages: typing.Union[int, discord.Message, list] = None,

0 commit comments

Comments
 (0)