From 115083b18bf6166f399da57fb7063a4671559b87 Mon Sep 17 00:00:00 2001 From: AA Date: Sun, 30 Oct 2022 15:00:21 -0700 Subject: [PATCH] Case-Insensitive SelfRole (#3865) Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com> Co-authored-by: Flame442 <34169552+Flame442@users.noreply.github.com> --- redbot/cogs/admin/converters.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/redbot/cogs/admin/converters.py b/redbot/cogs/admin/converters.py index 5a1cb800d..549558934 100644 --- a/redbot/cogs/admin/converters.py +++ b/redbot/cogs/admin/converters.py @@ -1,6 +1,7 @@ import discord from redbot.core import commands from redbot.core.i18n import Translator +from redbot.core.utils import AsyncIter _ = Translator("AdminConverters", __file__) @@ -11,13 +12,33 @@ class SelfRole(commands.Converter): if admin is None: raise commands.BadArgument(_("The Admin cog is not loaded.")) - role_converter = commands.RoleConverter() - role = await role_converter.convert(ctx, arg) - selfroles = await admin.config.guild(ctx.guild).selfroles() + role_converter = commands.RoleConverter() - if role.id not in selfroles: + pool = set() + async for role_id in AsyncIter(selfroles, steps=100): + role = ctx.guild.get_role(role_id) + if role is None: + continue + if role.name.casefold() == arg.casefold(): + pool.add(role) + + if not pool: + role = await role_converter.convert(ctx, arg) + if role.id not in selfroles: + raise commands.BadArgument( + _('The role "{role_name}" is not a valid selfrole.').format( + role_name=role.name + ) + ) + elif len(pool) > 1: raise commands.BadArgument( - _('The role "{role_name}" is not a valid selfrole.').format(role_name=role.name) + _( + "This selfrole has more than one case insensitive match. " + "Please ask a moderator to resolve the ambiguity, or " + "use the role ID to reference the role." + ) ) + else: + role = pool.pop() return role