@@ -161,9 +161,7 @@ class ObjectConverter(IDConverter[discord.Object]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Object:
|
||||
match = self._get_id_match(argument) or re.match(
|
||||
r"<(?:@(?:!|&)?|#)([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = self._get_id_match(argument) or re.match(r"<(?:@(?:!|&)?|#)([0-9]{15,20})>$", argument)
|
||||
|
||||
if match is None:
|
||||
raise ObjectNotFound(argument)
|
||||
@@ -200,14 +198,10 @@ class MemberConverter(IDConverter[discord.Member]):
|
||||
if len(argument) > 5 and argument[-5] == "#":
|
||||
username, _, discriminator = argument.rpartition("#")
|
||||
members = await guild.query_members(username, limit=100, cache=cache)
|
||||
return discord.utils.get(
|
||||
members, name=username, discriminator=discriminator
|
||||
)
|
||||
return discord.utils.get(members, name=username, discriminator=discriminator)
|
||||
else:
|
||||
members = await guild.query_members(argument, limit=100, cache=cache)
|
||||
return discord.utils.find(
|
||||
lambda m: m.name == argument or m.nick == argument, members
|
||||
)
|
||||
return discord.utils.find(lambda m: m.name == argument or m.nick == argument, members)
|
||||
|
||||
async def query_member_by_id(self, bot, guild, user_id):
|
||||
ws = bot._get_websocket(shard_id=guild.shard_id)
|
||||
@@ -232,9 +226,7 @@ class MemberConverter(IDConverter[discord.Member]):
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Member:
|
||||
bot = ctx.bot
|
||||
match = self._get_id_match(argument) or re.match(
|
||||
r"<@!?([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = self._get_id_match(argument) or re.match(r"<@!?([0-9]{15,20})>$", argument)
|
||||
guild = ctx.guild
|
||||
result = None
|
||||
user_id = None
|
||||
@@ -247,9 +239,7 @@ class MemberConverter(IDConverter[discord.Member]):
|
||||
else:
|
||||
user_id = int(match.group(1))
|
||||
if guild:
|
||||
result = guild.get_member(user_id) or _utils_get(
|
||||
ctx.message.mentions, id=user_id
|
||||
)
|
||||
result = guild.get_member(user_id) or _utils_get(ctx.message.mentions, id=user_id)
|
||||
else:
|
||||
result = _get_from_guilds(bot, "get_member", user_id)
|
||||
|
||||
@@ -289,17 +279,13 @@ class UserConverter(IDConverter[discord.User]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.User:
|
||||
match = self._get_id_match(argument) or re.match(
|
||||
r"<@!?([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = self._get_id_match(argument) or re.match(r"<@!?([0-9]{15,20})>$", argument)
|
||||
result = None
|
||||
state = ctx._state
|
||||
|
||||
if match is not None:
|
||||
user_id = int(match.group(1))
|
||||
result = ctx.bot.get_user(user_id) or _utils_get(
|
||||
ctx.message.mentions, id=user_id
|
||||
)
|
||||
result = ctx.bot.get_user(user_id) or _utils_get(ctx.message.mentions, id=user_id)
|
||||
if result is None:
|
||||
try:
|
||||
result = await ctx.bot.fetch_user(user_id)
|
||||
@@ -347,9 +333,7 @@ class PartialMessageConverter(Converter[discord.PartialMessage]):
|
||||
|
||||
@staticmethod
|
||||
def _get_id_matches(ctx, argument):
|
||||
id_regex = re.compile(
|
||||
r"(?:(?P<channel_id>[0-9]{15,20})-)?(?P<message_id>[0-9]{15,20})$"
|
||||
)
|
||||
id_regex = re.compile(r"(?:(?P<channel_id>[0-9]{15,20})-)?(?P<message_id>[0-9]{15,20})$")
|
||||
link_regex = re.compile(
|
||||
r"https?://(?:(ptb|canary|www)\.)?discord(?:app)?\.com/channels/"
|
||||
r"(?P<guild_id>[0-9]{15,20}|@me)"
|
||||
@@ -371,9 +355,7 @@ class PartialMessageConverter(Converter[discord.PartialMessage]):
|
||||
return guild_id, message_id, channel_id
|
||||
|
||||
@staticmethod
|
||||
def _resolve_channel(
|
||||
ctx, guild_id, channel_id
|
||||
) -> Optional[PartialMessageableChannel]:
|
||||
def _resolve_channel(ctx, guild_id, channel_id) -> Optional[PartialMessageableChannel]:
|
||||
if guild_id is not None:
|
||||
guild = ctx.bot.get_guild(guild_id)
|
||||
if guild is not None and channel_id is not None:
|
||||
@@ -407,9 +389,7 @@ class MessageConverter(IDConverter[discord.Message]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Message:
|
||||
guild_id, message_id, channel_id = PartialMessageConverter._get_id_matches(
|
||||
ctx, argument
|
||||
)
|
||||
guild_id, message_id, channel_id = PartialMessageConverter._get_id_matches(ctx, argument)
|
||||
message = ctx.bot._connection._get_message(message_id)
|
||||
if message:
|
||||
return message
|
||||
@@ -440,19 +420,13 @@ class GuildChannelConverter(IDConverter[discord.abc.GuildChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.abc.GuildChannel:
|
||||
return self._resolve_channel(
|
||||
ctx, argument, "channels", discord.abc.GuildChannel
|
||||
)
|
||||
return self._resolve_channel(ctx, argument, "channels", discord.abc.GuildChannel)
|
||||
|
||||
@staticmethod
|
||||
def _resolve_channel(
|
||||
ctx: Context, argument: str, attribute: str, type: Type[CT]
|
||||
) -> CT:
|
||||
def _resolve_channel(ctx: Context, argument: str, attribute: str, type: Type[CT]) -> CT:
|
||||
bot = ctx.bot
|
||||
|
||||
match = IDConverter._get_id_match(argument) or re.match(
|
||||
r"<#([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = IDConverter._get_id_match(argument) or re.match(r"<#([0-9]{15,20})>$", argument)
|
||||
result = None
|
||||
guild = ctx.guild
|
||||
|
||||
@@ -480,14 +454,10 @@ class GuildChannelConverter(IDConverter[discord.abc.GuildChannel]):
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def _resolve_thread(
|
||||
ctx: Context, argument: str, attribute: str, type: Type[TT]
|
||||
) -> TT:
|
||||
def _resolve_thread(ctx: Context, argument: str, attribute: str, type: Type[TT]) -> TT:
|
||||
bot = ctx.bot
|
||||
|
||||
match = IDConverter._get_id_match(argument) or re.match(
|
||||
r"<#([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = IDConverter._get_id_match(argument) or re.match(r"<#([0-9]{15,20})>$", argument)
|
||||
result = None
|
||||
guild = ctx.guild
|
||||
|
||||
@@ -524,9 +494,7 @@ class TextChannelConverter(IDConverter[discord.TextChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.TextChannel:
|
||||
return GuildChannelConverter._resolve_channel(
|
||||
ctx, argument, "text_channels", discord.TextChannel
|
||||
)
|
||||
return GuildChannelConverter._resolve_channel(ctx, argument, "text_channels", discord.TextChannel)
|
||||
|
||||
|
||||
class VoiceChannelConverter(IDConverter[discord.VoiceChannel]):
|
||||
@@ -546,9 +514,7 @@ class VoiceChannelConverter(IDConverter[discord.VoiceChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.VoiceChannel:
|
||||
return GuildChannelConverter._resolve_channel(
|
||||
ctx, argument, "voice_channels", discord.VoiceChannel
|
||||
)
|
||||
return GuildChannelConverter._resolve_channel(ctx, argument, "voice_channels", discord.VoiceChannel)
|
||||
|
||||
|
||||
class StageChannelConverter(IDConverter[discord.StageChannel]):
|
||||
@@ -567,9 +533,7 @@ class StageChannelConverter(IDConverter[discord.StageChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.StageChannel:
|
||||
return GuildChannelConverter._resolve_channel(
|
||||
ctx, argument, "stage_channels", discord.StageChannel
|
||||
)
|
||||
return GuildChannelConverter._resolve_channel(ctx, argument, "stage_channels", discord.StageChannel)
|
||||
|
||||
|
||||
class CategoryChannelConverter(IDConverter[discord.CategoryChannel]):
|
||||
@@ -589,9 +553,7 @@ class CategoryChannelConverter(IDConverter[discord.CategoryChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.CategoryChannel:
|
||||
return GuildChannelConverter._resolve_channel(
|
||||
ctx, argument, "categories", discord.CategoryChannel
|
||||
)
|
||||
return GuildChannelConverter._resolve_channel(ctx, argument, "categories", discord.CategoryChannel)
|
||||
|
||||
|
||||
class StoreChannelConverter(IDConverter[discord.StoreChannel]):
|
||||
@@ -610,9 +572,7 @@ class StoreChannelConverter(IDConverter[discord.StoreChannel]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.StoreChannel:
|
||||
return GuildChannelConverter._resolve_channel(
|
||||
ctx, argument, "channels", discord.StoreChannel
|
||||
)
|
||||
return GuildChannelConverter._resolve_channel(ctx, argument, "channels", discord.StoreChannel)
|
||||
|
||||
|
||||
class ThreadConverter(IDConverter[discord.Thread]):
|
||||
@@ -630,9 +590,7 @@ class ThreadConverter(IDConverter[discord.Thread]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Thread:
|
||||
return GuildChannelConverter._resolve_thread(
|
||||
ctx, argument, "threads", discord.Thread
|
||||
)
|
||||
return GuildChannelConverter._resolve_thread(ctx, argument, "threads", discord.Thread)
|
||||
|
||||
|
||||
class ColourConverter(Converter[discord.Colour]):
|
||||
@@ -661,9 +619,7 @@ class ColourConverter(Converter[discord.Colour]):
|
||||
Added support for ``rgb`` function and 3-digit hex shortcuts
|
||||
"""
|
||||
|
||||
RGB_REGEX = re.compile(
|
||||
r"rgb\s*\((?P<r>[0-9]{1,3}%?)\s*,\s*(?P<g>[0-9]{1,3}%?)\s*,\s*(?P<b>[0-9]{1,3}%?)\s*\)"
|
||||
)
|
||||
RGB_REGEX = re.compile(r"rgb\s*\((?P<r>[0-9]{1,3}%?)\s*,\s*(?P<g>[0-9]{1,3}%?)\s*,\s*(?P<b>[0-9]{1,3}%?)\s*\)")
|
||||
|
||||
def parse_hex_number(self, argument):
|
||||
arg = "".join(i * 2 for i in argument) if len(argument) == 3 else argument
|
||||
@@ -744,9 +700,7 @@ class RoleConverter(IDConverter[discord.Role]):
|
||||
if not guild:
|
||||
raise NoPrivateMessage()
|
||||
|
||||
match = self._get_id_match(argument) or re.match(
|
||||
r"<@&([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = self._get_id_match(argument) or re.match(r"<@&([0-9]{15,20})>$", argument)
|
||||
if match:
|
||||
result = guild.get_role(int(match.group(1)))
|
||||
else:
|
||||
@@ -825,9 +779,7 @@ class EmojiConverter(IDConverter[discord.Emoji]):
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Emoji:
|
||||
match = self._get_id_match(argument) or re.match(
|
||||
r"<a?:[a-zA-Z0-9\_]{1,32}:([0-9]{15,20})>$", argument
|
||||
)
|
||||
match = self._get_id_match(argument) or re.match(r"<a?:[a-zA-Z0-9\_]{1,32}:([0-9]{15,20})>$", argument)
|
||||
result = None
|
||||
bot = ctx.bot
|
||||
guild = ctx.guild
|
||||
@@ -869,10 +821,7 @@ class PartialEmojiConverter(Converter[discord.PartialEmoji]):
|
||||
emoji_id = int(match.group(3))
|
||||
|
||||
return discord.PartialEmoji.with_state(
|
||||
ctx.bot._connection,
|
||||
animated=emoji_animated,
|
||||
name=emoji_name,
|
||||
id=emoji_id,
|
||||
ctx.bot._connection, animated=emoji_animated, name=emoji_name, id=emoji_id
|
||||
)
|
||||
|
||||
raise PartialEmojiConversionFailure(argument)
|
||||
@@ -957,11 +906,7 @@ class clean_content(Converter[str]):
|
||||
|
||||
def resolve_member(id: int) -> str:
|
||||
m = _utils_get(msg.mentions, id=id) or ctx.guild.get_member(id)
|
||||
return (
|
||||
f"@{m.display_name if self.use_nicknames else m.name}"
|
||||
if m
|
||||
else "@deleted-user"
|
||||
)
|
||||
return f"@{m.display_name if self.use_nicknames else m.name}" if m else "@deleted-user"
|
||||
|
||||
def resolve_role(id: int) -> str:
|
||||
r = _utils_get(msg.role_mentions, id=id) or ctx.guild.get_role(id)
|
||||
@@ -1051,11 +996,7 @@ class Greedy(List[T]):
|
||||
origin = getattr(converter, "__origin__", None)
|
||||
args = getattr(converter, "__args__", ())
|
||||
|
||||
if not (
|
||||
callable(converter)
|
||||
or isinstance(converter, Converter)
|
||||
or origin is not None
|
||||
):
|
||||
if not (callable(converter) or isinstance(converter, Converter) or origin is not None):
|
||||
raise TypeError("Greedy[...] expects a type or a Converter instance.")
|
||||
|
||||
if converter in (str, type(None)) or origin is Greedy:
|
||||
@@ -1103,13 +1044,7 @@ class Option(Generic[T, DT]): # type: ignore
|
||||
"name",
|
||||
)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
default: T = inspect.Parameter.empty,
|
||||
*,
|
||||
description: DT,
|
||||
name: str = discord.utils.MISSING,
|
||||
) -> None:
|
||||
def __init__(self, default: T = inspect.Parameter.empty, *, description: DT, name: str = discord.utils.MISSING) -> None:
|
||||
self.description = description
|
||||
self.default = default
|
||||
self.name: str = name
|
||||
@@ -1117,12 +1052,7 @@ class Option(Generic[T, DT]): # type: ignore
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# Terrible workaround for type checking reasons
|
||||
def Option(
|
||||
default: T = inspect.Parameter.empty,
|
||||
*,
|
||||
description: str,
|
||||
name: str = discord.utils.MISSING,
|
||||
) -> T:
|
||||
def Option(default: T = inspect.Parameter.empty, *, description: str, name: str = discord.utils.MISSING) -> T:
|
||||
...
|
||||
|
||||
|
||||
@@ -1177,9 +1107,7 @@ CONVERTER_MAPPING: Dict[Type[Any], Any] = {
|
||||
}
|
||||
|
||||
|
||||
async def _actual_conversion(
|
||||
ctx: Context, converter, argument: str, param: inspect.Parameter
|
||||
):
|
||||
async def _actual_conversion(ctx: Context, converter, argument: str, param: inspect.Parameter):
|
||||
if converter is bool:
|
||||
return _convert_to_bool(argument)
|
||||
|
||||
@@ -1188,9 +1116,7 @@ async def _actual_conversion(
|
||||
except AttributeError:
|
||||
pass
|
||||
else:
|
||||
if module is not None and (
|
||||
module.startswith("discord.") and not module.endswith("converter")
|
||||
):
|
||||
if module is not None and (module.startswith("discord.") and not module.endswith("converter")):
|
||||
converter = CONVERTER_MAPPING.get(converter, converter)
|
||||
|
||||
try:
|
||||
@@ -1216,14 +1142,10 @@ async def _actual_conversion(
|
||||
except AttributeError:
|
||||
name = converter.__class__.__name__
|
||||
|
||||
raise BadArgument(
|
||||
f'Converting to "{name}" failed for parameter "{param.name}".'
|
||||
) from exc
|
||||
raise BadArgument(f'Converting to "{name}" failed for parameter "{param.name}".') from exc
|
||||
|
||||
|
||||
async def run_converters(
|
||||
ctx: Context, converter, argument: str, param: inspect.Parameter
|
||||
):
|
||||
async def run_converters(ctx: Context, converter, argument: str, param: inspect.Parameter):
|
||||
"""|coro|
|
||||
|
||||
Runs converters for a given converter, argument, and parameter.
|
||||
|
Reference in New Issue
Block a user