diff options
| author | 2023-08-26 12:07:46 +0200 | |
|---|---|---|
| committer | 2023-08-26 12:07:46 +0200 | |
| commit | ec82d206d0184033907652112acd13db9daf4c34 (patch) | |
| tree | 69943ca4dda8238df5a9da64d925d5f24b345983 | |
| parent | Remove call to the fixup reusable workflow (#2731) (diff) | |
| parent | apply white space around operators (diff) | |
Merge pull request #2685 from python-discord/bump-to-pydis-core-10
Bump pydis_core to v10.1.0
Diffstat (limited to '')
25 files changed, 160 insertions, 271 deletions
| diff --git a/bot/exts/filtering/filtering.py b/bot/exts/filtering/filtering.py index 173b220f8..844f2942e 100644 --- a/bot/exts/filtering/filtering.py +++ b/bot/exts/filtering/filtering.py @@ -18,7 +18,7 @@ from discord.ext import commands, tasks  from discord.ext.commands import BadArgument, Cog, Context, command, has_any_role  from pydis_core.site_api import ResponseCodeError  from pydis_core.utils import scheduling -from pydis_core.utils.paste_service import PasteTooLongError, PasteUploadError, send_to_paste_service +from pydis_core.utils.paste_service import PasteFile, PasteTooLongError, PasteUploadError, send_to_paste_service  import bot  import bot.exts.filtering._ui.filter as filters_ui @@ -1464,14 +1464,14 @@ class Filtering(Cog):              if e.code != 50035:  # Content too long                  raise              report = discord.utils.remove_markdown(report) +            file = PasteFile(content=report, lexer="text")              try:                  resp = await send_to_paste_service( -                    contents=report, +                    files=[file],                      http_session=self.bot.http_session, -                    lexer="text",                      paste_url=BaseURLs.paste_url,                  ) -                paste_resp = resp["link"] +                paste_resp = resp.link              except (ValueError, PasteTooLongError, PasteUploadError):                  paste_resp = ":warning: Failed to upload report to paste service"              file_buffer = io.StringIO(report) diff --git a/bot/exts/info/information.py b/bot/exts/info/information.py index ab9185867..c7ee9065c 100644 --- a/bot/exts/info/information.py +++ b/bot/exts/info/information.py @@ -11,6 +11,7 @@ from discord import AllowedMentions, Colour, Embed, Guild, Message, Role  from discord.ext.commands import BucketType, Cog, Context, Paginator, command, group, has_any_role  from discord.utils import escape_markdown  from pydis_core.site_api import ResponseCodeError +from pydis_core.utils.members import get_or_fetch_member  from bot import constants  from bot.bot import Bot @@ -22,7 +23,6 @@ from bot.pagination import LinePaginator  from bot.utils import time  from bot.utils.channel import is_mod_channel, is_staff_channel  from bot.utils.checks import cooldown_with_role_bypass, has_no_roles_check, in_whitelist_check -from bot.utils.members import get_or_fetch_member  log = get_logger(__name__) diff --git a/bot/exts/info/patreon.py b/bot/exts/info/patreon.py index e3c8c07d1..948568101 100644 --- a/bot/exts/info/patreon.py +++ b/bot/exts/info/patreon.py @@ -3,13 +3,13 @@ import datetime  import arrow  import discord  from discord.ext import commands, tasks +from pydis_core.utils.channel import get_or_fetch_channel  from bot import constants  from bot.bot import Bot  from bot.constants import Channels, Guild, Roles, STAFF_PARTNERS_COMMUNITY_ROLES  from bot.decorators import in_whitelist  from bot.log import get_logger -from bot.utils.channel import get_or_fetch_channel  log = get_logger(__name__) @@ -64,7 +64,7 @@ class Patreon(commands.Cog):              f":tada: {after.mention} just became a **tier {new_patreon_tier}** patron!\n"              "Support us on Patreon: https://pydis.com/patreon"          ) -        channel = await get_or_fetch_channel(Channels.meta) +        channel = await get_or_fetch_channel(self.bot, Channels.meta)          await channel.send(message)      async def send_current_supporters(self, channel: discord.abc.Messageable, automatic: bool = False) -> None: @@ -120,7 +120,7 @@ class Patreon(commands.Cog):          """A loop running daily to see if it's the first of the month. If so call `self.send_current_supporters()`."""          now = arrow.utcnow()          if now.day == 1: -            meta_channel = await get_or_fetch_channel(Channels.meta) +            meta_channel = await get_or_fetch_channel(self.bot, Channels.meta)              await self.send_current_supporters(meta_channel, automatic=True) diff --git a/bot/exts/info/pep.py b/bot/exts/info/pep.py index 3854d02d5..08ccbddc5 100644 --- a/bot/exts/info/pep.py +++ b/bot/exts/info/pep.py @@ -4,11 +4,11 @@ from io import StringIO  from discord import Colour, Embed  from discord.ext.commands import Cog, Context, command +from pydis_core.utils.caching import AsyncCache  from bot.bot import Bot  from bot.constants import Keys  from bot.log import get_logger -from bot.utils.caching import AsyncCache  log = get_logger(__name__) diff --git a/bot/exts/info/subscribe.py b/bot/exts/info/subscribe.py index 4f57f7c0f..048884587 100644 --- a/bot/exts/info/subscribe.py +++ b/bot/exts/info/subscribe.py @@ -5,12 +5,12 @@ import discord  from discord.ext import commands  from discord.interactions import Interaction  from pydis_core.utils import members +from pydis_core.utils.channel import get_or_fetch_channel  from bot import constants  from bot.bot import Bot  from bot.decorators import redirect_output  from bot.log import get_logger -from bot.utils.channel import get_or_fetch_channel  @dataclass(frozen=True) @@ -198,7 +198,7 @@ class Subscribe(commands.Cog):          If the initial message isn't found, a new one will be created.          This message will always be needed to attach the persistent view to it          """ -        roles_channel: discord.TextChannel = await get_or_fetch_channel(constants.Channels.roles) +        roles_channel: discord.TextChannel = await get_or_fetch_channel(self.bot, constants.Channels.roles)          async for message in roles_channel.history(limit=30):              if message.content == self.SELF_ASSIGNABLE_ROLES_MESSAGE: diff --git a/bot/exts/moderation/dm_relay.py b/bot/exts/moderation/dm_relay.py index e8c5a5428..03b18e46a 100644 --- a/bot/exts/moderation/dm_relay.py +++ b/bot/exts/moderation/dm_relay.py @@ -1,6 +1,6 @@  import discord  from discord.ext.commands import Cog, Context, command, has_any_role -from pydis_core.utils.paste_service import PasteTooLongError, PasteUploadError, send_to_paste_service +from pydis_core.utils.paste_service import PasteFile, PasteTooLongError, PasteUploadError, send_to_paste_service  from bot.bot import Bot  from bot.constants import BaseURLs, Emojis, MODERATION_ROLES @@ -53,14 +53,14 @@ class DMRelay(Cog):              f"User: {user} ({user.id})\n"              f"Channel ID: {user.dm_channel.id}\n\n"          ) +        file = PasteFile(content=metadata + output, lexer="text")          try:              resp = await send_to_paste_service( -                contents=metadata + output, -                lexer="text", +                files=[file],                  http_session=self.bot.http_session,                  paste_url=BaseURLs.paste_url,              ) -            message = resp["link"] +            message = resp.link          except PasteTooLongError:              message = f"{Emojis.cross_mark} Too long to upload to paste service."          except PasteUploadError: diff --git a/bot/exts/moderation/infraction/infractions.py b/bot/exts/moderation/infraction/infractions.py index 15d80cd58..6af2571de 100644 --- a/bot/exts/moderation/infraction/infractions.py +++ b/bot/exts/moderation/infraction/infractions.py @@ -8,6 +8,7 @@ from dateutil.relativedelta import relativedelta  from discord import Member  from discord.ext import commands  from discord.ext.commands import Context, command +from pydis_core.utils.members import get_or_fetch_member  from bot import constants  from bot.bot import Bot @@ -18,7 +19,6 @@ from bot.exts.moderation.infraction import _utils  from bot.exts.moderation.infraction._scheduler import InfractionScheduler  from bot.log import get_logger  from bot.utils.channel import is_mod_channel -from bot.utils.members import get_or_fetch_member  from bot.utils.messages import format_user  log = get_logger(__name__) diff --git a/bot/exts/moderation/infraction/management.py b/bot/exts/moderation/infraction/management.py index bff27840b..6af523bb0 100644 --- a/bot/exts/moderation/infraction/management.py +++ b/bot/exts/moderation/infraction/management.py @@ -6,6 +6,7 @@ import discord  from discord.ext import commands  from discord.ext.commands import Context  from discord.utils import escape_markdown +from pydis_core.utils.members import get_or_fetch_member  from bot import constants  from bot.bot import Bot @@ -20,7 +21,6 @@ from bot.log import get_logger  from bot.pagination import LinePaginator  from bot.utils import messages, time  from bot.utils.channel import is_in_category, is_mod_channel -from bot.utils.members import get_or_fetch_member  from bot.utils.time import unpack_duration  log = get_logger(__name__) diff --git a/bot/exts/moderation/infraction/superstarify.py b/bot/exts/moderation/infraction/superstarify.py index 7de4d08b0..006334755 100644 --- a/bot/exts/moderation/infraction/superstarify.py +++ b/bot/exts/moderation/infraction/superstarify.py @@ -6,6 +6,7 @@ from pathlib import Path  from discord import Embed, Member  from discord.ext.commands import Cog, Context, command, has_any_role  from discord.utils import escape_markdown +from pydis_core.utils.members import get_or_fetch_member  from bot import constants  from bot.bot import Bot @@ -15,7 +16,6 @@ from bot.exts.moderation.infraction import _utils  from bot.exts.moderation.infraction._scheduler import InfractionScheduler  from bot.log import get_logger  from bot.utils import time -from bot.utils.members import get_or_fetch_member  from bot.utils.messages import format_user  log = get_logger(__name__) diff --git a/bot/exts/moderation/metabase.py b/bot/exts/moderation/metabase.py index 42e2342b5..cfb4f5f71 100644 --- a/bot/exts/moderation/metabase.py +++ b/bot/exts/moderation/metabase.py @@ -9,7 +9,7 @@ from aiohttp.client_exceptions import ClientResponseError  from arrow import Arrow  from async_rediscache import RedisCache  from discord.ext.commands import Cog, Context, group, has_any_role -from pydis_core.utils.paste_service import PasteTooLongError, PasteUploadError, send_to_paste_service +from pydis_core.utils.paste_service import PasteFile, PasteTooLongError, PasteUploadError, send_to_paste_service  from pydis_core.utils.scheduling import Scheduler  from bot.bot import Bot @@ -141,10 +141,10 @@ class Metabase(Cog):                  # Format it nicely for human eyes                  out = json.dumps(out, indent=4, sort_keys=True) +        file = PasteFile(content=out, lexer=extension)          try:              resp = await send_to_paste_service( -                contents=out, -                lexer=extension, +                files=[file],                  http_session=self.bot.http_session,                  paste_url=BaseURLs.paste_url,              ) @@ -153,7 +153,7 @@ class Metabase(Cog):          except PasteUploadError:              message = f":x: {ctx.author.mention} Failed to upload to paste service."          else: -            message = f":+1: {ctx.author.mention} Here's your link: {resp['link']}" +            message = f":+1: {ctx.author.mention} Here's your link: {resp.link}"          await ctx.send(              f"{message}\nYou can also access this data within internal eval by doing: " diff --git a/bot/exts/moderation/modpings.py b/bot/exts/moderation/modpings.py index ca05f2c25..002bc4cfe 100644 --- a/bot/exts/moderation/modpings.py +++ b/bot/exts/moderation/modpings.py @@ -6,13 +6,13 @@ from async_rediscache import RedisCache  from dateutil.parser import isoparse, parse as dateutil_parse  from discord import Member  from discord.ext.commands import Cog, Context, group, has_any_role +from pydis_core.utils.members import get_or_fetch_member  from pydis_core.utils.scheduling import Scheduler  from bot.bot import Bot  from bot.constants import Emojis, Guild, MODERATION_ROLES, Roles  from bot.converters import Expiry  from bot.log import get_logger -from bot.utils.members import get_or_fetch_member  from bot.utils.time import TimestampFormats, discord_timestamp  log = get_logger(__name__) diff --git a/bot/exts/moderation/stream.py b/bot/exts/moderation/stream.py index 6cc5c4c51..6ffae1e6e 100644 --- a/bot/exts/moderation/stream.py +++ b/bot/exts/moderation/stream.py @@ -7,6 +7,7 @@ from arrow import Arrow  from async_rediscache import RedisCache  from discord.ext import commands  from pydis_core.utils import scheduling +from pydis_core.utils.members import get_or_fetch_member  from bot.bot import Bot  from bot.constants import ( @@ -22,7 +23,6 @@ from bot.converters import Expiry  from bot.log import get_logger  from bot.pagination import LinePaginator  from bot.utils import time -from bot.utils.members import get_or_fetch_member  log = get_logger(__name__) diff --git a/bot/exts/moderation/watchchannels/_watchchannel.py b/bot/exts/moderation/watchchannels/_watchchannel.py index 57a64f9d0..fb75d525d 100644 --- a/bot/exts/moderation/watchchannels/_watchchannel.py +++ b/bot/exts/moderation/watchchannels/_watchchannel.py @@ -11,6 +11,8 @@ from discord import Color, DMChannel, Embed, HTTPException, Message, errors  from discord.ext.commands import Cog, Context  from pydis_core.site_api import ResponseCodeError  from pydis_core.utils import scheduling +from pydis_core.utils.channel import get_or_fetch_channel +from pydis_core.utils.members import get_or_fetch_member  from bot.bot import Bot  from bot.constants import BigBrother as BigBrotherConfig, Guild as GuildConfig, Icons @@ -20,8 +22,6 @@ from bot.exts.moderation.modlog import ModLog  from bot.log import CustomLogger, get_logger  from bot.pagination import LinePaginator  from bot.utils import CogABCMeta, messages, time -from bot.utils.channel import get_or_fetch_channel -from bot.utils.members import get_or_fetch_member  log = get_logger(__name__) @@ -98,7 +98,7 @@ class WatchChannel(metaclass=CogABCMeta):          await self.bot.wait_until_guild_available()          try: -            self.channel = await get_or_fetch_channel(self.destination) +            self.channel = await get_or_fetch_channel(self.bot, self.destination)          except HTTPException:              self.log.exception(f"Failed to retrieve the text channel with id `{self.destination}`") diff --git a/bot/exts/recruitment/talentpool/_cog.py b/bot/exts/recruitment/talentpool/_cog.py index 547de4cc9..9c180b5ab 100644 --- a/bot/exts/recruitment/talentpool/_cog.py +++ b/bot/exts/recruitment/talentpool/_cog.py @@ -9,6 +9,8 @@ from discord import Color, Embed, Member, PartialMessage, RawReactionActionEvent  from discord.ext import commands, tasks  from discord.ext.commands import BadArgument, Cog, Context, group, has_any_role  from pydis_core.site_api import ResponseCodeError +from pydis_core.utils.channel import get_or_fetch_channel +from pydis_core.utils.members import get_or_fetch_member  from bot.bot import Bot  from bot.constants import Bot as BotConfig, Channels, Emojis, Guild, MODERATION_ROLES, Roles, STAFF_ROLES @@ -18,8 +20,6 @@ from bot.exts.recruitment.talentpool._review import Reviewer  from bot.log import get_logger  from bot.pagination import LinePaginator  from bot.utils import time -from bot.utils.channel import get_or_fetch_channel -from bot.utils.members import get_or_fetch_member  AUTOREVIEW_ENABLED_KEY = "autoreview_enabled"  REASON_MAX_CHARS = 1000 @@ -146,7 +146,7 @@ class TalentPool(Cog, name="Talentpool"):              days=DAYS_UNTIL_INACTIVE          ) -        nomination_discussion = await get_or_fetch_channel(Channels.nomination_discussion) +        nomination_discussion = await get_or_fetch_channel(self.bot, Channels.nomination_discussion)          for nomination in nominations:              if messages_per_user[nomination.user_id] > 0:                  continue @@ -553,7 +553,7 @@ class TalentPool(Cog, name="Talentpool"):      async def on_member_ban(self, guild: Guild, user: MemberOrUser) -> None:          """Remove `user` from the talent pool after they are banned."""          if await self.end_nomination(user.id, "Automatic removal: User was banned"): -            nomination_discussion = await get_or_fetch_channel(Channels.nomination_discussion) +            nomination_discussion = await get_or_fetch_channel(self.bot, Channels.nomination_discussion)              await nomination_discussion.send(                  f":warning: <@{user.id}> ({user.id})"                  " was removed from the talentpool due to being banned." @@ -614,7 +614,7 @@ class TalentPool(Cog, name="Talentpool"):          if nomination.thread_id:              try: -                thread = await get_or_fetch_channel(nomination.thread_id) +                thread = await get_or_fetch_channel(self.bot, nomination.thread_id)              except discord.HTTPException:                  thread_jump_url = "*Not found*"              else: diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index 241656853..fc48809c0 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -11,14 +11,14 @@ import discord  from async_rediscache import RedisCache  from discord import Embed, Emoji, Member, Message, NotFound, PartialMessage, TextChannel  from pydis_core.site_api import ResponseCodeError +from pydis_core.utils.channel import get_or_fetch_channel +from pydis_core.utils.members import get_or_fetch_member  from bot.bot import Bot  from bot.constants import Channels, Colours, Emojis, Guild, Roles  from bot.exts.recruitment.talentpool._api import Nomination, NominationAPI  from bot.log import get_logger  from bot.utils import time -from bot.utils.channel import get_or_fetch_channel -from bot.utils.members import get_or_fetch_member  from bot.utils.messages import count_unique_users_reaction  if typing.TYPE_CHECKING: @@ -502,7 +502,7 @@ class Reviewer:              if nomination.thread_id is None:                  continue              try: -                thread = await get_or_fetch_channel(nomination.thread_id) +                thread = await get_or_fetch_channel(self.bot, nomination.thread_id)              except discord.HTTPException:                  # Nothing to do here                  pass diff --git a/bot/exts/utils/internal.py b/bot/exts/utils/internal.py index f2354983f..ea27a5f50 100644 --- a/bot/exts/utils/internal.py +++ b/bot/exts/utils/internal.py @@ -11,7 +11,7 @@ from typing import Any  import arrow  import discord  from discord.ext.commands import Cog, Context, group, has_any_role, is_owner -from pydis_core.utils.paste_service import PasteTooLongError, PasteUploadError, send_to_paste_service +from pydis_core.utils.paste_service import PasteFile, PasteTooLongError, PasteUploadError, send_to_paste_service  from bot.bot import Bot  from bot.constants import BaseURLs, DEBUG_MODE, Roles @@ -195,10 +195,10 @@ async def func():  # (None,) -> Any              truncate_index = newline_truncate_index          if len(out) > truncate_index: +            file = PasteFile(content=out)              try:                  resp = await send_to_paste_service( -                    contents=out, -                    lexer="python", +                    files=[file],                      http_session=self.bot.http_session,                      paste_url=BaseURLs.paste_url,                  ) @@ -207,7 +207,7 @@ async def func():  # (None,) -> Any              except PasteUploadError:                  paste_text = "failed to upload contents to paste service."              else: -                paste_text = f"full contents at {resp['link']}" +                paste_text = f"full contents at {resp.link}"              await ctx.send(                  f"```py\n{out[:truncate_index]}\n```" diff --git a/bot/exts/utils/reminders.py b/bot/exts/utils/reminders.py index 8b0cbed77..fcf291d1b 100644 --- a/bot/exts/utils/reminders.py +++ b/bot/exts/utils/reminders.py @@ -9,6 +9,7 @@ from dateutil.parser import isoparse  from discord.ext.commands import Cog, Context, Greedy, group  from pydis_core.site_api import ResponseCodeError  from pydis_core.utils import scheduling +from pydis_core.utils.members import get_or_fetch_member  from pydis_core.utils.scheduling import Scheduler  from bot.bot import Bot @@ -29,7 +30,6 @@ from bot.pagination import LinePaginator  from bot.utils import time  from bot.utils.checks import has_any_role_check, has_no_roles_check  from bot.utils.lock import lock_arg -from bot.utils.members import get_or_fetch_member  from bot.utils.messages import send_denial  log = get_logger(__name__) diff --git a/bot/exts/utils/snekbox/_cog.py b/bot/exts/utils/snekbox/_cog.py index 0a3fbc62b..842991440 100644 --- a/bot/exts/utils/snekbox/_cog.py +++ b/bot/exts/utils/snekbox/_cog.py @@ -11,6 +11,7 @@ from typing import Literal, NamedTuple, TYPE_CHECKING  from discord import AllowedMentions, HTTPException, Interaction, Message, NotFound, Reaction, User, enums, ui  from discord.ext.commands import Cog, Command, Context, Converter, command, guild_only  from pydis_core.utils import interactions, paste_service +from pydis_core.utils.paste_service import PasteFile, send_to_paste_service  from pydis_core.utils.regex import FORMATTED_CODE_REGEX, RAW_CODE_REGEX  from bot.bot import Bot @@ -87,6 +88,7 @@ REDO_TIMEOUT = 30  SupportedPythonVersions = Literal["3.11"] +  class FilteredFiles(NamedTuple):      allowed: list[FileAttachment]      blocked: list[FileAttachment] @@ -206,14 +208,14 @@ class Snekbox(Cog):          """Upload the job's output to a paste service and return a URL to it if successful."""          log.trace("Uploading full output to paste service...") +        file = PasteFile(content=output, lexer="text")          try: -            paste_link = await paste_service.send_to_paste_service( -                contents=output, -                lexer="text", +            paste_response = await send_to_paste_service( +                files=[file],                  http_session=self.bot.http_session,                  paste_url=BaseURLs.paste_url,              ) -            return paste_link["link"] +            return paste_response.link          except paste_service.PasteTooLongError:              return "too long to upload"          except paste_service.PasteUploadError: diff --git a/bot/exts/utils/thread_bumper.py b/bot/exts/utils/thread_bumper.py index e6c47c1ba..c2bf0f39c 100644 --- a/bot/exts/utils/thread_bumper.py +++ b/bot/exts/utils/thread_bumper.py @@ -69,7 +69,7 @@ class ThreadBumper(commands.Cog):          threads_to_maybe_bump = []          for thread_id in await self.bot.api_client.get(THREAD_BUMP_ENDPOINT):              try: -                thread = await channel.get_or_fetch_channel(thread_id) +                thread = await channel.get_or_fetch_channel(self.bot, thread_id)              except discord.NotFound:                  log.info("Thread %d has been deleted, removing from bumped threads.", thread_id)                  await self.bot.api_client.delete(f"{THREAD_BUMP_ENDPOINT}/{thread_id}") diff --git a/bot/utils/caching.py b/bot/utils/caching.py deleted file mode 100644 index 2d0e077ec..000000000 --- a/bot/utils/caching.py +++ /dev/null @@ -1,42 +0,0 @@ -import functools -from collections import OrderedDict -from collections.abc import Callable -from typing import Any - - -class AsyncCache: -    """ -    LRU cache implementation for coroutines. - -    Once the cache exceeds the maximum size, keys are deleted in FIFO order. - -    An offset may be optionally provided to be applied to the coroutine's arguments when creating the cache key. -    """ - -    def __init__(self, max_size: int = 128): -        self._cache = OrderedDict() -        self._max_size = max_size - -    def __call__(self, arg_offset: int = 0) -> Callable: -        """Decorator for async cache.""" - -        def decorator(function: Callable) -> Callable: -            """Define the async cache decorator.""" - -            @functools.wraps(function) -            async def wrapper(*args) -> Any: -                """Decorator wrapper for the caching logic.""" -                key = args[arg_offset:] - -                if key not in self._cache: -                    if len(self._cache) > self._max_size: -                        self._cache.popitem(last=False) - -                    self._cache[key] = await function(*args) -                return self._cache[key] -            return wrapper -        return decorator - -    def clear(self) -> None: -        """Clear cache instance.""" -        self._cache.clear() diff --git a/bot/utils/channel.py b/bot/utils/channel.py index 05afbe009..b819237c4 100644 --- a/bot/utils/channel.py +++ b/bot/utils/channel.py @@ -44,18 +44,3 @@ def is_staff_channel(channel: discord.TextChannel) -> bool:  def is_in_category(channel: discord.TextChannel, category_id: int) -> bool:      """Return True if `channel` is within a category with `category_id`."""      return getattr(channel, "category_id", None) == category_id - - -async def get_or_fetch_channel( -        channel_id: int -) -> discord.abc.GuildChannel | discord.abc.PrivateChannel | discord.Thread: -    """Attempt to get or fetch a channel and return it.""" -    log.trace(f"Getting the channel {channel_id}.") - -    channel = bot.instance.get_channel(channel_id) -    if not channel: -        log.debug(f"Channel {channel_id} is not in cache; fetching from API.") -        channel = await bot.instance.fetch_channel(channel_id) - -    log.trace(f"Channel #{channel} ({channel_id}) retrieved.") -    return channel diff --git a/bot/utils/members.py b/bot/utils/members.py deleted file mode 100644 index 08ee78504..000000000 --- a/bot/utils/members.py +++ /dev/null @@ -1,48 +0,0 @@ -import typing as t - -import discord - -from bot.log import get_logger - -log = get_logger(__name__) - - -async def get_or_fetch_member(guild: discord.Guild, member_id: int) -> discord.Member | None: -    """ -    Attempt to get a member from cache; on failure fetch from the API. - -    Return `None` to indicate the member could not be found. -    """ -    if member := guild.get_member(member_id): -        log.trace("%s retrieved from cache.", member) -    else: -        try: -            member = await guild.fetch_member(member_id) -        except discord.errors.NotFound: -            log.trace("Failed to fetch %d from API.", member_id) -            return None -        log.trace("%s fetched from API.", member) -    return member - - -async def handle_role_change( -    member: discord.Member, -    coro: t.Callable[..., t.Coroutine], -    role: discord.Role -) -> None: -    """ -    Change `member`'s cooldown role via awaiting `coro` and handle errors. - -    `coro` is intended to be `discord.Member.add_roles` or `discord.Member.remove_roles`. -    """ -    try: -        await coro(role) -    except discord.NotFound: -        log.debug(f"Failed to change role for {member} ({member.id}): member not found") -    except discord.Forbidden: -        log.debug( -            f"Forbidden to change role for {member} ({member.id}); " -            f"possibly due to role hierarchy" -        ) -    except discord.HTTPException as e: -        log.error(f"Failed to change role for {member} ({member.id}): {e.status} {e.code}") diff --git a/bot/utils/messages.py b/bot/utils/messages.py index 175d4d4b8..4febf09dc 100644 --- a/bot/utils/messages.py +++ b/bot/utils/messages.py @@ -204,21 +204,6 @@ async def count_unique_users_reaction(      return len(unique_users) -async def pin_no_system_message(message: discord.Message) -> bool: -    """Pin the given message, wait a couple of seconds and try to delete the system message.""" -    await message.pin() - -    # Make sure that we give it enough time to deliver the message -    await asyncio.sleep(2) -    # Search for the system message in the last 10 messages -    async for historical_message in message.channel.history(limit=10): -        if historical_message.type == discord.MessageType.pins_add: -            await historical_message.delete() -            return True - -    return False - -  def sub_clyde(username: str | None) -> str | None:      """      Replace "e"/"E" in any "clyde" in `username` with a Cyrillic "е"/"Е" and return the new string. diff --git a/poetry.lock b/poetry.lock index 6a5298ae6..660631755 100644 --- a/poetry.lock +++ b/poetry.lock @@ -335,13 +335,13 @@ pycparser = "*"  [[package]]  name = "cfgv" -version = "3.3.1" +version = "3.4.0"  description = "Validate configuration and produce human readable error messages."  optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8"  files = [ -    {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, -    {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +    {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, +    {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},  ]  [[package]] @@ -543,13 +543,13 @@ optimize = ["orjson"]  [[package]]  name = "discord-py" -version = "2.3.0" +version = "2.3.1"  description = "A Python wrapper for the Discord API"  optional = false  python-versions = ">=3.8.0"  files = [ -    {file = "discord.py-2.3.0-py3-none-any.whl", hash = "sha256:3e9498967822ad4499f8f72deb9173f942d9827d92b6e4e4e7732d24f78f300c"}, -    {file = "discord.py-2.3.0.tar.gz", hash = "sha256:c71066a30f037d069218e59092505c3e8945fd175e396a80748056d989756806"}, +    {file = "discord.py-2.3.1-py3-none-any.whl", hash = "sha256:149652f24da299706270bf8c03c2fcf80cf1caf3a480744c61d5b001688b380d"}, +    {file = "discord.py-2.3.1.tar.gz", hash = "sha256:8eb4fe66b5d503da6de3a8425e23012711dc2fbcd7a782107a92beac15ee3459"},  ]  [package.dependencies] @@ -602,23 +602,23 @@ testing = ["hatch", "pre-commit", "pytest", "tox"]  [[package]]  name = "fakeredis" -version = "2.17.0" +version = "2.18.0"  description = "Python implementation of redis API, can be used for testing purposes."  optional = false  python-versions = ">=3.7,<4.0"  files = [ -    {file = "fakeredis-2.17.0-py3-none-any.whl", hash = "sha256:a99ef6e5642c31e91d36be78809fec3743e2bf7aaa682685b0d65a849fecd148"}, -    {file = "fakeredis-2.17.0.tar.gz", hash = "sha256:e304bc7addb2f862c3550cb7db58548418a0fadd4cd78a4de66464c84fbc2195"}, +    {file = "fakeredis-2.18.0-py3-none-any.whl", hash = "sha256:bc7a82e9caec80096659fd9a810b72d21f833574be26ff7b97955db626d60bac"}, +    {file = "fakeredis-2.18.0.tar.gz", hash = "sha256:f9c18d3dba81a470953cc042868b411e334109e065cde53a7a82beef6702a1de"},  ]  [package.dependencies] -lupa = {version = ">=1.14,<2.0", optional = true, markers = "extra == \"lua\""} +lupa = {version = ">=1.14,<3.0", optional = true, markers = "extra == \"lua\""}  redis = ">=4"  sortedcontainers = ">=2,<3"  [package.extras]  json = ["jsonpath-ng (>=1.5,<2.0)"] -lua = ["lupa (>=1.14,<2.0)"] +lua = ["lupa (>=1.14,<3.0)"]  [[package]]  name = "feedparser" @@ -790,13 +790,13 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve  [[package]]  name = "identify" -version = "2.5.26" +version = "2.5.27"  description = "File identification library for Python"  optional = false  python-versions = ">=3.8"  files = [ -    {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, -    {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, +    {file = "identify-2.5.27-py2.py3-none-any.whl", hash = "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba"}, +    {file = "identify-2.5.27.tar.gz", hash = "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733"},  ]  [package.extras] @@ -826,86 +826,92 @@ files = [  [[package]]  name = "lupa" -version = "1.14.1" +version = "2.0"  description = "Python wrapper around Lua and LuaJIT"  optional = false  python-versions = "*"  files = [ -    {file = "lupa-1.14.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:20b486cda76ff141cfb5f28df9c757224c9ed91e78c5242d402d2e9cb699d464"}, -    {file = "lupa-1.14.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c685143b18c79a3a1fa25a4cc774a87b5a61c606f249bcf824d125d8accb6b2c"}, -    {file = "lupa-1.14.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3865f9dbe9a84bd6a471250e52068aaf1147f206a51905fb6d93e1db9efb00ee"}, -    {file = "lupa-1.14.1-cp27-cp27m-win32.whl", hash = "sha256:2dacdddd5e28c6f5fd96a46c868ec5c34b0fad1ec7235b5bbb56f06183a37f20"}, -    {file = "lupa-1.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e754cbc6cacc9bca6ff2b39025e9659a2098420639d214054b06b466825f4470"}, -    {file = "lupa-1.14.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e36f3eb70705841bce9c15e12bc6fc3b2f4f68a41ba0e4af303b22fc4d8667c"}, -    {file = "lupa-1.14.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0aac06098d46729edd2d04e80b55d9d310e902f042f27521308df77cb1ba0191"}, -    {file = "lupa-1.14.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9706a192339efa1a6b7d806389572a669dd9ae2250469ff1ce13f684085af0b4"}, -    {file = "lupa-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d688a35f7fe614720ed7b820cbb739b37eff577a764c2003e229c2a752201cea"}, -    {file = "lupa-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:36d888bd42589ecad21a5fb957b46bc799640d18eff2fd0c47a79ffb4a1b286c"}, -    {file = "lupa-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:0423acd739cf25dbdbf1e33a0aa8026f35e1edea0573db63d156f14a082d77c8"}, -    {file = "lupa-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7068ae0d6a1a35ea8718ef6e103955c1ee143181bf0684604a76acc67f69de55"}, -    {file = "lupa-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5fef8b755591f0466438ad0a3e92ecb21dd6bb1f05d0215139b6ff8c87b2ce65"}, -    {file = "lupa-1.14.1-cp310-cp310-win32.whl", hash = "sha256:4a44e1fd0e9f4a546fbddd2e0fd913c823c9ac58a5f3160fb4f9109f633cb027"}, -    {file = "lupa-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:b83100cd7b48a7ca85dda4e9a6a5e7bc3312691e7f94c6a78d1f9a48a86a7fec"}, -    {file = "lupa-1.14.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:1b8bda50c61c98ff9bb41d1f4934640c323e9f1539021810016a2eae25a66c3d"}, -    {file = "lupa-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa1449aa1ab46c557344867496dee324b47ede0c41643df8f392b00262d21b12"}, -    {file = "lupa-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a17ebf91b3aa1c5c36661e34c9cf10e04bb4cc00076e8b966f86749647162050"}, -    {file = "lupa-1.14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:b1d9cfa469e7a2ad7e9a00fea7196b0022aa52f43a2043c2e0be92122e7bcfe8"}, -    {file = "lupa-1.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bc4f5e84aee0d567aa2e116ff6844d06086ef7404d5102807e59af5ce9daf3c0"}, -    {file = "lupa-1.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:40cf2eb90087dfe8ee002740469f2c4c5230d5e7d10ffb676602066d2f9b1ac9"}, -    {file = "lupa-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:63a27c38295aa971730795941270fff2ce65576f68ec63cb3ecb90d7a4526d03"}, -    {file = "lupa-1.14.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:457330e7a5456c4415fc6d38822036bd4cff214f9d8f7906200f6b588f1b2932"}, -    {file = "lupa-1.14.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d61fb507a36e18dc68f2d9e9e2ea19e1114b1a5e578a36f18e9be7a17d2931d1"}, -    {file = "lupa-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:f26b73d10130ad73e07d45dfe9b7c3833e3a2aa1871a4ecf5ce2dc1abeeae74d"}, -    {file = "lupa-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:297d801ba8e4e882b295c25d92f1634dde5e76d07ec6c35b13882401248c485d"}, -    {file = "lupa-1.14.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c8bddd22eaeea0ce9d302b390d8bc606f003bf6c51be68e8b007504433b91280"}, -    {file = "lupa-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1661c890861cf0f7002d7a7e00f50c885577954c2d85a7173b218d3228fa3869"}, -    {file = "lupa-1.14.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2ee480d31555f00f8bf97dd949c596508bd60264cff1921a3797a03dd369e8cd"}, -    {file = "lupa-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1ff93560c2546d7627ab2f95b5e88f000705db70a3d6041ac29d050f094f2a35"}, -    {file = "lupa-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:47f1459e2c98480c291ae3b70688d762f82dbb197ef121d529aa2c4e8bab1ba3"}, -    {file = "lupa-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8986dba002346505ee44c78303339c97a346b883015d5cf3aaa0d76d3b952744"}, -    {file = "lupa-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8912459fddf691e70f2add799a128822bae725826cfb86f69720a38bdfa42410"}, -    {file = "lupa-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:9b9d1b98391959ae531bbb8df7559ac2c408fcbd33721921b6a05fd6414161e0"}, -    {file = "lupa-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:61ff409040fa3a6c358b7274c10e556ba22afeb3470f8d23cd0a6bf418fb30c9"}, -    {file = "lupa-1.14.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:350ba2218eea800898854b02753dc0c9cfe83db315b30c0dc10ab17493f0321a"}, -    {file = "lupa-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:46dcbc0eae63899468686bb1dfc2fe4ed21fe06f69416113f039d88aab18f5dc"}, -    {file = "lupa-1.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7ad96923e2092d8edbf0c1b274f9b522690b932ed47a70d9a0c1c329f169f107"}, -    {file = "lupa-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:364b291bf2b55555c87b4bffb4db5a9619bcdb3c02e58aebde5319c3c59ec9b2"}, -    {file = "lupa-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ed071efc8ee231fac1fcd6b6fce44dc6da75a352b9b78403af89a48d759743c"}, -    {file = "lupa-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bce60847bebb4aa9ed3436fab3e84585e9094e15e1cb8d32e16e041c4ef65331"}, -    {file = "lupa-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5fbe7f83b0007cda3b158a93726c80dfd39003a8c5c5d608f6fdf8c60c42117f"}, -    {file = "lupa-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4bd789967cbb5c84470f358c7fa8fcbf7464185adbd872a6c3de9b42d29a6d26"}, -    {file = "lupa-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:ca58da94a6495dda0063ba975fe2e6f722c5e84c94f09955671b279c41cfde96"}, -    {file = "lupa-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:51d6965663b2be1a593beabfa10803fdbbcf0b293aa4a53ea09a23db89787d0d"}, -    {file = "lupa-1.14.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d251ba009996a47231615ea6b78123c88446979ae99b5585269ec46f7a9197aa"}, -    {file = "lupa-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:abe3fc103d7bd34e7028d06db557304979f13ebf9050ad0ea6c1cc3a1caea017"}, -    {file = "lupa-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4ea185c394bf7d07e9643d868e50cc94a530bb298d4bdae4915672b3809cc72b"}, -    {file = "lupa-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:6aff7257b5953de620db489899406cddb22093d1124fc5b31f8900e44a9dbc2a"}, -    {file = "lupa-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d6f5bfbd8fc48c27786aef8f30c84fd9197747fa0b53761e69eb968d81156cbf"}, -    {file = "lupa-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dec7580b86975bc5bdf4cc54638c93daaec10143b4acc4a6c674c0f7e27dd363"}, -    {file = "lupa-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:96a201537930813b34145daf337dcd934ddfaebeba6452caf8a32a418e145e82"}, -    {file = "lupa-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c0efaae8e7276f4feb82cba43c3cd45c82db820c9dab3965a8f2e0cb8b0bc30b"}, -    {file = "lupa-1.14.1-cp38-cp38-win32.whl", hash = "sha256:b6953854a343abdfe11aa52a2d021fadf3d77d0cd2b288b650f149b597e0d02d"}, -    {file = "lupa-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:c79ced2aaf7577e3d06933cf0d323fa968e6864c498c376b0bd475ded86f01f3"}, -    {file = "lupa-1.14.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:72589a21a3776c7dd4b05374780e7ecf1b49c490056077fc91486461935eaaa3"}, -    {file = "lupa-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:30d356a433653b53f1fe29477faaf5e547b61953b971b010d2185a561f4ce82a"}, -    {file = "lupa-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2116eb467797d5a134b2c997dfc7974b9a84b3aa5776c17ba8578ed4f5f41a9b"}, -    {file = "lupa-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:24d6c3435d38614083d197f3e7bcfe6d3d9eb02ee393d60a4ab9c719bc000162"}, -    {file = "lupa-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9144ecfa5e363f03e4d1c1e678b081cd223438be08f96604fca478591c3e3b53"}, -    {file = "lupa-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69be1d6c3f3ab9fc988c9a0e5801f23f68e2c8b5900a8fd3ae57d1d0e9c5539c"}, -    {file = "lupa-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:77b587043d0bee9cc738e00c12718095cf808dd269b171f852bd82026c664c69"}, -    {file = "lupa-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:62530cf0a9c749a3cd13ad92b31eaf178939d642b6176b46cfcd98f6c5006383"}, -    {file = "lupa-1.14.1-cp39-cp39-win32.whl", hash = "sha256:d891b43b8810191eb4c42a0bc57c32f481098029aac42b176108e09ffe118cdc"}, -    {file = "lupa-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:cf643bc48a152e2c572d8be7fc1de1c417a6a9648d337ffedebf00f57016b786"}, -    {file = "lupa-1.14.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0ac862c6d2eb542ac70d294a8e960b9ae7f46297559733b4c25f9e3c945e522a"}, -    {file = "lupa-1.14.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:0a15680f425b91ec220eb84b0ab59d24c4bee69d15b88245a6998a7d38c78ba6"}, -    {file = "lupa-1.14.1-pp37-pypy37_pp73-win32.whl", hash = "sha256:8a064d72991ba53aeea9720d95f2055f7f8a1e2f35b32a35d92248b63a94bcd1"}, -    {file = "lupa-1.14.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6d87d6c51e6c3b6326d18af83e81f4860ba0b287cda1101b1ab8562389d598f5"}, -    {file = "lupa-1.14.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b3efe9d887cfdf459054308ecb716e0eb11acb9a96c3022ee4e677c1f510d244"}, -    {file = "lupa-1.14.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:723fff6fcab5e7045e0fa79014729577f98082bd1fd1050f907f83a41e4c9865"}, -    {file = "lupa-1.14.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:930092a27157241d07d6d09ff01d5530a9e4c0dd515228211f2902b7e88ec1f0"}, -    {file = "lupa-1.14.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7f6bc9852bdf7b16840c984a1e9f952815f7d4b3764585d20d2e062bd1128074"}, -    {file = "lupa-1.14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:8f65d2007092a04616c215fea5ad05ba8f661bd0f45cde5265d27150f64d3dd8"}, -    {file = "lupa-1.14.1.tar.gz", hash = "sha256:d0fd4e60ad149fe25c90530e2a0e032a42a6f0455f29ca0edb8170d6ec751c6e"}, +    {file = "lupa-2.0-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:47d3eb18511e83068a8ce476a9f7ad8642a35189e682f5a1053970ec9d98272a"}, +    {file = "lupa-2.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:32d1e7cdced4e29771dacfed68abc92da9ba2300a2929ec5782467316ea4a715"}, +    {file = "lupa-2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d412925a73b6b848fd1076fbc392d445ff4a1ab5b5bb278e358f78768677c963"}, +    {file = "lupa-2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7c10d4f0fa592b798a71c0b2e273e4b899a14b3634a48cbc444917b254ddce37"}, +    {file = "lupa-2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f50a395dc3c950974ac73b2476136785c6995f611a81e14d2a7c6aa59b342abf"}, +    {file = "lupa-2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c19482a595deed90e5b8542df1ed861e2a4a9d99bd8a9ff108e3a7c66bc7c6c0"}, +    {file = "lupa-2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d85c20691dbd2db5b7c60f40e4a5ced6a35be60264a81dc08804483917b41ea9"}, +    {file = "lupa-2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43353ae1e204b1f7fb18150f7dc5357592be37431e84f799c6cf21a4b7a52dcc"}, +    {file = "lupa-2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9add3d9ba86fa2fb5604e429ca811b9fa6b4c55fe5330bd9f0fcf51f2c5bebf8"}, +    {file = "lupa-2.0-cp310-cp310-win32.whl", hash = "sha256:17fd814523b9fa268df8f0995874218a9be008dbcd1c1c7bd28207814a209491"}, +    {file = "lupa-2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5c249d83655942ebe7db99c4e981de547867a7d30ace34e61f3ccc5b7a14402c"}, +    {file = "lupa-2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e051969dc712d7050d0f3d6c6c8ed063941a004381e84f072815350476118f81"}, +    {file = "lupa-2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a0e45ada08e5694ab3f3c06523ec16322dfb875668ce9ff3e04a01d3e18e81"}, +    {file = "lupa-2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f7c1cfa9dac4f1363d9620384f9881a1ec968ff825be1e9b2ecdb4cb5375fbf2"}, +    {file = "lupa-2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4649a5501f0d8e5c96c297896377e9f73d0167df139109536187c57c60be1e90"}, +    {file = "lupa-2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e980571081c93152bb04de07bbde6852462e1674349eb3eafe703f5fa81a836"}, +    {file = "lupa-2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c529e5ecf3ec5b3e57efbb9a5def5125ceb7b95f12e2c89c34535856abb1ac"}, +    {file = "lupa-2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6847c2541f9cbdd596df821a575222f471175cd710fb967ffc51801dae58d68"}, +    {file = "lupa-2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f3f962a499f95b3a5e90de36ac396cdb59c0c46b8003fbfcc1e2d78d7edc14f8"}, +    {file = "lupa-2.0-cp311-cp311-win32.whl", hash = "sha256:fcedc43012527edb4ca2b97a6c8176dd2384a006e47549d4e73143f7982deaff"}, +    {file = "lupa-2.0-cp311-cp311-win_amd64.whl", hash = "sha256:0e66da3bc40cde8edeb4d7d8141afad67ec6a5da0ee07ce5265df7e899e0883c"}, +    {file = "lupa-2.0-cp35-cp35m-win32.whl", hash = "sha256:ab2ca1c51724b779a2531d2bef1480faae203c8917b9cc3d0a3d3acb37c1d7ad"}, +    {file = "lupa-2.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3b3e02b920b61601e2d9713b1e197d8cbab0bd3709774ec6823357cd83ee7b9d"}, +    {file = "lupa-2.0-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:8214a8b0fb1277e026301f60101af323c93868eefcad69984e7285bea5c1ac3f"}, +    {file = "lupa-2.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90788d250f727720747784e67fbc50917f5ce051e24bc49661850f98b1b9ed42"}, +    {file = "lupa-2.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:019e10a56c50ba60e94ff8c3e60a9a239d6438f1dc6ac17bcf2d44d4ada8f171"}, +    {file = "lupa-2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0d5481e3af166d73da373ffda0eab1bd709b0177daa2616ce95816483942c21"}, +    {file = "lupa-2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0432ec532513eaf5ae8961000baf56d550fed4a7b91c0a9759b6f17c1dafc8af"}, +    {file = "lupa-2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7563c4a015f51eb36d92874c0448bb8df504041d894e61e6c9cb9e6613132470"}, +    {file = "lupa-2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:46b77e4a545d5ba00d17432853b26b50299129047d4f999c007fb9b6db3cfdd6"}, +    {file = "lupa-2.0-cp36-cp36m-win32.whl", hash = "sha256:2c11eafd262ff47ccb0bf9c28126dde21d3d01205cf6f5b5c2c4dbf04b99f5e9"}, +    {file = "lupa-2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a91eacc06ac89a2134c6b0f35ac65c45e18c984baf24b03d0f5187071074a597"}, +    {file = "lupa-2.0-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:a97e647ac11ca5131a73628ee063233378c03100f0f408c77f9b45cb358619ab"}, +    {file = "lupa-2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02ed2848a33dfe43013c5a86d2c155a9669d3c438a847a4e3816b7f1bf17cec6"}, +    {file = "lupa-2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f576699ca59f3f76127d70210a0ba20e7def93ab1a7e3587d55dd4b770775788"}, +    {file = "lupa-2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:769d7747056380ca4fb7923b7031b5732c1b9b9d0d160324cc88a32d7c98127c"}, +    {file = "lupa-2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29c46d79273a72c010a2949d41336bbb5ebafd09e2c2a4342d2f2f4238d378c8"}, +    {file = "lupa-2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3dbf85baf66f0a8b862293c3cd61430d2d379652e3db3e5f979b16db7e374b"}, +    {file = "lupa-2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:033a14fe291ef532db11c3f3b65b364b5b3b3d3b6146aa7f7412f8f4d89471ce"}, +    {file = "lupa-2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:793bddad1a36eb7c8c04775867942cf2adfe09d482311791022c4ab4802169b4"}, +    {file = "lupa-2.0-cp37-cp37m-win32.whl", hash = "sha256:dd9af8e86b3c811ce74f11a12f275c873bd38f40de6ce76b7ddc3664e113a98e"}, +    {file = "lupa-2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6e9ece8e7e4399473e1f9a4733445d93148c3205e1b87c158894287f3213bf6b"}, +    {file = "lupa-2.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:1be2e1015d8481511852ae0f9f05f3722715d7aadb48207480eb50edc45a7510"}, +    {file = "lupa-2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7caa1ce59fe1cefd845093d1354244c59d286fcc1196a15297fb189a5bb749c6"}, +    {file = "lupa-2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f04c7a8d4e5b50a570681b990ff3be09bce5efbd91a521442c0ebfc36e0ce422"}, +    {file = "lupa-2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f8368f0d5131f47da60f7cea4a5932418ca0bcd12c22fcf700f36af93fdf2a6a"}, +    {file = "lupa-2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d225e06748aca078a02529054c6678ba3e5b7cc2080b5be30e33ede9eac5efb2"}, +    {file = "lupa-2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:974de113c63e35668fbbbff656fef718e586abed3fc875eae4fece279a1e8a11"}, +    {file = "lupa-2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c953b9430751e792b721dd2265af1759251cdac0ade5642f25e16a6174bcc58"}, +    {file = "lupa-2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65d5971eb8c060eb3c9218c25181001e25982dfdf88e0b284447f837a4318a5f"}, +    {file = "lupa-2.0-cp38-cp38-win32.whl", hash = "sha256:eece0bc316c2b050e8c3596320e124c8ccea2a7872e593193d30eecab7f0acf6"}, +    {file = "lupa-2.0-cp38-cp38-win_amd64.whl", hash = "sha256:06792b86f9410bd26936728e7f903e2eee76642cbf51e435622637a3d752a2ea"}, +    {file = "lupa-2.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:8f3e6ea86053ec0c9945ae313fba8ba06dc4ccc397369709bba956dd48db95a7"}, +    {file = "lupa-2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:201fc894d257132e90e42ce9396c5b45aa5f5bdc4cd4dfc8076c8476f04dd44b"}, +    {file = "lupa-2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b3f6837c1e2fd7c66100828953063dfe8a1d283bc48e1144d621b35bf19ce79f"}, +    {file = "lupa-2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:becb01602dc6d5439101e1ac5877b25e35817b1bd131b9af709a5a181e6b8026"}, +    {file = "lupa-2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d34870912bf7501d2a9e7dc75319e55f836fd8412b783afa44c5bfb72be0867"}, +    {file = "lupa-2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d02d4af2682169b8aa744e7eae59d1e05f9b0071a59fb140852dae9b5c8d86c"}, +    {file = "lupa-2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:282126096ba71c1926f28da59cd1cf6913b7e9e7020d577b42dc52ca3c359e93"}, +    {file = "lupa-2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ec361e05d932c5355825982613077ac8cb5b63d95022d571290d8ca667188"}, +    {file = "lupa-2.0-cp39-cp39-win32.whl", hash = "sha256:e361efe6c8a667fa221d42b7fa2beb7fada86e901a0f0e1e17c7c7927d66b2ff"}, +    {file = "lupa-2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c0be42065ad39219eaf890c224cc7cc140ed72691b97b0905dd7a89abebdf474"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-macosx_11_0_x86_64.whl", hash = "sha256:dea916b28ee38c904ece3a26986b6943a073666c038ae6b6d6d131668da20f59"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:345032ef77bd474d288ea2c4ddd14b552b93d60a40a9b0daf0a82bc078625982"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:9fa9d5013a06aa09392f1d02d9724a9856f4f4111794ca9be17a016c83c6546a"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:71e517327bff75cc5e60fe105da7da6621a75ba05a5050869e33b4bdbe838288"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e00664780836b353113804f8e0f860322abf5ef723d615ba6f49d9e78874944"}, +    {file = "lupa-2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9a5843fbfb22b70ea13ec624d43c818b396ff1f62d9bd84f9ed10e3fef06ccf0"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5396ebb51753a8243a18080e2efa9f085bac5d43185d5a1dd9a3679ff7fb09c5"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:404bda126a34eef839e29fc94fd65c1092b53301b2d0abc9388f02cc5ba87ac9"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fb5efacbb5dd568d44f4f31a4764a52eefb78288f0445da016652fe7143cdde3"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7762c6780fe7ab64d64f8658ab54d79cb5d3d0fbdcc76290f5fc19b41fc01ad5"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0068d75f0df5f2fb85230b1df7a05305645ee28ef89551997eb09009c70d7f8a"}, +    {file = "lupa-2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:690c0654b92c6de0893c004d0a46d5d5b5fd76e9017dda328a2435afdf3c55a0"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b7c9799a45e6fff8c38395d370b318b8ce6841710c2082f180ea7d189f7d229"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:200544d259a054c5d0c6696499d0c66ccd924d42efb41b09b19c2af9771f5c31"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:682860cd6ed84e0ffdaf84c82c21b192858261964b3ed126bc54d52cc8a480b4"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb4426cddefb48683068e94ed4748710507bbd3f0a4d71574535443c75a16e36"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88495333e79937cdf7edac35ec36aca41d50134dbb23f2f1684a1685a4295433"}, +    {file = "lupa-2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c776290a06b03e8dd5ca061d9fefde13be37fb25700c56bb513343262ea1729"}, +    {file = "lupa-2.0.tar.gz", hash = "sha256:ad3fef486be7adddd349fe9a9c393789061312cf98ebc533b489be34f484cb79"},  ]  [[package]] @@ -1509,19 +1515,20 @@ python-dotenv = ">=0.21.0"  [[package]]  name = "pydis-core" -version = "9.9.2" +version = "10.1.0"  description = "PyDis core provides core functionality and utility to the bots of the Python Discord community."  optional = false  python-versions = ">=3.10.dev0,<3.12.dev0"  files = [ -    {file = "pydis_core-9.9.2-py3-none-any.whl", hash = "sha256:8149837bb8b7e72f17c21eae117e5892290ea88e952453b41bfe031feff64c92"}, -    {file = "pydis_core-9.9.2.tar.gz", hash = "sha256:3c91ed293a14d6c955c432c075226b788c8d9adea3d0044b9e9f86e4ff00df63"}, +    {file = "pydis_core-10.1.0-py3-none-any.whl", hash = "sha256:91f7e39b052b4266af5d65011027318174e0c15330e01d2d4c3e8b1eb925f5a0"}, +    {file = "pydis_core-10.1.0.tar.gz", hash = "sha256:87f4883704ef4ee62b89a1577a0829b8ce6e97bfae875c409ae9b22d5e394d97"},  ]  [package.dependencies]  aiodns = "3.0.0"  async-rediscache = {version = "1.0.0rc2", extras = ["fakeredis"], optional = true, markers = "extra == \"async-rediscache\""} -"discord.py" = "2.3.0" +"discord.py" = "2.3.1" +pydantic = ">=1.7.4,<3.0.0"  statsd = "4.0.1"  [package.extras] @@ -2031,18 +2038,18 @@ tornado = ["tornado (>=5)"]  [[package]]  name = "setuptools" -version = "68.0.0" +version = "68.1.2"  description = "Easily download, build, install, upgrade, and uninstall Python packages"  optional = false -python-versions = ">=3.7" +python-versions = ">=3.8"  files = [ -    {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, -    {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +    {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, +    {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"},  ]  [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]  testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]  [[package]] @@ -2185,13 +2192,13 @@ zstd = ["zstandard (>=0.18.0)"]  [[package]]  name = "virtualenv" -version = "20.24.2" +version = "20.24.3"  description = "Virtual Python Environment builder"  optional = false  python-versions = ">=3.7"  files = [ -    {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, -    {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, +    {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, +    {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"},  ]  [package.dependencies] @@ -2304,4 +2311,4 @@ multidict = ">=4.0"  [metadata]  lock-version = "2.0"  python-versions = "3.11.*" -content-hash = "84776e5eb6a088609a0c87fa6f9fe4a596259a41f9af1dc0a1f31836b35ce66b" +content-hash = "7987de756f61978d3619b2595a7eb177467aaaa1d5897c05f7d8bac43db4c27d" diff --git a/pyproject.toml b/pyproject.toml index d993fe23a..57c810ab6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ license = "MIT"  python = "3.11.*"  # See https://bot-core.pythondiscord.com/ for docs. -pydis_core = { version = "9.9.2", extras = ["async-rediscache"] } +pydis_core = { version = "10.1.0", extras = ["async-rediscache"] }  aiohttp = "3.8.5"  arrow = "1.2.3" | 
