Merge branch 'bugfixes' into 'dev'

Bugfixes

See merge request stark-industries/jarvis/jarvis-bot!62
This commit is contained in:
Zeva Rose 2022-05-31 04:09:59 +00:00
commit c5c1d9fc2b
23 changed files with 461 additions and 288 deletions

View file

@ -258,7 +258,7 @@ class Jarvis(Client):
text=f"{ctx.author.user.username}#{ctx.author.discriminator} | {ctx.author.id}" text=f"{ctx.author.user.username}#{ctx.author.discriminator} | {ctx.author.id}"
) )
if channel: if channel:
await channel.send(embed=embed) await channel.send(embeds=embed)
else: else:
self.logger.warning( self.logger.warning(
f"Activitylog channel no longer exists in {ctx.guild.name}, removing" f"Activitylog channel no longer exists in {ctx.guild.name}, removing"
@ -295,7 +295,7 @@ class Jarvis(Client):
) )
embed.set_author(name=user.username, icon_url=user.avatar.url) embed.set_author(name=user.username, icon_url=user.avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}") embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
await channel.send(embed=embed) await channel.send(embeds=embed)
async def process_verify(self, before: Member, after: Member) -> Embed: async def process_verify(self, before: Member, after: Member) -> Embed:
"""Process user verification.""" """Process user verification."""
@ -413,7 +413,7 @@ class Jarvis(Client):
embed = embed or await self.process_rolechange(before, after) embed = embed or await self.process_rolechange(before, after)
embed = embed or await self.process_rename(before, after) embed = embed or await self.process_rename(before, after)
if embed: if embed:
await channel.send(embed=embed) await channel.send(embeds=embed)
# Message # Message
async def autopurge(self, message: Message) -> None: async def autopurge(self, message: Message) -> None:
@ -486,7 +486,7 @@ class Jarvis(Client):
user=message.author.id, user=message.author.id,
).commit() ).commit()
embed = warning_embed(message.author, "Sent an invite link") embed = warning_embed(message.author, "Sent an invite link")
await message.channel.send(embed=embed) await message.channel.send(embeds=embed)
async def massmention(self, message: Message) -> None: async def massmention(self, message: Message) -> None:
"""Handle massmention events.""" """Handle massmention events."""
@ -518,7 +518,7 @@ class Jarvis(Client):
user=message.author.id, user=message.author.id,
).commit() ).commit()
embed = warning_embed(message.author, "Mass Mention") embed = warning_embed(message.author, "Mass Mention")
await message.channel.send(embed=embed) await message.channel.send(embeds=embed)
async def roleping(self, message: Message) -> None: async def roleping(self, message: Message) -> None:
"""Handle roleping events.""" """Handle roleping events."""
@ -579,7 +579,7 @@ class Jarvis(Client):
user=message.author.id, user=message.author.id,
).commit() ).commit()
embed = warning_embed(message.author, "Pinged a blocked role/user with a blocked role") embed = warning_embed(message.author, "Pinged a blocked role/user with a blocked role")
await message.channel.send(embed=embed) await message.channel.send(embeds=embed)
async def phishing(self, message: Message) -> None: async def phishing(self, message: Message) -> None:
"""Check if the message contains any known phishing domains.""" """Check if the message contains any known phishing domains."""
@ -599,7 +599,7 @@ class Jarvis(Client):
user=message.author.id, user=message.author.id,
).commit() ).commit()
embed = warning_embed(message.author, "Phishing URL") embed = warning_embed(message.author, "Phishing URL")
await message.channel.send(embed=embed) await message.channel.send(embeds=embed)
await message.delete() await message.delete()
return True return True
return False return False
@ -631,7 +631,7 @@ class Jarvis(Client):
).commit() ).commit()
reasons = ", ".join(item["not_safe_reasons"]) reasons = ", ".join(item["not_safe_reasons"])
embed = warning_embed(message.author, reasons) embed = warning_embed(message.author, reasons)
await message.channel.send(embed=embed) await message.channel.send(embeds=embed)
await message.delete() await message.delete()
return True return True
return False return False
@ -689,7 +689,7 @@ class Jarvis(Client):
embed.set_footer( embed.set_footer(
text=f"{after.author.username}#{after.author.discriminator} | {after.author.id}" text=f"{after.author.username}#{after.author.discriminator} | {after.author.id}"
) )
await channel.send(embed=embed) await channel.send(embeds=embed)
except Exception as e: except Exception as e:
self.logger.warning( self.logger.warning(
f"Failed to process edit {before.guild.id}/{before.channel.id}/{before.id}: {e}" f"Failed to process edit {before.guild.id}/{before.channel.id}/{before.id}: {e}"
@ -765,7 +765,7 @@ class Jarvis(Client):
f"{message.author.id}" f"{message.author.id}"
) )
) )
await channel.send(embed=embed) await channel.send(embeds=embed)
except Exception as e: except Exception as e:
self.logger.warning( self.logger.warning(
f"Failed to process edit {message.guild.id}/{message.channel.id}/{message.id}: {e}" f"Failed to process edit {message.guild.id}/{message.channel.id}/{message.id}: {e}"
@ -799,30 +799,39 @@ class Jarvis(Client):
note = Note( note = Note(
admin=context.author.id, content="Moderation case opened via message" admin=context.author.id, content="Moderation case opened via message"
) )
modlog = Modlog( modlog = await Modlog.find_one(
user=user.id, q(user=user.id, guild=context.guild.id, open=True)
admin=context.author.id,
guild=context.guild.id,
actions=[action],
notes=[note],
) )
await modlog.commit() if modlog:
self.logger.debug("User already has active case in guild")
await context.send(
f"User already has open case: {modlog.nanoid}", ephemeral=True
)
else:
modlog = Modlog(
user=user.id,
admin=context.author.id,
guild=context.guild.id,
actions=[action],
notes=[note],
)
await modlog.commit()
fields = ( fields = (
EmbedField(name="Admin", value=context.author.mention), EmbedField(name="Admin", value=context.author.mention),
EmbedField(name="Opening Action", value=f"{name} {parent}"), EmbedField(name="Opening Action", value=f"{name} {parent}"),
) )
embed = build_embed( embed = build_embed(
title="Moderation Case Opened", title="Moderation Case Opened",
description=f"Moderation case opened against {user.mention}", description=f"Moderation case opened against {user.mention}",
fields=fields, fields=fields,
) )
embed.set_author( embed.set_author(
name=user.username + "#" + user.discriminator, name=user.username + "#" + user.discriminator,
icon_url=user.display_avatar.url, icon_url=user.display_avatar.url,
) )
await context.message.edit(embed=embed) await context.message.edit(embeds=embed)
elif not user: elif not user:
self.logger.debug("User no longer in guild") self.logger.debug("User no longer in guild")
await context.send("User no longer in guild", ephemeral=True) await context.send("User no longer in guild", ephemeral=True)

View file

@ -63,7 +63,7 @@ class BanCog(ModcaseCog):
embed.set_thumbnail(url=user.avatar.url) embed.set_thumbnail(url=user.avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}") embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
async def discord_apply_unban(self, ctx: InteractionContext, user: User, reason: str) -> None: async def discord_apply_unban(self, ctx: InteractionContext, user: User, reason: str) -> None:
"""Apply a Discord unban.""" """Apply a Discord unban."""
@ -89,7 +89,7 @@ class BanCog(ModcaseCog):
) )
embed.set_thumbnail(url=user.avatar.url) embed.set_thumbnail(url=user.avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}") embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command(name="ban", description="Ban a user") @slash_command(name="ban", description="Ban a user")
@slash_option(name="user", description="User to ban", opt_type=OptionTypes.USER, required=True) @slash_option(name="user", description="User to ban", opt_type=OptionTypes.USER, required=True)

View file

@ -34,6 +34,9 @@ class KickCog(ModcaseCog):
if len(reason) > 100: if len(reason) > 100:
await ctx.send("Reason must be < 100 characters", ephemeral=True) await ctx.send("Reason must be < 100 characters", ephemeral=True)
return return
if not ctx.guild.fetch_member(user.id):
await ctx.send("User must be in guild", ephemeral=True)
return
guild_name = ctx.guild.name guild_name = ctx.guild.name
embed = build_embed( embed = build_embed(
@ -50,7 +53,7 @@ class KickCog(ModcaseCog):
send_failed = False send_failed = False
try: try:
await user.send(embed=embed) await user.send(embeds=embed)
except Exception: except Exception:
send_failed = True send_failed = True
try: try:
@ -77,4 +80,4 @@ class KickCog(ModcaseCog):
guild=ctx.guild.id, guild=ctx.guild.id,
) )
await k.commit() await k.commit()
await ctx.send(embed=embed) await ctx.send(embeds=embed)

View file

@ -227,7 +227,7 @@ class CaseCog(Extension):
return return
embed = await self.get_summary_embed(case, ctx.guild) embed = await self.get_summary_embed(case, ctx.guild)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@show.subcommand(sub_cmd_name="actions", sub_cmd_description="Get case actions") @show.subcommand(sub_cmd_name="actions", sub_cmd_description="Get case actions")
@slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True) @slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True)
@ -255,7 +255,7 @@ class CaseCog(Extension):
await case.commit() await case.commit()
embed = await self.get_summary_embed(case, ctx.guild) embed = await self.get_summary_embed(case, ctx.guild)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@case.subcommand(sub_cmd_name="repoen", sub_cmd_description="Reopen a specific case") @case.subcommand(sub_cmd_name="repoen", sub_cmd_description="Reopen a specific case")
@slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True) @slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True)
@ -270,7 +270,7 @@ class CaseCog(Extension):
await case.commit() await case.commit()
embed = await self.get_summary_embed(case, ctx.guild) embed = await self.get_summary_embed(case, ctx.guild)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@case.subcommand(sub_cmd_name="note", sub_cmd_description="Add a note to a specific case") @case.subcommand(sub_cmd_name="note", sub_cmd_description="Add a note to a specific case")
@slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True) @slash_option(name="cid", description="Case ID", opt_type=OptionTypes.STRING, required=True)
@ -298,7 +298,7 @@ class CaseCog(Extension):
await case.commit() await case.commit()
embed = await self.get_summary_embed(case, ctx.guild) embed = await self.get_summary_embed(case, ctx.guild)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@case.subcommand(sub_cmd_name="new", sub_cmd_description="Open a new case") @case.subcommand(sub_cmd_name="new", sub_cmd_description="Open a new case")
@slash_option(name="user", description="Target user", opt_type=OptionTypes.USER, required=True) @slash_option(name="user", description="Target user", opt_type=OptionTypes.USER, required=True)
@ -329,4 +329,4 @@ class CaseCog(Extension):
await case.reload() await case.reload()
embed = await self.get_summary_embed(case, ctx.guild) embed = await self.get_summary_embed(case, ctx.guild)
await ctx.send(embed=embed) await ctx.send(embeds=embed)

