diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/converters.py | 81 | 
1 files changed, 39 insertions, 42 deletions
| diff --git a/bot/converters.py b/bot/converters.py index 21623b597..89fda6cbb 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -2,7 +2,7 @@ from __future__ import annotations  import re  import typing as t -from datetime import datetime, timezone +from datetime import UTC, datetime  from ssl import CertificateError  import dateutil.parser @@ -17,7 +17,7 @@ from pydis_core.utils.regex import DISCORD_INVITE  from bot import exts, instance as bot_instance  from bot.constants import URLs -from bot.errors import InvalidInfraction +from bot.errors import InvalidInfractionError  from bot.exts.info.doc import _inventory_parser  from bot.exts.info.tags import TagIdentifier  from bot.log import get_logger @@ -85,7 +85,8 @@ class Extension(Converter):          if argument in bot_instance.all_extensions:              return argument -        elif (qualified_arg := f"{exts.__name__}.{argument}") in bot_instance.all_extensions: + +        if (qualified_arg := f"{exts.__name__}.{argument}") in bot_instance.all_extensions:              return qualified_arg          matches = [] @@ -100,10 +101,10 @@ class Extension(Converter):                  f":x: `{argument}` is an ambiguous extension name. "                  f"Please use one of the following fully-qualified names.```\n{names}```"              ) -        elif matches: + +        if matches:              return matches[0] -        else: -            raise BadArgument(f":x: Could not find the extension `{argument}`.") +        raise BadArgument(f":x: Could not find the extension `{argument}`.")  class PackageName(Converter): @@ -143,7 +144,7 @@ class ValidURL(Converter):                          f"HTTP GET on `{url}` returned status `{resp.status}`, expected 200"                      )          except CertificateError: -            if url.startswith('https'): +            if url.startswith("https"):                  raise BadArgument(                      f"Got a `CertificateError` for URL `{url}`. Does it support HTTPS?"                  ) @@ -166,7 +167,7 @@ class Inventory(Converter):      """      @staticmethod -    async def convert(ctx: Context, url: str) -> t.Tuple[str, _inventory_parser.InventoryDict]: +    async def convert(ctx: Context, url: str) -> tuple[str, _inventory_parser.InventoryDict]:          """Convert url to Intersphinx inventory URL."""          await ctx.typing()          try: @@ -213,7 +214,7 @@ class Snowflake(IDConverter):          if time < DISCORD_EPOCH_DT:              raise BadArgument(f"{error}: timestamp is before the Discord epoch.") -        elif (datetime.now(timezone.utc) - time).days < -1: +        if (datetime.now(UTC) - time).days < -1:              raise BadArgument(f"{error}: timestamp is too far into the future.")          return snowflake @@ -286,7 +287,7 @@ class Duration(DurationDelta):          The converter supports the same symbols for each unit of time as its parent class.          """          delta = await super().convert(ctx, duration) -        now = datetime.now(timezone.utc) +        now = datetime.now(UTC)          try:              return now + delta @@ -304,7 +305,7 @@ class Age(DurationDelta):          The converter supports the same symbols for each unit of time as its parent class.          """          delta = await super().convert(ctx, duration) -        now = datetime.now(timezone.utc) +        now = datetime.now(UTC)          try:              return now - delta @@ -316,7 +317,7 @@ class OffTopicName(Converter):      """A converter that ensures an added off-topic name is valid."""      ALLOWED_CHARACTERS = r"ABCDEFGHIJKLMNOPQRSTUVWXYZ!?'`-<>\/" -    TRANSLATED_CHARACTERS = "๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐นว๏ผโโ-๏ผ๏ผโงนโงธ" +    TRANSLATED_CHARACTERS = "๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐นว๏ผโโ-๏ผ๏ผโงนโงธ"  # noqa: RUF001      @classmethod      def translate_name(cls, name: str, *, from_unicode: bool = True) -> str: @@ -340,7 +341,7 @@ class OffTopicName(Converter):          if not (2 <= len(argument) <= 96):              raise BadArgument("Channel name must be between 2 and 96 chars long") -        elif not all(c.isalnum() or c in self.ALLOWED_CHARACTERS for c in argument): +        if not all(c.isalnum() or c in self.ALLOWED_CHARACTERS for c in argument):              raise BadArgument(                  "Channel name must only consist of "                  "alphanumeric characters, minus signs or apostrophes." @@ -386,9 +387,9 @@ class ISODateTime(Converter):              raise BadArgument(f"`{datetime_string}` is not a valid ISO-8601 datetime string")          if dt.tzinfo: -            dt = dt.astimezone(timezone.utc) +            dt = dt.astimezone(UTC)          else:  # Without a timezone, assume it represents UTC. -            dt = dt.replace(tzinfo=timezone.utc) +            dt = dt.replace(tzinfo=UTC)          return dt @@ -426,8 +427,8 @@ def _is_an_unambiguous_user_argument(argument: str) -> bool:      has_id_or_mention = bool(IDConverter()._get_id_match(argument) or RE_USER_MENTION.match(argument))      # Check to see if the author passed a username (a discriminator exists) -    argument = argument.removeprefix('@') -    has_username = len(argument) > 5 and argument[-5] == '#' +    argument = argument.removeprefix("@") +    has_username = len(argument) > 5 and argument[-5] == "#"      return has_id_or_mention or has_username @@ -448,8 +449,7 @@ class UnambiguousUser(UserConverter):          """Convert the `argument` to a `discord.User`."""          if _is_an_unambiguous_user_argument(argument):              return await super().convert(ctx, argument) -        else: -            raise BadArgument(AMBIGUOUS_ARGUMENT_MSG.format(argument=argument)) +        raise BadArgument(AMBIGUOUS_ARGUMENT_MSG.format(argument=argument))  class UnambiguousMember(MemberConverter): @@ -464,8 +464,7 @@ class UnambiguousMember(MemberConverter):          """Convert the `argument` to a `discord.Member`."""          if _is_an_unambiguous_user_argument(argument):              return await super().convert(ctx, argument) -        else: -            raise BadArgument(AMBIGUOUS_ARGUMENT_MSG.format(argument=argument)) +        raise BadArgument(AMBIGUOUS_ARGUMENT_MSG.format(argument=argument))  class Infraction(Converter): @@ -476,7 +475,7 @@ class Infraction(Converter):      obtain the most recent infraction by the actor.      """ -    async def convert(self, ctx: Context, arg: str) -> t.Optional[dict]: +    async def convert(self, ctx: Context, arg: str) -> dict | None:          """Attempts to convert `arg` into an infraction `dict`."""          if arg in ("l", "last", "recent"):              params = { @@ -490,32 +489,30 @@ class Infraction(Converter):                  raise BadArgument(                      "Couldn't find most recent infraction; you have never given an infraction."                  ) -            else: -                return infractions[0] +            return infractions[0] -        else: -            try: -                return await ctx.bot.api_client.get(f"bot/infractions/{arg}/expanded") -            except ResponseCodeError as e: -                if e.status == 404: -                    raise InvalidInfraction( -                        converter=Infraction, -                        original=e, -                        infraction_arg=arg -                    ) -                raise e +        try: +            return await ctx.bot.api_client.get(f"bot/infractions/{arg}/expanded") +        except ResponseCodeError as e: +            if e.status == 404: +                raise InvalidInfractionError( +                    converter=Infraction, +                    original=e, +                    infraction_arg=arg +                ) +            raise e  if t.TYPE_CHECKING:      ValidDiscordServerInvite = dict  # noqa: F811 -    ValidFilterListType = str  # noqa: F811 +    ValidFilterListType = str      Extension = str  # noqa: F811      PackageName = str  # noqa: F811      ValidURL = str  # noqa: F811 -    Inventory = t.Tuple[str, _inventory_parser.InventoryDict]  # noqa: F811 +    Inventory = tuple[str, _inventory_parser.InventoryDict]  # noqa: F811      Snowflake = int  # noqa: F811      SourceConverter = SourceType  # noqa: F811 -    DurationDelta = relativedelta  # noqa: F811 +    DurationDelta = relativedelta      Duration = datetime  # noqa: F811      Age = datetime  # noqa: F811      OffTopicName = str  # noqa: F811 @@ -525,7 +522,7 @@ if t.TYPE_CHECKING:      UnambiguousMember = discord.Member  # noqa: F811      Infraction = t.Optional[dict]  # noqa: F811 -Expiry = t.Union[Duration, ISODateTime] -DurationOrExpiry = t.Union[DurationDelta, ISODateTime] -MemberOrUser = t.Union[discord.Member, discord.User] -UnambiguousMemberOrUser = t.Union[UnambiguousMember, UnambiguousUser] +Expiry = Duration | ISODateTime +DurationOrExpiry = DurationDelta | ISODateTime +MemberOrUser = discord.Member | discord.User +UnambiguousMemberOrUser = UnambiguousMember | UnambiguousUser | 
