Skip to content

Commit 55223ec

Browse files
committed
Added perm search by role/user/id
1 parent ac5d584 commit 55223ec

File tree

2 files changed

+86
-38
lines changed

2 files changed

+86
-38
lines changed

cogs/utility.py

Lines changed: 84 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from json import JSONDecodeError
1111
from textwrap import indent
1212

13-
from discord import Embed, Color, Activity
13+
from discord import Embed, Color, Activity, Role
1414
from discord.enums import ActivityType, Status
1515
from 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))

core/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
class PermissionLevel(IntEnum):
1616
OWNER = 5
1717
ADMINISTRATOR = 4
18+
ADMIN = 4
1819
MODERATOR = 3
20+
MOD = 3
1921
SUPPORTER = 2
2022
REGULAR = 1
2123

0 commit comments

Comments
 (0)