View file

@ -123,7 +123,7 @@ class MuteCog(ModcaseCog):
return return
try: try:
embed = await self._apply_timeout(ctx, ctx.target, reason, until) embed = await self._apply_timeout(ctx, ctx.target, reason, until)
await response.send(embed=embed) await response.send(embeds=embed)
except Forbidden: except Forbidden:
await response.send("Unable to mute this user", ephemeral=True) await response.send("Unable to mute this user", ephemeral=True)
@ -170,6 +170,9 @@ class MuteCog(ModcaseCog):
if len(reason) > 100: if len(reason) > 100:
await ctx.send("Reason must be < 100 characters", ephemeral=True) await ctx.send("Reason must be < 100 characters", ephemeral=True)
return return
if not ctx.guild.fetch_member(user.id):
await ctx.send("User must be in guild", ephemeral=True)
return
# Max 4 weeks (2419200 seconds) per API # Max 4 weeks (2419200 seconds) per API
duration = time * scale duration = time * scale
@ -180,7 +183,7 @@ class MuteCog(ModcaseCog):
until = datetime.now(tz=timezone.utc) + timedelta(minutes=duration) until = datetime.now(tz=timezone.utc) + timedelta(minutes=duration)
try: try:
embed = await self._apply_timeout(ctx, user, reason, until) embed = await self._apply_timeout(ctx, user, reason, until)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
except Forbidden: except Forbidden:
await ctx.send("Unable to mute this user", ephemeral=True) await ctx.send("Unable to mute this user", ephemeral=True)
@ -212,4 +215,4 @@ class MuteCog(ModcaseCog):
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url) embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_thumbnail(url=user.display_avatar.url) embed.set_thumbnail(url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}") embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)

View file

@ -66,7 +66,7 @@ class WarningCog(ModcaseCog):
active=True, active=True,
).commit() ).commit()
embed = warning_embed(user, reason) embed = warning_embed(user, reason)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command(name="warnings", description="Get count of user warnings") @slash_command(name="warnings", description="Get count of user warnings")
@slash_option(name="user", description="User to view", opt_type=OptionTypes.USER, required=True) @slash_option(name="user", description="User to view", opt_type=OptionTypes.USER, required=True)

View file

@ -71,7 +71,7 @@ class BotutilCog(Extension):
) )
embed = build_embed(title="System Info", description="", fields=fields) embed = build_embed(title="System Info", description="", fields=fields)
embed.set_image(url=self.bot.user.avatar.url) embed.set_image(url=self.bot.user.avatar.url)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@prefixed_command(name="update") @prefixed_command(name="update")
async def _update(self, ctx: PrefixedContext) -> None: async def _update(self, ctx: PrefixedContext) -> None:
@ -105,14 +105,14 @@ class BotutilCog(Extension):
self.logger.info("Updates applied") self.logger.info("Updates applied")
content = f"```ansi\n{capture.get()}\n```" content = f"```ansi\n{capture.get()}\n```"
if len(content) < 3000: if len(content) < 3000:
await ctx.reply(content, embed=embed) await ctx.reply(content, embeds=embed)
else: else:
await ctx.reply(f"Total Changes: {status.lines['total_lines']}", embed=embed) await ctx.reply(f"Total Changes: {status.lines['total_lines']}", embeds=embed)
else: else:
embed = build_embed(title="Update Status", description="No changes applied", fields=[]) embed = build_embed(title="Update Status", description="No changes applied", fields=[])
embed.set_thumbnail(url="https://dev.zevaryx.com/git.png") embed.set_thumbnail(url="https://dev.zevaryx.com/git.png")
await ctx.reply(embed=embed) await ctx.reply(embeds=embed)
def setup(bot: Client) -> None: def setup(bot: Client) -> None:

View file

@ -65,7 +65,7 @@ class DbrandCog(Extension):
embed.set_author( embed.set_author(
name="dbrand", url=self.base_url, icon_url="https://dev.zevaryx.com/db_logo.png" name="dbrand", url=self.base_url, icon_url="https://dev.zevaryx.com/db_logo.png"
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@db.subcommand( @db.subcommand(
sub_cmd_name="contact", sub_cmd_name="contact",
@ -159,7 +159,7 @@ class DbrandCog(Extension):
text="dbrand.com", text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png", icon_url="https://dev.zevaryx.com/db_logo.png",
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
elif not data["is_valid"]: elif not data["is_valid"]:
embed = build_embed( embed = build_embed(
title="Check Shipping Times", title="Check Shipping Times",
@ -176,7 +176,7 @@ class DbrandCog(Extension):
text="dbrand.com", text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png", icon_url="https://dev.zevaryx.com/db_logo.png",
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
elif not data["shipping_available"]: elif not data["shipping_available"]:
embed = build_embed( embed = build_embed(
title="Shipping to {}".format(data["country"]), title="Shipping to {}".format(data["country"]),
@ -194,7 +194,7 @@ class DbrandCog(Extension):
text="dbrand.com", text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png", icon_url="https://dev.zevaryx.com/db_logo.png",
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
def setup(bot: Client) -> None: def setup(bot: Client) -> None:

View file

@ -113,7 +113,7 @@ class DevCog(Extension):
] ]
embed = build_embed(title=title, description=description, fields=fields) embed = build_embed(title=title, description=description, fields=fields)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command(name="uuid", description="Generate a UUID") @slash_command(name="uuid", description="Generate a UUID")
@slash_option( @slash_option(
@ -229,7 +229,7 @@ class DevCog(Extension):
EmbedField(name=mstr, value=f"`{encoded}`", inline=False), EmbedField(name=mstr, value=f"`{encoded}`", inline=False),
] ]
embed = build_embed(title="Decoded Data", description="", fields=fields) embed = build_embed(title="Decoded Data", description="", fields=fields)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command(name="decode", description="Decode some data") @slash_command(name="decode", description="Decode some data")
@slash_option( @slash_option(
@ -264,7 +264,7 @@ class DevCog(Extension):
EmbedField(name=mstr, value=f"`{decoded}`", inline=False), EmbedField(name=mstr, value=f"`{decoded}`", inline=False),
] ]
embed = build_embed(title="Decoded Data", description="", fields=fields) embed = build_embed(title="Decoded Data", description="", fields=fields)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command(name="cloc", description="Get JARVIS lines of code") @slash_command(name="cloc", description="Get JARVIS lines of code")
@cooldown(bucket=Buckets.CHANNEL, rate=1, interval=30) @cooldown(bucket=Buckets.CHANNEL, rate=1, interval=30)

View file

@ -104,7 +104,7 @@ class GitlabCog(Extension):
embed.set_thumbnail( embed.set_thumbnail(
url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png" url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png"
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@gl.subcommand( @gl.subcommand(
sub_cmd_name="milestone", sub_cmd_name="milestone",
@ -158,7 +158,7 @@ class GitlabCog(Extension):
embed.set_thumbnail( embed.set_thumbnail(
url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png" url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png"
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@gl.subcommand( @gl.subcommand(
sub_cmd_name="mr", sub_cmd_name="mr",
@ -235,7 +235,7 @@ class GitlabCog(Extension):
embed.set_thumbnail( embed.set_thumbnail(
url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png" url="https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png"
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
def build_embed_page(self, api_list: list, t_state: str, name: str) -> Embed: def build_embed_page(self, api_list: list, t_state: str, name: str) -> Embed:
"""Build an embed page for the paginator.""" """Build an embed page for the paginator."""
@ -462,7 +462,7 @@ class GitlabCog(Extension):
fields=[], fields=[],
color="#00FFEE", color="#00FFEE",
) )
await resp.send(embed=embed) await resp.send(embeds=embed)
def setup(bot: Client) -> None: def setup(bot: Client) -> None:

View file

@ -148,7 +148,7 @@ class ImageCog(Extension):
embed = build_embed(title=filename, description="", fields=fields) embed = build_embed(title=filename, description="", fields=fields)
embed.set_image(url="attachment://resized.png") embed.set_image(url="attachment://resized.png")
await ctx.send( await ctx.send(
embed=embed, embeds=embed,
file=File(file=bufio, file_name="resized.png"), file=File(file=bufio, file_name="resized.png"),
) )

View file

@ -1,6 +1,7 @@
"""JARVIS Reddit cog.""" """JARVIS Reddit cog."""
import asyncio import asyncio
import logging import logging
import re
from typing import List, Optional from typing import List, Optional
from asyncpraw import Reddit from asyncpraw import Reddit
@ -28,6 +29,7 @@ from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions
DEFAULT_USER_AGENT = f"python:JARVIS:{const.__version__} (by u/zevaryx)" DEFAULT_USER_AGENT = f"python:JARVIS:{const.__version__} (by u/zevaryx)"
sub_name = re.compile(r"\A[A-Za-z0-9][A-Za-z0-9_]{2,20}\Z")
class RedditCog(Extension): class RedditCog(Extension):
@ -135,8 +137,7 @@ class RedditCog(Extension):
) )
@check(admin_or_permissions(Permissions.MANAGE_GUILD)) @check(admin_or_permissions(Permissions.MANAGE_GUILD))
async def _reddit_follow(self, ctx: InteractionContext, name: str, channel: GuildText) -> None: async def _reddit_follow(self, ctx: InteractionContext, name: str, channel: GuildText) -> None:
name = name.replace("r/", "") if not sub_name.match(name):
if len(name) > 20 or len(name) < 3:
await ctx.send("Invalid Subreddit name", ephemeral=True) await ctx.send("Invalid Subreddit name", ephemeral=True)
return return
@ -248,12 +249,11 @@ class RedditCog(Extension):
name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True
) )
async def _subreddit_hot(self, ctx: InteractionContext, name: str) -> None: async def _subreddit_hot(self, ctx: InteractionContext, name: str) -> None:
await ctx.defer() if not sub_name.match(name):
name = name.replace("r/", "")
if len(name) > 20 or len(name) < 3:
await ctx.send("Invalid Subreddit name", ephemeral=True) await ctx.send("Invalid Subreddit name", ephemeral=True)
return return
try: try:
await ctx.defer()
subreddit = await self.api.subreddit(name) subreddit = await self.api.subreddit(name)
await subreddit.load() await subreddit.load()
except (NotFound, Forbidden, Redirect) as e: except (NotFound, Forbidden, Redirect) as e:
@ -300,12 +300,11 @@ class RedditCog(Extension):
], ],
) )
async def _subreddit_top(self, ctx: InteractionContext, name: str, time: str = "all") -> None: async def _subreddit_top(self, ctx: InteractionContext, name: str, time: str = "all") -> None:
await ctx.defer() if not sub_name.match(name):
name = name.replace("r/", "")
if len(name) > 20 or len(name) < 3:
await ctx.send("Invalid Subreddit name", ephemeral=True) await ctx.send("Invalid Subreddit name", ephemeral=True)
return return
try: try:
await ctx.defer()
subreddit = await self.api.subreddit(name) subreddit = await self.api.subreddit(name)
await subreddit.load() await subreddit.load()
except (NotFound, Forbidden, Redirect) as e: except (NotFound, Forbidden, Redirect) as e:
@ -340,12 +339,11 @@ class RedditCog(Extension):
name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True
) )
async def _subreddit_random(self, ctx: InteractionContext, name: str) -> None: async def _subreddit_random(self, ctx: InteractionContext, name: str) -> None:
await ctx.defer() if not sub_name.match(name):
name = name.replace("r/", "")
if len(name) > 20 or len(name) < 3:
await ctx.send("Invalid Subreddit name", ephemeral=True) await ctx.send("Invalid Subreddit name", ephemeral=True)
return return
try: try:
await ctx.defer()
subreddit = await self.api.subreddit(name) subreddit = await self.api.subreddit(name)
await subreddit.load() await subreddit.load()
except (NotFound, Forbidden, Redirect) as e: except (NotFound, Forbidden, Redirect) as e:
@ -380,12 +378,11 @@ class RedditCog(Extension):
name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True
) )
async def _subreddit_rising(self, ctx: InteractionContext, name: str) -> None: async def _subreddit_rising(self, ctx: InteractionContext, name: str) -> None:
await ctx.defer() if not sub_name.match(name):
name = name.replace("r/", "")
if len(name) > 20 or len(name) < 3:
await ctx.send("Invalid Subreddit name", ephemeral=True) await ctx.send("Invalid Subreddit name", ephemeral=True)
return return
try: try:
await ctx.defer()
subreddit = await self.api.subreddit(name) subreddit = await self.api.subreddit(name)
await subreddit.load() await subreddit.load()
except (NotFound, Forbidden, Redirect) as e: except (NotFound, Forbidden, Redirect) as e:

View file

@ -166,7 +166,7 @@ class RemindmeCog(Extension):
) )
embed.set_thumbnail(url=ctx.author.display_avatar.url) embed.set_thumbnail(url=ctx.author.display_avatar.url)
await response.send(embed=embed, ephemeral=private) await response.send(embeds=embed, ephemeral=private)
async def get_reminders_embed( async def get_reminders_embed(
self, ctx: InteractionContext, reminders: List[Reminder] self, ctx: InteractionContext, reminders: List[Reminder]
@ -216,7 +216,7 @@ class RemindmeCog(Extension):
embed = await self.get_reminders_embed(ctx, reminders) embed = await self.get_reminders_embed(ctx, reminders)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@reminders.subcommand(sub_cmd_name="delete", sub_cmd_description="Delete a reminder") @reminders.subcommand(sub_cmd_name="delete", sub_cmd_description="Delete a reminder")
async def _delete(self, ctx: InteractionContext) -> None: async def _delete(self, ctx: InteractionContext) -> None:
@ -246,7 +246,7 @@ class RemindmeCog(Extension):
embed = await self.get_reminders_embed(ctx, reminders) embed = await self.get_reminders_embed(ctx, reminders)
message = await ctx.send( message = await ctx.send(
content=f"You have {len(reminders)} reminder(s) set:", content=f"You have {len(reminders)} reminder(s) set:",
embed=embed, embeds=embed,
components=components, components=components,
) )
@ -300,7 +300,7 @@ class RemindmeCog(Extension):
await context.context.edit_origin( await context.context.edit_origin(
content=f"Deleted {len(context.context.values)} reminder(s)", content=f"Deleted {len(context.context.values)} reminder(s)",
components=components, components=components,
embed=embed, embeds=embed,
) )
except asyncio.TimeoutError: except asyncio.TimeoutError:
for row in components: for row in components:
@ -328,7 +328,7 @@ class RemindmeCog(Extension):
) )
embed.set_thumbnail(url=ctx.author.display_avatar) embed.set_thumbnail(url=ctx.author.display_avatar)
await ctx.send(embed=embed, ephemeral=reminder.private) await ctx.send(embeds=embed, ephemeral=reminder.private)
if reminder.remind_at <= datetime.now(tz=timezone.utc) and not reminder.active: if reminder.remind_at <= datetime.now(tz=timezone.utc) and not reminder.active:
try: try:
await reminder.delete() await reminder.delete()

