1010from json import JSONDecodeError
1111from textwrap import indent
1212
13- from discord import Embed , Color , Activity
13+ from discord import Embed , Color , Activity , Role
1414from discord .enums import ActivityType , Status
1515from discord .ext import commands
1616
@@ -883,7 +883,7 @@ async def add_perms(self, ctx):
883883
884884 @add_perms .command (name = 'command' )
885885 @checks .has_permissions (PermissionLevel .OWNER )
886- async def add_perms_command (self , ctx , command : str , * , user_or_role : Union [User , str ]):
886+ async def add_perms_command (self , ctx , command : str , * , user_or_role : Union [User , Role , str ]):
887887 """Add a user, role, or everyone permission to use a command."""
888888 if command not in self .bot .all_commands :
889889 embed = Embed (
@@ -899,9 +899,8 @@ async def add_perms_command(self, ctx, command: str, *, user_or_role: Union[User
899899 elif user_or_role in {'everyone' , 'all' }:
900900 value = - 1
901901 else :
902- converter = commands .RoleConverter ()
903- role = await converter .convert (ctx , user_or_role )
904- value = role .id
902+ raise commands .CommandInvokeError ('Invalid user or role.' )
903+
905904 await self .bot .update_perms (self .bot .all_commands [command ].name , value )
906905 embed = Embed (
907906 title = 'Success' ,
@@ -912,9 +911,9 @@ async def add_perms_command(self, ctx, command: str, *, user_or_role: Union[User
912911
913912 @add_perms .command (name = 'level' , aliases = ['group' ])
914913 @checks .has_permissions (PermissionLevel .OWNER )
915- async def add_perms_level (self , ctx , level : str , * , user_or_role : Union [User , str ]):
914+ async def add_perms_level (self , ctx , level : str , * , user_or_role : Union [User , Role , str ]):
916915 """Add a user, role, or everyone permission to use commands of a permission level."""
917- if level .upper () not in PermissionLevel ._member_names_ :
916+ if level .upper () not in PermissionLevel .__members__ :
918917 embed = Embed (
919918 title = 'Error' ,
920919 color = Color .red (),
@@ -928,9 +927,8 @@ async def add_perms_level(self, ctx, level: str, *, user_or_role: Union[User, st
928927 elif user_or_role in {'everyone' , 'all' }:
929928 value = - 1
930929 else :
931- converter = commands .RoleConverter ()
932- role = await converter .convert (ctx , user_or_role )
933- value = role .id
930+ raise commands .CommandInvokeError ('Invalid user or role.' )
931+
934932 await self .bot .update_perms (PermissionLevel [level .upper ()], value )
935933 embed = Embed (
936934 title = 'Success' ,
@@ -949,7 +947,7 @@ async def remove_perms(self, ctx):
949947
950948 @remove_perms .command (name = 'command' )
951949 @checks .has_permissions (PermissionLevel .OWNER )
952- async def remove_perms_command (self , ctx , command : str , * , user_or_role : Union [User , str ]):
950+ async def remove_perms_command (self , ctx , command : str , * , user_or_role : Union [User , Role , str ]):
953951 """Remove a user, role, or everyone permission to use a command."""
954952 if command not in self .bot .all_commands :
955953 embed = Embed (
@@ -965,9 +963,8 @@ async def remove_perms_command(self, ctx, command: str, *, user_or_role: Union[U
965963 elif user_or_role in {'everyone' , 'all' }:
966964 value = - 1
967965 else :
968- converter = commands .RoleConverter ()
969- role = await converter .convert (ctx , user_or_role )
970- value = role .id
966+ raise commands .CommandInvokeError ('Invalid user or role.' )
967+
971968 await self .bot .update_perms (self .bot .all_commands [command ].name , value , add = False )
972969 embed = Embed (
973970 title = 'Success' ,
@@ -978,9 +975,9 @@ async def remove_perms_command(self, ctx, command: str, *, user_or_role: Union[U
978975
979976 @remove_perms .command (name = 'level' , aliases = ['group' ])
980977 @checks .has_permissions (PermissionLevel .OWNER )
981- async def remove_perms_level (self , ctx , level : str , * , user_or_role : Union [User , str ]):
978+ async def remove_perms_level (self , ctx , level : str , * , user_or_role : Union [User , Role , str ]):
982979 """Remove a user, role, or everyone permission to use commands of a permission level."""
983- if level .upper () not in PermissionLevel ._member_names_ :
980+ if level .upper () not in PermissionLevel .__members__ :
984981 embed = Embed (
985982 title = 'Error' ,
986983 color = Color .red (),
@@ -994,9 +991,8 @@ async def remove_perms_level(self, ctx, level: str, *, user_or_role: Union[User,
994991 elif user_or_role in {'everyone' , 'all' }:
995992 value = - 1
996993 else :
997- converter = commands .RoleConverter ()
998- role = await converter .convert (ctx , user_or_role )
999- value = role .id
994+ raise commands .CommandInvokeError ('Invalid user or role.' )
995+
1000996 await self .bot .update_perms (PermissionLevel [level .upper ()], value , add = False )
1001997 embed = Embed (
1002998 title = 'Success' ,
@@ -1007,19 +1003,53 @@ async def remove_perms_level(self, ctx, level: str, *, user_or_role: Union[User,
10071003
10081004 @permissions .group (name = 'get' , invoke_without_command = True )
10091005 @checks .has_permissions (PermissionLevel .OWNER )
1010- async def get_perms (self , ctx ):
1006+ async def get_perms (self , ctx , * , user_or_role : Union [ User , Role , str ] ):
10111007 """View the currently-set permissions."""
1012- cmd = self .bot .get_command ('help' )
1013- await ctx .invoke (cmd , command = 'perms get' )
1008+
1009+ if hasattr (user_or_role , 'id' ):
1010+ value = user_or_role .id
1011+ elif user_or_role in {'everyone' , 'all' }:
1012+ value = - 1
1013+ else :
1014+ raise commands .CommandInvokeError ('Invalid user or role.' )
1015+
1016+ cmds = []
1017+ levels = []
1018+ for cmd in self .bot .commands :
1019+ permissions = self .bot .config .command_permissions .get (cmd .name , [])
1020+ if value in permissions :
1021+ cmds .append (cmd .name )
1022+ for level in PermissionLevel :
1023+ permissions = self .bot .config .level_permissions .get (level .name , [])
1024+ if value in permissions :
1025+ levels .append (level .name )
1026+ mention = user_or_role .name if hasattr (user_or_role , 'name' ) else user_or_role
1027+ desc_cmd = ', ' .join (map (lambda x : f'`{ x } `' , cmds )) if cmds else 'No permission entries found.'
1028+ desc_level = ', ' .join (map (lambda x : f'`{ x } `' , levels )) if levels else 'No permission entries found.'
1029+
1030+ embeds = [
1031+ Embed (
1032+ title = f'{ mention } has permission with the following commands:' ,
1033+ description = desc_cmd ,
1034+ color = self .bot .main_color
1035+ ),
1036+ Embed (
1037+ title = f'{ mention } has permission with the following permission groups:' ,
1038+ description = desc_level ,
1039+ color = self .bot .main_color
1040+ )
1041+ ]
1042+ p_session = PaginatorSession (ctx , * embeds )
1043+ return await p_session .run ()
10141044
10151045 @get_perms .command (name = 'command' )
10161046 @checks .has_permissions (PermissionLevel .OWNER )
10171047 async def get_perms_command (self , ctx , * , command : str = None ):
10181048 """View the currently-set permissions for a command."""
10191049
10201050 def get_command (cmd ):
1021- permissions = self .bot .config .command_permissions .get (cmd .name )
1022- if permissions is None or not permissions :
1051+ permissions = self .bot .config .command_permissions .get (cmd .name , [] )
1052+ if not permissions :
10231053 embed = Embed (
10241054 title = f'Permission entries for command `{ cmd .name } `:' ,
10251055 description = 'No permission entries found.'
@@ -1029,12 +1059,20 @@ def get_command(cmd):
10291059 for perm in permissions :
10301060 if perm == - 1 :
10311061 values .insert (0 , '**everyone**' )
1062+ continue
1063+ member = ctx .guild .get_member (perm )
1064+ if member is not None :
1065+ values .append (member .mention )
1066+ continue
1067+ user = self .bot .get_user (perm )
1068+ if user is not None :
1069+ values .append (user .mention )
1070+ continue
1071+ role = ctx .guild .get_role (perm )
1072+ if role is not None :
1073+ values .append (role .mention )
10321074 else :
1033- user = self .bot .get_user (perm )
1034- if user is not None :
1035- values .append (user .name )
1036- else :
1037- values .append (str (perm ))
1075+ values .append (str (perm ))
10381076
10391077 embed = Embed (
10401078 title = f'Permission entries for command `{ cmd .name } `:' ,
@@ -1066,8 +1104,8 @@ async def get_perms_level(self, ctx, *, level: str = None):
10661104 """View the currently-set permissions for commands of a permission level."""
10671105
10681106 def get_level (perm_level ):
1069- permissions = self .bot .config .level_permissions .get (perm_level .name )
1070- if permissions is None or not permissions :
1107+ permissions = self .bot .config .level_permissions .get (perm_level .name , [] )
1108+ if not permissions :
10711109 embed = Embed (
10721110 title = 'Permission entries for permission '
10731111 f'level `{ perm_level .name } `:' ,
@@ -1078,12 +1116,20 @@ def get_level(perm_level):
10781116 for perm in permissions :
10791117 if perm == - 1 :
10801118 values .insert (0 , '**everyone**' )
1119+ continue
1120+ member = ctx .guild .get_member (perm )
1121+ if member is not None :
1122+ values .append (member .mention )
1123+ continue
1124+ user = self .bot .get_user (perm )
1125+ if user is not None :
1126+ values .append (user .mention )
1127+ continue
1128+ role = ctx .guild .get_role (perm )
1129+ if role is not None :
1130+ values .append (role .mention )
10811131 else :
1082- user = self .bot .get_user (perm )
1083- if user is not None :
1084- values .append (user .name )
1085- else :
1086- values .append (str (perm ))
1132+ values .append (str (perm ))
10871133
10881134 embed = Embed (
10891135 title = f'Permission entries for permission level `{ perm_level .name } `:' ,
@@ -1093,15 +1139,15 @@ def get_level(perm_level):
10931139
10941140 embeds = []
10951141 if level is not None :
1096- if level .upper () not in PermissionLevel ._member_names_ :
1142+ if level .upper () not in PermissionLevel .__members__ :
10971143 embed = Embed (
10981144 title = 'Error' ,
10991145 color = Color .red (),
11001146 description = 'The permission level you are attempting to point '
11011147 f'to does not exist: `{ level } `.'
11021148 )
11031149 return await ctx .send (embed = embed )
1104- embeds .append (get_level (PermissionLevel [level .upper ()]. name ))
1150+ embeds .append (get_level (PermissionLevel [level .upper ()]))
11051151 else :
11061152 for perm_level in PermissionLevel :
11071153 embeds .append (get_level (perm_level ))
0 commit comments