View file

@ -93,7 +93,7 @@ class RolegiverCog(Extension):
embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}") embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@rolegiver.subcommand(sub_cmd_name="remove", sub_cmd_description="Remove a role from rolegiver") @rolegiver.subcommand(sub_cmd_name="remove", sub_cmd_description="Remove a role from rolegiver")
@check(admin_or_permissions(Permissions.MANAGE_GUILD)) @check(admin_or_permissions(Permissions.MANAGE_GUILD))
@ -169,7 +169,7 @@ class RolegiverCog(Extension):
await context.context.edit_origin( await context.context.edit_origin(
content=f"Removed {len(context.context.values)} role(s)", content=f"Removed {len(context.context.values)} role(s)",
embed=embed, embeds=embed,
components=components, components=components,
) )
except asyncio.TimeoutError: except asyncio.TimeoutError:
@ -211,7 +211,7 @@ class RolegiverCog(Extension):
embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}") embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
role = SlashCommand(name="role", description="Get/Remove Rolegiver roles") role = SlashCommand(name="role", description="Get/Remove Rolegiver roles")
@ -284,7 +284,7 @@ class RolegiverCog(Extension):
for component in row.components: for component in row.components:
component.disabled = True component.disabled = True
await context.context.edit_origin(embed=embed, content="\u200b", components=components) await context.context.edit_origin(embeds=embed, content="\u200b", components=components)
except asyncio.TimeoutError: except asyncio.TimeoutError:
for row in components: for row in components:
for component in row.components: for component in row.components:
@ -362,7 +362,7 @@ class RolegiverCog(Extension):
for component in row.components: for component in row.components:
component.disabled = True component.disabled = True
await context.context.edit_origin(embed=embed, components=components, content="\u200b") await context.context.edit_origin(embeds=embed, components=components, content="\u200b")
except asyncio.TimeoutError: except asyncio.TimeoutError:
for row in components: for row in components:

View file

@ -246,7 +246,7 @@ class SettingsCog(Extension):
embed = build_embed(title="Current Settings", description="", fields=fields) embed = build_embed(title="Current Settings", description="", fields=fields)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@settings.subcommand(sub_cmd_name="clear", sub_cmd_description="Clear all settings") @settings.subcommand(sub_cmd_name="clear", sub_cmd_description="Clear all settings")
@check(admin_or_permissions(Permissions.MANAGE_GUILD)) @check(admin_or_permissions(Permissions.MANAGE_GUILD))

View file

@ -218,7 +218,7 @@ class StarboardCog(Extension):
if image_url: if image_url:
embed.set_image(url=image_url) embed.set_image(url=image_url)
star = await starboard.send(embed=embed) star = await starboard.send(embeds=embed)
await Star( await Star(
index=count, index=count,

View file

@ -118,7 +118,7 @@ class TemproleCog(Extension):
name=f"{user.username}#{user.discriminator}", icon_url=user.display_avatar.url name=f"{user.username}#{user.discriminator}", icon_url=user.display_avatar.url
) )
await ctx.send(embed=embed) await ctx.send(embeds=embed)
def setup(bot: Client) -> None: def setup(bot: Client) -> None:

View file

@ -67,7 +67,7 @@ class UtilCog(Extension):
) )
) )
embed = build_embed(title=title, description=desc, fields=fields, color=color) embed = build_embed(title=title, description=desc, fields=fields, color=color)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command( @slash_command(
name="logo", name="logo",
@ -132,7 +132,7 @@ class UtilCog(Extension):
embed = build_embed(title="Avatar", description="", fields=[], color="#00FFEE") embed = build_embed(title="Avatar", description="", fields=[], color="#00FFEE")
embed.set_image(url=avatar) embed.set_image(url=avatar)
embed.set_author(name=f"{user.username}#{user.discriminator}", icon_url=avatar) embed.set_author(name=f"{user.username}#{user.discriminator}", icon_url=avatar)
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command( @slash_command(
name="roleinfo", name="roleinfo",
@ -180,7 +180,7 @@ class UtilCog(Extension):
image_bytes.seek(0) image_bytes.seek(0)
color_show = File(image_bytes, file_name="color_show.png") color_show = File(image_bytes, file_name="color_show.png")
await ctx.send(embed=embed, file=color_show) await ctx.send(embeds=embed, file=color_show)
async def _userinfo(self, ctx: InteractionContext, user: User = None) -> None: async def _userinfo(self, ctx: InteractionContext, user: User = None) -> None:
await ctx.defer() await ctx.defer()
@ -222,7 +222,7 @@ class UtilCog(Extension):
embed.set_thumbnail(url=user.display_avatar.url) embed.set_thumbnail(url=user.display_avatar.url)
embed.set_footer(text=f"ID: {user.id}") embed.set_footer(text=f"ID: {user.id}")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command( @slash_command(
name="userinfo", name="userinfo",
@ -277,7 +277,7 @@ class UtilCog(Extension):
embed.set_thumbnail(url=guild.icon.url) embed.set_thumbnail(url=guild.icon.url)
embed.set_footer(text=f"ID: {guild.id} | Server Created") embed.set_footer(text=f"ID: {guild.id} | Server Created")
await ctx.send(embed=embed) await ctx.send(embeds=embed)
@slash_command( @slash_command(
name="pw", name="pw",
@ -372,7 +372,7 @@ class UtilCog(Extension):
EmbedField(name="ISO8601", value=timestamp.isoformat()), EmbedField(name="ISO8601", value=timestamp.isoformat()),
] ]
embed = build_embed(title="Converted Time", description=f"`{string}`", fields=fields) embed = build_embed(title="Converted Time", description=f"`{string}`", fields=fields)
await ctx.send(embed=embed, ephemeral=private) await ctx.send(embeds=embed, ephemeral=private)
@slash_command(name="support", description="Got issues?") @slash_command(name="support", description="Got issues?")
async def _support(self, ctx: InteractionContext) -> None: async def _support(self, ctx: InteractionContext) -> None:

View file

@ -36,9 +36,10 @@ def build_embed(
def modlog_embed( def modlog_embed(
member: Member, member: Member,
admin: Member, admin: Member,
log: AuditLogEntry,
title: str, title: str,
desc: str, desc: str,
log: AuditLogEntry = None,
reason: str = None,
) -> Embed: ) -> Embed:
"""Get modlog embed.""" """Get modlog embed."""
fields = [ fields = [
@ -47,8 +48,9 @@ def modlog_embed(
value=f"{admin.mention} ({admin.username}#{admin.discriminator})", value=f"{admin.mention} ({admin.username}#{admin.discriminator})",
), ),
] ]
if log.reason: if log and log.reason:
fields.append(EmbedField(name="Reason", value=log.reason, inline=False)) reason = reason or log.reason
fields.append(EmbedField(name="Reason", value=reason, inline=False))
embed = build_embed( embed = build_embed(
title=title, title=title,
description=desc, description=desc,

View file

@ -7,11 +7,18 @@ from jarvis_core.db.models import Action, Ban, Kick, Modlog, Mute, Setting, Warn
from naff import Client, Extension, InteractionContext from naff import Client, Extension, InteractionContext
from naff.models.discord.components import ActionRow, Button, ButtonStyles from naff.models.discord.components import ActionRow, Button, ButtonStyles
from naff.models.discord.embed import EmbedField from naff.models.discord.embed import EmbedField
from naff.models.discord.user import Member
from jarvis.utils import build_embed from jarvis.utils import build_embed
MODLOG_LOOKUP = {"Ban": Ban, "Kick": Kick, "Mute": Mute, "Warning": Warning} MODLOG_LOOKUP = {"Ban": Ban, "Kick": Kick, "Mute": Mute, "Warning": Warning}
IGNORE_COMMANDS = {"Ban": ["bans"], "Kick": [], "Mute": ["unmute"], "Warning": ["warnings"]} IGNORE_COMMANDS = {
"Ban": ["bans", "unban"],
"Kick": [],
"Mute": ["unmute"],
"Warning": ["warnings"],
}
VERB_LOOKUP = {"Ban": "banned", "Kick": "kicked", "Mute": "muted", "Warning": "warned"}
class ModcaseCog(Extension): class ModcaseCog(Extension):
@ -36,6 +43,12 @@ class ModcaseCog(Extension):
if not user and not ctx.target_id: if not user and not ctx.target_id:
self.logger.warning("Admin action %s missing user, exiting", name) self.logger.warning("Admin action %s missing user, exiting", name)
return return
if isinstance(user, str):
user = await self.bot.fetch_user(user)
if not user:
self.logger.warning("User does not exist")
return
if ctx.target_id: if ctx.target_id:
user = ctx.target user = ctx.target
coll = MODLOG_LOOKUP.get(name, None) coll = MODLOG_LOOKUP.get(name, None)
@ -67,7 +80,7 @@ class ModcaseCog(Extension):
embed.set_author(name=ctx.guild.name, icon_url=ctx.guild.icon.url, url=guild_url) embed.set_author(name=ctx.guild.name, icon_url=ctx.guild.icon.url, url=guild_url)
embed.set_thumbnail(url=ctx.guild.icon.url) embed.set_thumbnail(url=ctx.guild.icon.url)
try: try:
await user.send(embed=embed) await user.send(embeds=embed)
except Exception: except Exception:
self.logger.debug("User not warned of action due to closed DMs") self.logger.debug("User not warned of action due to closed DMs")
@ -78,6 +91,30 @@ class ModcaseCog(Extension):
await modlog.commit() await modlog.commit()
return return
modlog = await Setting.find_one(q(guild=ctx.guild.id, setting="modlog"))
if not modlog:
return
channel = await ctx.guild.fetch_channel(modlog.value)
if channel:
fields = (
EmbedField(name="Action Type", value=name, inline=False),
EmbedField(
name="Reason", value=kwargs.get("reason", None) or "N/A", inline=False
),
EmbedField(name="Admin", value=ctx.author.mention, inline=False),
)
embed = build_embed(
title="Admin action taken",
description=f"Admin action has been taken against {user.mention}",
fields=fields,
)
embed.set_author(
name=f"{user.username}#{user.discriminator}", icon_url=user.display_avatar.url
)
embed.set_footer(text=f"User ID: {user.id}")
await channel.send(embeds=embed)
lookup_key = f"{user.id}|{ctx.guild.id}" lookup_key = f"{user.id}|{ctx.guild.id}"
async with self.bot.redis.lock("lock|" + lookup_key): async with self.bot.redis.lock("lock|" + lookup_key):
@ -85,10 +122,6 @@ class ModcaseCog(Extension):
self.logger.debug(f"User {user.id} in {ctx.guild.id} already has pending case") self.logger.debug(f"User {user.id} in {ctx.guild.id} already has pending case")
return return
modlog = await Setting.find_one(q(guild=ctx.guild.id, setting="modlog"))
if not modlog:
return
channel = await ctx.guild.fetch_channel(modlog.value) channel = await ctx.guild.fetch_channel(modlog.value)
if not channel: if not channel:
self.logger.warn( self.logger.warn(
@ -102,16 +135,17 @@ class ModcaseCog(Extension):
description=f"Would you like to open a moderation case for {user.mention}?", description=f"Would you like to open a moderation case for {user.mention}?",
fields=[], fields=[],
) )
embed.set_author( avatar_url = user.avatar.url
name=user.username + "#" + user.discriminator, icon_url=user.display_avatar.url if isinstance(user, Member):
) avatar_url = user.display_avatar.url
embed.set_author(name=user.username + "#" + user.discriminator, icon_url=avatar_url)
components = [ components = [
ActionRow( ActionRow(
Button(style=ButtonStyles.RED, emoji="✖️", custom_id="modcase|no"), Button(style=ButtonStyles.RED, emoji="✖️", custom_id="modcase|no"),
Button(style=ButtonStyles.GREEN, emoji="✔️", custom_id="modcase|yes"), Button(style=ButtonStyles.GREEN, emoji="✔️", custom_id="modcase|yes"),
) )
] ]
message = await channel.send(embed=embed, components=components) message = await channel.send(embeds=embed, components=components)
await self.bot.redis.set( await self.bot.redis.set(
lookup_key, f"{name.lower()}|{action.id}", ex=timedelta(days=7) lookup_key, f"{name.lower()}|{action.id}", ex=timedelta(days=7)

398
poetry.lock generated
View file

@ -251,6 +251,17 @@ calendars = ["convertdate", "hijri-converter", "convertdate"]
fasttext = ["fasttext"] fasttext = ["fasttext"]
langdetect = ["langdetect"] langdetect = ["langdetect"]
[[package]]
name = "discord-typings"
version = "0.4.0"
description = "Maintained typings of payloads that Discord sends"
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
typing_extensions = ">=4,<5"
[[package]] [[package]]
name = "distro" name = "distro"
version = "1.7.0" version = "1.7.0"
@ -307,7 +318,7 @@ python-versions = ">=3.5"
[[package]] [[package]]
name = "jarvis-core" name = "jarvis-core"
version = "0.10.1" version = "0.10.2"
description = "JARVIS core" description = "JARVIS core"
category = "main" category = "main"
optional = false optional = false
@ -328,11 +339,11 @@ umongo = "^3.1.0"
type = "git" type = "git"
url = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git" url = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git"
reference = "main" reference = "main"
resolved_reference = "06a6dd8434b42cd4df7ee073eedbe2a3430ab379" resolved_reference = "7bb9b25f636fbcbea97e0924f2192a1e497258dd"
[[package]] [[package]]
name = "jinxed" name = "jinxed"
version = "1.1.0" version = "1.2.0"
description = "Jinxed Terminal Library" description = "Jinxed Terminal Library"
category = "main" category = "main"
optional = false optional = false
@ -343,7 +354,7 @@ ansicon = {version = "*", markers = "platform_system == \"Windows\""}
[[package]] [[package]]
name = "jurigged" name = "jurigged"
version = "0.5.0" version = "0.5.2"
description = "Live update of Python functions" description = "Live update of Python functions"
category = "main" category = "main"
optional = false optional = false
@ -353,26 +364,26 @@ python-versions = ">=3.8,<4.0"
blessed = ">=1.17.12,<2.0.0" blessed = ">=1.17.12,<2.0.0"
codefind = ">=0.1.3,<0.2.0" codefind = ">=0.1.3,<0.2.0"
ovld = ">=0.3.1,<0.4.0" ovld = ">=0.3.1,<0.4.0"
watchdog = ">=1.0.2,<2.0.0" watchdog = ">=1.0.2"
[package.extras] [package.extras]
develoop = ["giving (>=0.3.6,<0.4.0)", "rich (>=10.13.0,<11.0.0)", "hrepr (>=0.4.0,<0.5.0)"] develoop = ["giving (>=0.3.6,<0.4.0)", "rich (>=10.13.0,<11.0.0)", "hrepr (>=0.4.0,<0.5.0)"]
[[package]] [[package]]
name = "marshmallow" name = "marshmallow"
version = "3.15.0" version = "3.16.0"
description = "A lightweight library for converting complex datatypes to and from native Python datatypes." description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
packaging = "*" packaging = ">=17.0"
[package.extras] [package.extras]
dev = ["pytest", "pytz", "simplejson", "mypy (==0.940)", "flake8 (==4.0.1)", "flake8-bugbear (==22.1.11)", "pre-commit (>=2.4,<3.0)", "tox"] dev = ["pytest", "pytz", "simplejson", "mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)", "tox"]
docs = ["sphinx (==4.4.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.7)"] docs = ["sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.8)"]
lint = ["mypy (==0.940)", "flake8 (==4.0.1)", "flake8-bugbear (==22.1.11)", "pre-commit (>=2.4,<3.0)"] lint = ["mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)"]
tests = ["pytest", "pytz", "simplejson"] tests = ["pytest", "pytz", "simplejson"]
[[package]] [[package]]
@ -408,6 +419,25 @@ category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
[[package]]
name = "naff"
version = "1.0.0"
description = "Not another freaking fork"
category = "main"
optional = false
python-versions = ">=3.10"
[package.dependencies]
aiohttp = "*"
attrs = "*"
discord-typings = "*"
tomli = "*"
[package.extras]
all = ["PyNaCl (>=1.5.0,<1.6)", "cchardet", "aiodns", "orjson", "brotli"]
speedup = ["cchardet", "aiodns", "orjson", "brotli"]
voice = ["PyNaCl (>=1.5.0,<1.6)"]
[[package]] [[package]]
name = "nanoid" name = "nanoid"
version = "2.0.0" version = "2.0.0"
@ -418,7 +448,7 @@ python-versions = "*"
[[package]] [[package]]
name = "numpy" name = "numpy"
version = "1.22.3" version = "1.22.4"
description = "NumPy is the fundamental package for array computing with Python." description = "NumPy is the fundamental package for array computing with Python."
category = "main" category = "main"
optional = false optional = false
@ -492,11 +522,11 @@ python-versions = ">=3.10"
aiohttp = {version = "3.8.1", markers = "python_version >= \"3.6\""} aiohttp = {version = "3.8.1", markers = "python_version >= \"3.6\""}
aiosignal = {version = "1.2.0", markers = "python_version >= \"3.6\""} aiosignal = {version = "1.2.0", markers = "python_version >= \"3.6\""}
async-timeout = {version = "4.0.2", markers = "python_version >= \"3.6\""} async-timeout = {version = "4.0.2", markers = "python_version >= \"3.6\""}
attrs = {version = "21.4.0", markers = "python_version >= \"3.6\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.5.0\" and python_version >= \"3.6\""} attrs = {version = "21.4.0", markers = "python_version >= \"3.6\""}
certifi = {version = "2021.10.8", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.6.0\""} certifi = {version = "2021.10.8", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.6.0\""}
charset-normalizer = {version = "2.0.12", markers = "python_full_version >= \"3.6.0\" and python_version >= \"3.6\""} charset-normalizer = {version = "2.0.12", markers = "python_full_version >= \"3.6.0\""}
frozenlist = {version = "1.3.0", markers = "python_version >= \"3.7\""} frozenlist = {version = "1.3.0", markers = "python_version >= \"3.7\""}
idna = {version = "3.3", markers = "python_version >= \"3.6\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.6.0\" and python_version >= \"3.6\""} idna = {version = "3.3", markers = "python_full_version >= \"3.6.0\""}
multidict = {version = "6.0.2", markers = "python_version >= \"3.7\""} multidict = {version = "6.0.2", markers = "python_version >= \"3.7\""}
pycryptodome = {version = "3.14.1", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.5.0\""} pycryptodome = {version = "3.14.1", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.5.0\""}
requests = {version = "2.27.1", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.6.0\""} requests = {version = "2.27.1", markers = "python_version >= \"2.7\" and python_full_version < \"3.0.0\" or python_full_version >= \"3.6.0\""}
@ -505,7 +535,7 @@ yarl = {version = "1.7.2", markers = "python_version >= \"3.6\""}
[[package]] [[package]]
name = "pillow" name = "pillow"
version = "9.1.0" version = "9.1.1"
description = "Python Imaging Library (Fork)" description = "Python Imaging Library (Fork)"
category = "main" category = "main"
optional = false optional = false
@ -525,14 +555,14 @@ python-versions = ">=3.7"
[[package]] [[package]]
name = "psutil" name = "psutil"
version = "5.9.0" version = "5.9.1"
description = "Cross-platform lib for process and system monitoring in Python." description = "Cross-platform lib for process and system monitoring in Python."
category = "main" category = "main"
optional = false optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.extras] [package.extras]
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"]
[[package]] [[package]]
name = "pycryptodome" name = "pycryptodome"
@ -570,7 +600,7 @@ zstd = ["zstandard"]
[[package]] [[package]]
name = "pyparsing" name = "pyparsing"
version = "3.0.8" version = "3.0.9"
description = "pyparsing module - Classes and methods to define and execute parsing grammars" description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main" category = "main"
optional = false optional = false
@ -592,7 +622,7 @@ six = ">=1.5"
[[package]] [[package]]
name = "python-gitlab" name = "python-gitlab"
version = "3.4.0" version = "3.5.0"
description = "Interact with GitLab API" description = "Interact with GitLab API"
category = "main" category = "main"
optional = false optional = false
@ -687,7 +717,7 @@ requests = ">=2.0.1,<3.0.0"
[[package]] [[package]]
name = "rich" name = "rich"
version = "12.3.0" version = "12.4.4"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
category = "main" category = "main"
optional = false optional = false
@ -702,7 +732,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"]
[[package]] [[package]]
name = "rook" name = "rook"
version = "0.1.171" version = "0.1.175"
description = "Rook is a Python package for on the fly debugging and data extraction for application in production" description = "Rook is a Python package for on the fly debugging and data extraction for application in production"
category = "main" category = "main"
optional = false optional = false
@ -736,9 +766,17 @@ category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
[[package]]
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
category = "main"
optional = false
python-versions = ">=3.7"
[[package]] [[package]]
name = "tweepy" name = "tweepy"
version = "4.8.0" version = "4.10.0"
description = "Twitter library for Python" description = "Twitter library for Python"
category = "main" category = "main"
optional = false optional = false
@ -750,8 +788,8 @@ requests = ">=2.27.0,<3"
requests-oauthlib = ">=1.2.0,<2" requests-oauthlib = ">=1.2.0,<2"
[package.extras] [package.extras]
async = ["aiohttp (>=3.7.3,<4)"] async = ["aiohttp (>=3.7.3,<4)", "async-lru (>=1.0.3,<2)"]
dev = ["coveralls (>=2.1.0)", "tox (>=3.14.0)"] dev = ["coverage (>=4.4.2)", "coveralls (>=2.1.0)", "tox (>=3.21.0)"]
socks = ["requests[socks] (>=2.27.0,<3)"] socks = ["requests[socks] (>=2.27.0,<3)"]
test = ["vcrpy (>=1.10.3)"] test = ["vcrpy (>=1.10.3)"]
@ -843,14 +881,14 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]] [[package]]
name = "watchdog" name = "watchdog"
version = "1.0.2" version = "2.1.8"
description = "Filesystem events monitoring" description = "Filesystem events monitoring"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
[package.extras] [package.extras]
watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] watchmedo = ["PyYAML (>=3.10)"]
[[package]] [[package]]
name = "wcwidth" name = "wcwidth"
@ -888,7 +926,7 @@ multidict = ">=4.0"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.10" python-versions = "^3.10"
content-hash = "8bb2b59de1ccb8f5e5588ae3ac600e7fb6d7f638224c9cc24228f79e666aec63" content-hash = "b59817a834a97d4cd983be281913fdb695599762a854c13105e91b3ef5a8f21a"
[metadata.files] [metadata.files]
aiofile = [ aiofile = [
@ -1054,6 +1092,10 @@ dateparser = [
{file = "dateparser-1.1.1-py2.py3-none-any.whl", hash = "sha256:9600874312ff28a41f96ec7ccdc73be1d1c44435719da47fea3339d55ff5a628"}, {file = "dateparser-1.1.1-py2.py3-none-any.whl", hash = "sha256:9600874312ff28a41f96ec7ccdc73be1d1c44435719da47fea3339d55ff5a628"},
{file = "dateparser-1.1.1.tar.gz", hash = "sha256:038196b1f12c7397e38aad3d61588833257f6f552baa63a1499e6987fa8d42d9"}, {file = "dateparser-1.1.1.tar.gz", hash = "sha256:038196b1f12c7397e38aad3d61588833257f6f552baa63a1499e6987fa8d42d9"},
] ]
discord-typings = [
{file = "discord-typings-0.4.0.tar.gz", hash = "sha256:66bce666194e8f006914f788f940265c009cce9b63f9a8ce2bc7931d3d3ef11c"},
{file = "discord_typings-0.4.0-py3-none-any.whl", hash = "sha256:a390b614cbcbd82af083660c12e46536b4b790ac026f8d43bdd11c8953837ca0"},
]
distro = [ distro = [
{file = "distro-1.7.0-py3-none-any.whl", hash = "sha256:d596311d707e692c2160c37807f83e3820c5d539d5a83e87cfb6babd8ba3a06b"}, {file = "distro-1.7.0-py3-none-any.whl", hash = "sha256:d596311d707e692c2160c37807f83e3820c5d539d5a83e87cfb6babd8ba3a06b"},
{file = "distro-1.7.0.tar.gz", hash = "sha256:151aeccf60c216402932b52e40ee477a939f8d58898927378a02abbe852c1c39"}, {file = "distro-1.7.0.tar.gz", hash = "sha256:151aeccf60c216402932b52e40ee477a939f8d58898927378a02abbe852c1c39"},
@ -1137,16 +1179,16 @@ idna = [
] ]
jarvis-core = [] jarvis-core = []
jinxed = [ jinxed = [
{file = "jinxed-1.1.0-py2.py3-none-any.whl", hash = "sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8"}, {file = "jinxed-1.2.0-py2.py3-none-any.whl", hash = "sha256:cfc2b2e4e3b4326954d546ba6d6b9a7a796ddcb0aef8d03161d005177eb0d48b"},
{file = "jinxed-1.1.0.tar.gz", hash = "sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305"}, {file = "jinxed-1.2.0.tar.gz", hash = "sha256:032acda92d5c57cd216033cbbd53de731e6ed50deb63eb4781336ca55f72cda5"},
] ]
jurigged = [ jurigged = [
{file = "jurigged-0.5.0-py3-none-any.whl", hash = "sha256:28d86ca6d97669bc183773f7537e59f50fdd36e7637092fc2451b91bcc935d62"}, {file = "jurigged-0.5.2-py3-none-any.whl", hash = "sha256:410ff6199c659108dace9179507342883fe2fffec1966fd19709f9d59fd69e24"},
{file = "jurigged-0.5.0.tar.gz", hash = "sha256:f23c3536b1654d2618d6e6b34f0752acf377c1b35283889d3a28663a7b1f72cb"}, {file = "jurigged-0.5.2.tar.gz", hash = "sha256:de1d4daeb99c0299eaa86f691d35cb1eab3bfa836cfe9a3551a56f3829479e3b"},
] ]
marshmallow = [ marshmallow = [
{file = "marshmallow-3.15.0-py3-none-any.whl", hash = "sha256:ff79885ed43b579782f48c251d262e062bce49c65c52412458769a4fb57ac30f"}, {file = "marshmallow-3.16.0-py3-none-any.whl", hash = "sha256:53a1e0ee69f79e1f3e80d17393b25cfc917eda52f859e8183b4af72c3390c1f1"},
{file = "marshmallow-3.15.0.tar.gz", hash = "sha256:2aaaab4f01ef4f5a011a21319af9fce17ab13bf28a026d1252adab0e035648d5"}, {file = "marshmallow-3.16.0.tar.gz", hash = "sha256:a762c1d8b2bcb0e5c8e964850d03f9f3bffd6a12b626f3c14b9d6b1841999af5"},
] ]
mongoengine = [ mongoengine = [
{file = "mongoengine-0.23.1-py3-none-any.whl", hash = "sha256:3d1c8b9f5d43144bd726a3f01e58d2831c6fb112960a4a60b3a26fa85e026ab3"}, {file = "mongoengine-0.23.1-py3-none-any.whl", hash = "sha256:3d1c8b9f5d43144bd726a3f01e58d2831c6fb112960a4a60b3a26fa85e026ab3"},
@ -1217,31 +1259,37 @@ multidict = [
{file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
{file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
] ]
naff = [
{file = "naff-1.0.0-py3-none-any.whl", hash = "sha256:9a46e127c9d2f3bb882ea0d7f8ac5b18c3798f303218eda4d64a1824bcdf3d6f"},
{file = "naff-1.0.0.tar.gz", hash = "sha256:c7c96ad9fef9f59278db837c13c3e104eb4eaa436ef97bfb193c54db6efa52cc"},
]
nanoid = [ nanoid = [
{file = "nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb"}, {file = "nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb"},
{file = "nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68"}, {file = "nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68"},
] ]
numpy = [ numpy = [
{file = "numpy-1.22.3-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:92bfa69cfbdf7dfc3040978ad09a48091143cffb778ec3b03fa170c494118d75"}, {file = "numpy-1.22.4-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ba9ead61dfb5d971d77b6c131a9dbee62294a932bf6a356e48c75ae684e635b3"},
{file = "numpy-1.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8251ed96f38b47b4295b1ae51631de7ffa8260b5b087808ef09a39a9d66c97ab"}, {file = "numpy-1.22.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:1ce7ab2053e36c0a71e7a13a7475bd3b1f54750b4b433adc96313e127b870887"},
{file = "numpy-1.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48a3aecd3b997bf452a2dedb11f4e79bc5bfd21a1d4cc760e703c31d57c84b3e"}, {file = "numpy-1.22.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7228ad13744f63575b3a972d7ee4fd61815b2879998e70930d4ccf9ec721dce0"},
{file = "numpy-1.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3bae1a2ed00e90b3ba5f7bd0a7c7999b55d609e0c54ceb2b076a25e345fa9f4"}, {file = "numpy-1.22.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43a8ca7391b626b4c4fe20aefe79fec683279e31e7c79716863b4b25021e0e74"},
{file = "numpy-1.22.3-cp310-cp310-win32.whl", hash = "sha256:f950f8845b480cffe522913d35567e29dd381b0dc7e4ce6a4a9f9156417d2430"}, {file = "numpy-1.22.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a911e317e8c826ea632205e63ed8507e0dc877dcdc49744584dfc363df9ca08c"},
{file = "numpy-1.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:08d9b008d0156c70dc392bb3ab3abb6e7a711383c3247b410b39962263576cd4"}, {file = "numpy-1.22.4-cp310-cp310-win32.whl", hash = "sha256:9ce7df0abeabe7fbd8ccbf343dc0db72f68549856b863ae3dd580255d009648e"},
{file = "numpy-1.22.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:201b4d0552831f7250a08d3b38de0d989d6f6e4658b709a02a73c524ccc6ffce"}, {file = "numpy-1.22.4-cp310-cp310-win_amd64.whl", hash = "sha256:3e1ffa4748168e1cc8d3cde93f006fe92b5421396221a02f2274aab6ac83b077"},
{file = "numpy-1.22.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8c1f39caad2c896bc0018f699882b345b2a63708008be29b1f355ebf6f933fe"}, {file = "numpy-1.22.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:59d55e634968b8f77d3fd674a3cf0b96e85147cd6556ec64ade018f27e9479e1"},
{file = "numpy-1.22.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:568dfd16224abddafb1cbcce2ff14f522abe037268514dd7e42c6776a1c3f8e5"}, {file = "numpy-1.22.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c1d937820db6e43bec43e8d016b9b3165dcb42892ea9f106c70fb13d430ffe72"},
{file = "numpy-1.22.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ca688e1b9b95d80250bca34b11a05e389b1420d00e87a0d12dc45f131f704a1"}, {file = "numpy-1.22.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4c5d5eb2ec8da0b4f50c9a843393971f31f1d60be87e0fb0917a49133d257d6"},
{file = "numpy-1.22.3-cp38-cp38-win32.whl", hash = "sha256:e7927a589df200c5e23c57970bafbd0cd322459aa7b1ff73b7c2e84d6e3eae62"}, {file = "numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64f56fc53a2d18b1924abd15745e30d82a5782b2cab3429aceecc6875bd5add0"},
{file = "numpy-1.22.3-cp38-cp38-win_amd64.whl", hash = "sha256:07a8c89a04997625236c5ecb7afe35a02af3896c8aa01890a849913a2309c676"}, {file = "numpy-1.22.4-cp38-cp38-win32.whl", hash = "sha256:fb7a980c81dd932381f8228a426df8aeb70d59bbcda2af075b627bbc50207cba"},
{file = "numpy-1.22.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2c10a93606e0b4b95c9b04b77dc349b398fdfbda382d2a39ba5a822f669a0123"}, {file = "numpy-1.22.4-cp38-cp38-win_amd64.whl", hash = "sha256:e96d7f3096a36c8754207ab89d4b3282ba7b49ea140e4973591852c77d09eb76"},
{file = "numpy-1.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fade0d4f4d292b6f39951b6836d7a3c7ef5b2347f3c420cd9820a1d90d794802"}, {file = "numpy-1.22.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:4c6036521f11a731ce0648f10c18ae66d7143865f19f7299943c985cdc95afb5"},
{file = "numpy-1.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bfb1bb598e8229c2d5d48db1860bcf4311337864ea3efdbe1171fb0c5da515d"}, {file = "numpy-1.22.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:b89bf9b94b3d624e7bb480344e91f68c1c6c75f026ed6755955117de00917a7c"},
{file = "numpy-1.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97098b95aa4e418529099c26558eeb8486e66bd1e53a6b606d684d0c3616b168"}, {file = "numpy-1.22.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d487e06ecbf1dc2f18e7efce82ded4f705f4bd0cd02677ffccfb39e5c284c7e"},
{file = "numpy-1.22.3-cp39-cp39-win32.whl", hash = "sha256:fdf3c08bce27132395d3c3ba1503cac12e17282358cb4bddc25cc46b0aca07aa"}, {file = "numpy-1.22.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3eb268dbd5cfaffd9448113539e44e2dd1c5ca9ce25576f7c04a5453edc26fa"},
{file = "numpy-1.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:639b54cdf6aa4f82fe37ebf70401bbb74b8508fddcf4797f9fe59615b8c5813a"}, {file = "numpy-1.22.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37431a77ceb9307c28382c9773da9f306435135fae6b80b62a11c53cfedd8802"},
{file = "numpy-1.22.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c34ea7e9d13a70bf2ab64a2532fe149a9aced424cd05a2c4ba662fd989e3e45f"}, {file = "numpy-1.22.4-cp39-cp39-win32.whl", hash = "sha256:cc7f00008eb7d3f2489fca6f334ec19ca63e31371be28fd5dad955b16ec285bd"},
{file = "numpy-1.22.3.zip", hash = "sha256:dbc7601a3b7472d559dc7b933b18b4b66f9aa7452c120e87dfb33d02008c8a18"}, {file = "numpy-1.22.4-cp39-cp39-win_amd64.whl", hash = "sha256:f0725df166cf4785c0bc4cbfb320203182b1ecd30fee6e541c8752a92df6aa32"},
{file = "numpy-1.22.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0791fbd1e43bf74b3502133207e378901272f3c156c4df4954cad833b1380207"},
{file = "numpy-1.22.4.zip", hash = "sha256:425b390e4619f58d8526b3dcf656dde069133ae5c240229821f01b5f44ea07af"},
] ]
oauthlib = [ oauthlib = [
{file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"}, {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"},
@ -1303,44 +1351,44 @@ pastypy = [
{file = "pastypy-1.0.2.tar.gz", hash = "sha256:81e0c4a65ec40c85d62685627b64d26397304ac91d68ddc80f833974504c13b8"}, {file = "pastypy-1.0.2.tar.gz", hash = "sha256:81e0c4a65ec40c85d62685627b64d26397304ac91d68ddc80f833974504c13b8"},
] ]
pillow = [ pillow = [
{file = "Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea"}, {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"},
{file = "Pillow-9.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652"}, {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"},
{file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a"}, {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"},
{file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7"}, {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"},
{file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e"}, {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"},
{file = "Pillow-9.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3"}, {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"},
{file = "Pillow-9.1.0-cp310-cp310-win32.whl", hash = "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160"}, {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"},
{file = "Pillow-9.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033"}, {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"},
{file = "Pillow-9.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c"}, {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"},
{file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165"}, {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"},
{file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a"}, {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"},
{file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2"}, {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"},
{file = "Pillow-9.1.0-cp37-cp37m-win32.whl", hash = "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244"}, {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"},
{file = "Pillow-9.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef"}, {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"},
{file = "Pillow-9.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512"}, {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"},
{file = "Pillow-9.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477"}, {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"},
{file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b"}, {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"},
{file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378"}, {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"},
{file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e"}, {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"},
{file = "Pillow-9.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5"}, {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"},
{file = "Pillow-9.1.0-cp38-cp38-win32.whl", hash = "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a"}, {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"},
{file = "Pillow-9.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34"}, {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"},
{file = "Pillow-9.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717"}, {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"},
{file = "Pillow-9.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581"}, {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"},
{file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6"}, {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"},
{file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4"}, {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"},
{file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331"}, {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"},
{file = "Pillow-9.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8"}, {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"},
{file = "Pillow-9.1.0-cp39-cp39-win32.whl", hash = "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58"}, {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"},
{file = "Pillow-9.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595"}, {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"},
{file = "Pillow-9.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481"}, {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"},
{file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0"}, {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"},
{file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a"}, {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"},
{file = "Pillow-9.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7"}, {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"},
{file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3"}, {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"},
{file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8"}, {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"},
{file = "Pillow-9.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458"}, {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"},
{file = "Pillow-9.1.0.tar.gz", hash = "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97"}, {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"},
] ]
protobuf = [ protobuf = [
{file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"},
@ -1369,38 +1417,38 @@ protobuf = [
{file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"},
] ]
psutil = [ psutil = [
{file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"},
{file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"},
{file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"}, {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"},
{file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"}, {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"},
{file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"}, {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"},
{file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"}, {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"},
{file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"}, {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"},
{file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"}, {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"},
{file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"}, {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"},
{file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"}, {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"},
{file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"}, {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"},
{file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"}, {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"},
{file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"}, {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"},
{file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"}, {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"},
{file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"}, {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"},
{file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"}, {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"},
{file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"}, {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"},
{file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"}, {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"},
{file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"}, {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"},
{file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"}, {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"},
{file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"}, {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"},
{file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"}, {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"},
{file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"}, {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"},
{file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"}, {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"},
{file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"}, {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"},
{file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"}, {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"},
{file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"}, {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"},
{file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"}, {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"},
{file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"}, {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"},
{file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"}, {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"},
{file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"}, {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"},
{file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"}, {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"},
] ]
pycryptodome = [ pycryptodome = [
{file = "pycryptodome-3.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:75a3a364fee153e77ed889c957f6f94ec6d234b82e7195b117180dcc9fc16f96"}, {file = "pycryptodome-3.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:75a3a364fee153e77ed889c957f6f94ec6d234b82e7195b117180dcc9fc16f96"},
@ -1548,16 +1596,16 @@ pymongo = [
{file = "pymongo-3.12.3.tar.gz", hash = "sha256:0a89cadc0062a5e53664dde043f6c097172b8c1c5f0094490095282ff9995a5f"}, {file = "pymongo-3.12.3.tar.gz", hash = "sha256:0a89cadc0062a5e53664dde043f6c097172b8c1c5f0094490095282ff9995a5f"},
] ]
pyparsing = [ pyparsing = [
{file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
{file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
] ]
python-dateutil = [ python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
] ]
python-gitlab = [ python-gitlab = [
{file = "python-gitlab-3.4.0.tar.gz", hash = "sha256:6180b81ee2f265ad8d8412956a1740b4d3ceca7b28ae2f707dfe62375fed0082"}, {file = "python-gitlab-3.5.0.tar.gz", hash = "sha256:29ae7fb9b8c9aeb2e6e19bd2fd04867e93ecd7af719978ce68fac0cf116ab30d"},
{file = "python_gitlab-3.4.0-py3-none-any.whl", hash = "sha256:251b63f0589d51f854516948c84e9eb8df26e1e9dea595cf86b43f17c43007dd"}, {file = "python_gitlab-3.5.0-py3-none-any.whl", hash = "sha256:73b5aa6502efa557ee1a51227cceb0243fac5529627da34f08c5f265bf50417c"},
] ]
pytz = [ pytz = [
{file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
@ -1691,30 +1739,30 @@ requests-toolbelt = [
{file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
] ]
rich = [ rich = [
{file = "rich-12.3.0-py3-none-any.whl", hash = "sha256:0eb63013630c6ee1237e0e395d51cb23513de6b5531235e33889e8842bdf3a6f"}, {file = "rich-12.4.4-py3-none-any.whl", hash = "sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"},
{file = "rich-12.3.0.tar.gz", hash = "sha256:7e8700cda776337036a712ff0495b04052fb5f957c7dfb8df997f88350044b64"}, {file = "rich-12.4.4.tar.gz", hash = "sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2"},
] ]
rook = [ rook = [
{file = "rook-0.1.171-cp27-cp27m-macosx_10_11_x86_64.whl", hash = "sha256:290ee068d18992fa5c27ebdb5c8745853c682cb44f26bedf858d323832ec8b74"}, {file = "rook-0.1.175-cp27-cp27m-macosx_10_11_x86_64.whl", hash = "sha256:e815c1986ff1d1a61d183320c2e5757140954004cb6a4c04f7a60c7db22a61d0"},
{file = "rook-0.1.171-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:96bd8983ad478f50ca22c524ec20fe095945f85c027b4d316ba46e844976bc35"}, {file = "rook-0.1.175-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3475061338ddabf91b07bf54a3baadc696002a4856e167ebdfc426adaea04237"},
{file = "rook-0.1.171-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f36b614a85325cfd41e8e4a75ae29e4d7b91aac5981c0c1c4c36452e183e234e"}, {file = "rook-0.1.175-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:17d0bb492b04b3ecc1e1bf155ce68b33da202aa4bc11e7d755556093ea5379bf"},
{file = "rook-0.1.171-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:b2d530a77fa1ebb59b15f7efbe810101fdbf7a10851a355c898ddedbfdafb513"}, {file = "rook-0.1.175-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:a1e9c228be3a12ad95b1f252f52c3fdf437dc7514632419d09a869e2fd75aea0"},
{file = "rook-0.1.171-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a8f4a998c5e8c03dc5a844b9831d916d8e7b79e704600f8d91b2886ef0fe62a"}, {file = "rook-0.1.175-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4eaa6ed65b898119de15c66dd57bf0918cc12e9165ca73acdc850a62837230e2"},
{file = "rook-0.1.171-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:01fa10624a6c773ba8b71d9cd397fd37425ca484f0e64f15a9ee6b3214351cdb"}, {file = "rook-0.1.175-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:f2a2651c81cbbc401325d16de9bf45c1d0e30fd7cf4cb6e5812aef583501493b"},
{file = "rook-0.1.171-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91db652819b6f6f99a5789bbd840cc46036a54908202492926ff62fbbaf9dcc5"}, {file = "rook-0.1.175-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0fb349e843025cd09fcdc1427b580e5639760dafb455b47559199d8ec6751744"},
{file = "rook-0.1.171-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:d3770f3cc4626e56718d7c998024ca6cc75e240b82269b924b488e3d3f73e20c"}, {file = "rook-0.1.175-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:db0090b048fb19406a172676fe4cba9c6ab75af3f8a5c286f753be0a0baa1967"},
{file = "rook-0.1.171-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c7e20ecb27ceec33e4ca4efa4c77664d13ff47f64d176eabf81d97a481c8ed4"}, {file = "rook-0.1.175-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:488cf082f4815f806af0cd8ed384605a5d1694138776789ef437e922082c0f0d"},
{file = "rook-0.1.171-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:aacdb2aea2ca559ce3d93eddea9da70d12b10d8b710c049a52781d88dc2e3b6f"}, {file = "rook-0.1.175-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f987ac013af99f10083a98b82cbc2ba26a2af73b567296837cbf686cc39269d7"},
{file = "rook-0.1.171-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:6add21f04e3c28242638483cf34830fc931c61aac4bf47a88197f04273835e1f"}, {file = "rook-0.1.175-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:a8950cb043d732222478e74809ce1b68d4f650919f41261ba42decd082c392a4"},
{file = "rook-0.1.171-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f8d478bda592fcc20fb73334fa24630cf2467c1faca81a1004908fc581d987b3"}, {file = "rook-0.1.175-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8880d0f759a5af4fca1d2243cf3e065600840641330ce710c6bbc2ab4b6c4a38"},
{file = "rook-0.1.171-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a30e32da91b29629fc279990cdb952d6a7cd4945fbafafd7ad88fd71cf9fa624"}, {file = "rook-0.1.175-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:96dd16e6ad8c6da907520f60deca45d60283e17a65e0ef6cc051a4ff8c828097"},
{file = "rook-0.1.171-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:d87f98c6f059571c40bcb395480cb10a33872e96c1520e8ea98d4703003c148c"}, {file = "rook-0.1.175-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:dff624670aaf43cb6df468201cb52a6ee2e79d00e4bb671749fd80376bc89085"},
{file = "rook-0.1.171-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4474484145b6b4676fc51634dd979376caea7b5722694ec38132ba0e545c85ae"}, {file = "rook-0.1.175-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fcb5906c46b30ddae20250a71891c1f6f3e0d8b535a69a4fc288608865c72456"},
{file = "rook-0.1.171-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:332f572df6a96f6e33e07d0354dfabade1d46a0aeb1aa54e25841bc1fd4239d2"}, {file = "rook-0.1.175-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7e15ccda31c4e3fae973c39e775147205bc1e27c23e514716a397572f9e7a0e7"},
{file = "rook-0.1.171-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:b56ee99de3598a4dc76b25a66b09967f45bbab9c9dec3b6c91b03d4eed1cad7a"}, {file = "rook-0.1.175-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:95035278a1571852488bf629e2000fcf816ab06249abff1474200b132e422987"},
{file = "rook-0.1.171-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6bc2dc7a329c7bcac29cae88ed486aba8452437456ee515b3e0ffcb1a1c8dfc9"}, {file = "rook-0.1.175-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3daaed3d5a518fb661e635a3c2b0cf4365c75dcd79a21f66404bd3835bf47958"},
{file = "rook-0.1.171-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e9b96ab66de7616f6e65ad3f30f2bd442ee966a639faef3afcc740c16ed6c00"}, {file = "rook-0.1.175-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eb2783d654093f9e8fa2508dd5ee29c9fff90ccb075ac06359b103dc849a18db"},
{file = "rook-0.1.171.tar.gz", hash = "sha256:3ede95c8461546fd0baac2618397458ab7ddbbcb3f56e925fe21a871c70376c9"}, {file = "rook-0.1.175.tar.gz", hash = "sha256:b6d92298bfd170c8ff0e4b13ba870079f44644386e12c08244e182421b471004"},
] ]
six = [ six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@ -1724,9 +1772,13 @@ smmap = [
{file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"},
{file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"},
] ]
tomli = [
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
tweepy = [ tweepy = [
{file = "tweepy-4.8.0-py2.py3-none-any.whl", hash = "sha256:f281bb53ab3ba999ff5e3d743d92d3ed543ee5551c7250948f9e56190ec7a43e"}, {file = "tweepy-4.10.0-py3-none-any.whl", hash = "sha256:f0abbd234a588e572f880f99a094ac321217ff3eade6c0eca118ed6db8e2cf0a"},
{file = "tweepy-4.8.0.tar.gz", hash = "sha256:8ba5774ac1663b09e5fce1b030daf076f2c9b3ddbf2e7e7ea0bae762e3b1fe3e"}, {file = "tweepy-4.10.0.tar.gz", hash = "sha256:7f92574920c2f233663fff154745fc2bb0d10aedc23617379a912d8e4fefa399"},
] ]
typing-extensions = [ typing-extensions = [
{file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
@ -1757,23 +1809,31 @@ urllib3 = [
{file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
] ]
watchdog = [ watchdog = [
{file = "watchdog-1.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e2a531e71be7b5cc3499ae2d1494d51b6a26684bcc7c3146f63c810c00e8a3cc"}, {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:676263bee67b165f16b05abc52acc7a94feac5b5ab2449b491f1a97638a79277"},
{file = "watchdog-1.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7c73edef48f4ceeebb987317a67e0080e5c9228601ff67b3c4062fa020403c7"}, {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aa68d2d9a89d686fae99d28a6edf3b18595e78f5adf4f5c18fbfda549ac0f20c"},
{file = "watchdog-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e6574395aa6c1e14e0f030d9d7f35c2340a6cf95d5671354ce876ac3ffdd4d"}, {file = "watchdog-2.1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e2e51c53666850c3ecffe9d265fc5d7351db644de17b15e9c685dd3cdcd6f97"},
{file = "watchdog-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27d9b4666938d5d40afdcdf2c751781e9ce36320788b70208d0f87f7401caf93"}, {file = "watchdog-2.1.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7721ac736170b191c50806f43357407138c6748e4eb3e69b071397f7f7aaeedd"},
{file = "watchdog-1.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f1ade0d0802503fda4340374d333408831cff23da66d7e711e279ba50fe6c4a"}, {file = "watchdog-2.1.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce7376aed3da5fd777483fe5ebc8475a440c6d18f23998024f832134b2938e7b"},
{file = "watchdog-1.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f1d0e878fd69129d0d68b87cee5d9543f20d8018e82998efb79f7e412d42154a"}, {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f9ee4c6bf3a1b2ed6be90a2d78f3f4bbd8105b6390c04a86eb48ed67bbfa0b0b"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d948ad9ab9aba705f9836625b32e965b9ae607284811cd98334423f659ea537a"}, {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:68dbe75e0fa1ba4d73ab3f8e67b21770fbed0651d32ce515cd38919a26873266"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:101532b8db506559e52a9b5d75a308729b3f68264d930670e6155c976d0e52a0"}, {file = "watchdog-2.1.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0c520009b8cce79099237d810aaa19bc920941c268578436b62013b2f0102320"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:b1d723852ce90a14abf0ec0ca9e80689d9509ee4c9ee27163118d87b564a12ac"}, {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efcc8cbc1b43902571b3dce7ef53003f5b97fe4f275fe0489565fc6e2ebe3314"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:68744de2003a5ea2dfbb104f9a74192cf381334a9e2c0ed2bbe1581828d50b61"}, {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:746e4c197ec1083581bb1f64d07d1136accf03437badb5ff8fcb862565c193b2"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:602dbd9498592eacc42e0632c19781c3df1728ef9cbab555fab6778effc29eeb"}, {file = "watchdog-2.1.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ae17b6be788fb8e4d8753d8d599de948f0275a232416e16436363c682c6f850"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18"}, {file = "watchdog-2.1.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ddde157dc1447d8130cb5b8df102fad845916fe4335e3d3c3f44c16565becbb7"},
{file = "watchdog-1.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:5f1f3b65142175366ba94c64d8d4c8f4015825e0beaacee1c301823266b47b9b"}, {file = "watchdog-2.1.8-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4978db33fc0934c92013ee163a9db158ec216099b69fce5aec790aba704da412"},
{file = "watchdog-1.0.2-py3-none-win32.whl", hash = "sha256:57f05e55aa603c3b053eed7e679f0a83873c540255b88d58c6223c7493833bac"}, {file = "watchdog-2.1.8-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b962de4d7d92ff78fb2dbc6a0cb292a679dea879a0eb5568911484d56545b153"},
{file = "watchdog-1.0.2-py3-none-win_amd64.whl", hash = "sha256:f84146f7864339c8addf2c2b9903271df21d18d2c721e9a77f779493234a82b5"}, {file = "watchdog-2.1.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1e5d0fdfaa265c29dc12621913a76ae99656cf7587d03950dfeb3595e5a26102"},
{file = "watchdog-1.0.2-py3-none-win_ia64.whl", hash = "sha256:ee21aeebe6b3e51e4ba64564c94cee8dbe7438b9cb60f0bb350c4fa70d1b52c2"}, {file = "watchdog-2.1.8-py3-none-manylinux2014_armv7l.whl", hash = "sha256:036ed15f7cd656351bf4e17244447be0a09a61aaa92014332d50719fc5973bc0"},
{file = "watchdog-1.0.2.tar.gz", hash = "sha256:376cbc2a35c0392b0fe7ff16fbc1b303fd99d4dd9911ab5581ee9d69adc88982"}, {file = "watchdog-2.1.8-py3-none-manylinux2014_i686.whl", hash = "sha256:2962628a8777650703e8f6f2593065884c602df7bae95759b2df267bd89b2ef5"},
{file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64.whl", hash = "sha256:156ec3a94695ea68cfb83454b98754af6e276031ba1ae7ae724dc6bf8973b92a"},
{file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:47598fe6713fc1fee86b1ca85c9cbe77e9b72d002d6adeab9c3b608f8a5ead10"},
{file = "watchdog-2.1.8-py3-none-manylinux2014_s390x.whl", hash = "sha256:fed4de6e45a4f16e4046ea00917b4fe1700b97244e5d114f594b4a1b9de6bed8"},
{file = "watchdog-2.1.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:24dedcc3ce75e150f2a1d704661f6879764461a481ba15a57dc80543de46021c"},
{file = "watchdog-2.1.8-py3-none-win32.whl", hash = "sha256:6ddf67bc9f413791072e3afb466e46cc72c6799ba73dea18439b412e8f2e3257"},
{file = "watchdog-2.1.8-py3-none-win_amd64.whl", hash = "sha256:88ef3e8640ef0a64b7ad7394b0f23384f58ac19dd759da7eaa9bc04b2898943f"},
{file = "watchdog-2.1.8-py3-none-win_ia64.whl", hash = "sha256:0fb60c7d31474b21acba54079ce9ff0136411183e9a591369417cddb1d7d00d7"},
{file = "watchdog-2.1.8.tar.gz", hash = "sha256:6d03149126864abd32715d4e9267d2754cede25a69052901399356ad3bc5ecff"},
] ]
wcwidth = [ wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},

View file

@ -1,7 +1,7 @@
[tool.poetry] [tool.poetry]
name = "jarvis" name = "jarvis"
version = "2.0.2" version = "2.0.2"
description = "J.A.R.V.I.S. admin bot" description = "JARVIS admin bot"
authors = ["Zevaryx <zevaryx@gmail.com>"] authors = ["Zevaryx <zevaryx@gmail.com>"]
[tool.poetry.dependencies] [tool.poetry.dependencies]
@ -26,6 +26,7 @@ rook = "^0.1.170"
rich = "^12.3.0" rich = "^12.3.0"
jurigged = "^0.5.0" jurigged = "^0.5.0"
aioredis = "^2.0.1" aioredis = "^2.0.1"
naff = "^1.0.0"
[build-system] [build-system]
requires = ["poetry-core>=1.0.0"] requires = ["poetry-core>=1.0.0"]

View file

@ -1,12 +1,76 @@
discord-py>=1.7, <2 aiofile==3.7.4
discord-py-slash-command>=3.0.1, <4 aiofiles==0.6.0 ; python_version >= "3.6"
dpy-slash-button-paginator>=1.0.0, <2 aiohttp==3.8.1
GitPython>=3.1, <4 aioredis==2.0.1
mongoengine>=0.23, <1 aiosignal==1.2.0 ; python_version >= "3.10"
opencv-python>=4.5, <5 aiosqlite==0.17.0 ; python_version >= "3.6"
Pillow>=8.2.0, <9 ansicon==1.89.0 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows"
psutil>=5.8, <6 async-generator==1.10 ; python_version >= "3.6"
pymongo>=3.12.0, <4 async-timeout==4.0.2 ; python_version >= "3.6"
python-gitlab>=2.9.0, <3 asyncio-extras==1.3.2 ; python_version >= "3.6"
PyYaml>=5.4, <6 asyncpraw==7.5.0
ulid-py>=1.1.0, <2 asyncprawcore==2.3.0 ; python_version >= "3.6"
attrs==21.4.0 ; python_version >= "3.10"
blessed==1.19.1 ; python_version >= "3.8" and python_version < "4.0"
caio==0.9.5 ; python_version >= "3.5" and python_version < "4"
certifi==2021.10.8
charset-normalizer==2.0.12 ; python_version >= "3.10"
codefind==0.1.3 ; python_version >= "3.8" and python_version < "4.0"
commonmark==0.9.1 ; python_version >= "3.10" and python_full_version < "4.0.0"
dateparser==1.1.1
discord-typings==0.4.0 ; python_version >= "3.10"
distro==1.7.0 ; python_version >= "3.6"
frozenlist==1.3.0 ; python_version >= "3.10"
funcsigs==1.0.2
gitdb==4.0.9 ; python_version >= "3.7"
gitpython==3.1.27
idna==3.3 ; python_version >= "3.10"
jarvis-core @ git+https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git@main
jinxed==1.2.0 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows"
jurigged==0.5.2
marshmallow==3.16.0 ; python_version >= "3.10" and python_version < "4.0"
mongoengine==0.23.1
motor==2.5.1 ; python_version >= "3.10" and python_version < "4.0"
multidict==6.0.2 ; python_version >= "3.10"
naff==1.0.0
nanoid==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
numpy==1.22.4 ; python_version >= "3.8" or python_version >= "3.8" and platform_system == "Darwin" and platform_machine == "arm64" or python_version >= "3.8" and platform_system == "Linux" and platform_machine == "aarch64"
oauthlib==3.2.0 ; python_version >= "3.7"
opencv-python==4.5.5.64
orjson==3.6.8
ovld==0.3.2 ; python_version >= "3.8" and python_version < "4.0"
packaging==21.3 ; python_version >= "3.10" and python_version < "4.0"
pastypy==1.0.2
pillow==9.1.1
protobuf==3.20.1 ; python_version >= "3.7"
psutil==5.9.1
pycryptodome==3.14.1 ; python_version >= "3.10"
pygments==2.12.0 ; python_version >= "3.10" and python_full_version < "4.0.0"
pymongo==3.12.3 ; python_version >= "3.10" and python_version < "4.0" or python_version >= "3.6"
pyparsing==3.0.9 ; python_version >= "3.10" and python_version < "4.0"
python-dateutil==2.8.2 ; python_version >= "3.5"
python-gitlab==3.5.0
pytz==2022.1 ; python_version >= "3.10" and python_version < "4.0" or python_version >= "3.5"
pytz-deprecation-shim==0.1.0.post0 ; python_full_version >= "3.6.0"
pyyaml==6.0
regex==2022.3.2 ; python_version >= "3.6"
requests==2.27.1 ; python_full_version >= "3.6.0"
requests-oauthlib==1.3.1 ; python_version >= "3.7"
requests-toolbelt==0.9.1 ; python_full_version >= "3.7.0"
rich==12.4.4
rook==0.1.175
six==1.16.0 ; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" or python_version >= "3.8" and python_version < "4.0"
smmap==5.0.0 ; python_version >= "3.7"
tomli==2.0.1 ; python_version >= "3.10"
tweepy==4.10.0
typing-extensions==4.2.0 ; python_version >= "3.7"
tzdata==2022.1 ; python_version >= "3.6"
tzlocal==4.2 ; python_version >= "3.6"
ulid-py==1.1.0
umongo==3.1.0 ; python_version >= "3.10" and python_version < "4.0"
update-checker==0.18.0 ; python_version >= "3.6"
urllib3==1.26.8 ; python_version >= "3.10" and python_version < "4"
watchdog==2.1.8 ; python_version >= "3.8" and python_version < "4.0"
wcwidth==0.2.5 ; python_version >= "3.8" and python_version < "4.0"
websocket-client==1.3.2 ; python_version >= "3.7"
yarl==1.7.2 ; python_version >= "3.6"