diff --git a/jarvis/client/events/components.py b/jarvis/client/events/components.py index 1eab154..707bc04 100644 --- a/jarvis/client/events/components.py +++ b/jarvis/client/events/components.py @@ -2,7 +2,7 @@ from jarvis_core.db import q from jarvis_core.db.models import Action, Modlog, Note, Phishlist, Reminder, Star from naff import listen -from naff.api.events.internal import Button +from naff.api.events.internal import ButtonPressed from naff.models.discord.embed import EmbedField from naff.models.discord.enums import Permissions @@ -10,7 +10,7 @@ from jarvis.utils import build_embed class ComponentEventMixin: - async def _handle_modcase_button(self, event: Button) -> None: + async def _handle_modcase_button(self, event: ButtonPressed) -> None: context = event.context if not context.custom_id.startswith("modcase|"): @@ -33,17 +33,11 @@ class ComponentEventMixin: ): name, parent = action_data.split("|")[:2] action = Action(action_type=name, parent=parent) - note = Note( - admin=context.author.id, content="Moderation case opened via message" - ) - modlog = await Modlog.find_one( - q(user=user.id, guild=context.guild.id, open=True) - ) + note = Note(admin=context.author.id, content="Moderation case opened via message") + modlog = await Modlog.find_one(q(user=user.id, guild=context.guild.id, open=True)) 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 - ) + await context.send(f"User already has open case: {modlog.nanoid}", ephemeral=True) else: modlog = Modlog( user=user.id, @@ -85,7 +79,7 @@ class ComponentEventMixin: await self.redis.delete(user_key) await self.redis.delete(action_key) - async def _handle_delete_button(self, event: Button) -> None: + async def _handle_delete_button(self, event: ButtonPressed) -> None: context = event.context if not context.custom_id.startswith("delete|"): @@ -110,7 +104,7 @@ class ComponentEventMixin: await context.message.delete() await context.send("Message deleted", ephemeral=True) - async def _handle_copy_button(self, event: Button) -> None: + async def _handle_copy_button(self, event: ButtonPressed) -> None: context = event.context if not context.custom_id.startswith("copy|"): @@ -136,7 +130,7 @@ class ComponentEventMixin: await context.send("Reminder copied!", ephemeral=True) - async def _handle_phishlist_button(self, event: Button) -> None: + async def _handle_phishlist_button(self, event: ButtonPressed) -> None: context = event.context if not context.custom_id.startswith("pl|"): return @@ -167,7 +161,7 @@ class ComponentEventMixin: await context.send("Confirmed! Thank you for confirming this URL.") @listen() - async def on_button(self, event: Button) -> None: + async def on_button(self, event: ButtonPressed) -> None: """Process button events.""" await self._handle_modcase_button(event) await self._handle_delete_button(event) diff --git a/jarvis/cogs/reddit.py b/jarvis/cogs/reddit.py index a6f3d40..197426b 100644 --- a/jarvis/cogs/reddit.py +++ b/jarvis/cogs/reddit.py @@ -19,7 +19,7 @@ from jarvis_core.db.models import ( from naff import Client, Extension, InteractionContext, Permissions from naff.client.utils.misc_utils import get from naff.models.discord.channel import ChannelTypes, GuildText -from naff.models.discord.components import ActionRow, Select, SelectOption +from naff.models.discord.components import ActionRow, SelectOption, StringSelectMenu from naff.models.discord.embed import Embed, EmbedField from naff.models.naff.application_commands import ( OptionTypes, @@ -150,9 +150,7 @@ class RedditCog(Extension): required=True, ) @check(admin_or_permissions(Permissions.MANAGE_GUILD)) - async def _redditor_follow( - self, ctx: InteractionContext, name: str, channel: GuildText - ) -> None: + async def _redditor_follow(self, ctx: InteractionContext, name: str, channel: GuildText) -> None: if not user_name.match(name): await ctx.send("Invalid Redditor name", ephemeral=True) return @@ -213,9 +211,7 @@ class RedditCog(Extension): option = SelectOption(label=sub.name, value=str(idx)) options.append(option) - select = Select( - options=options, custom_id="to_delete", min_values=1, max_values=len(redditors) - ) + select = StringSelectMenu(options=options, custom_id="to_delete", min_values=1, max_values=len(redditors)) components = [ActionRow(select)] block = "\n".join(x for x in names) @@ -266,9 +262,7 @@ class RedditCog(Extension): required=True, ) @check(admin_or_permissions(Permissions.MANAGE_GUILD)) - async def _subreddit_follow( - self, ctx: InteractionContext, name: str, channel: GuildText - ) -> None: + async def _subreddit_follow(self, ctx: InteractionContext, name: str, channel: GuildText) -> None: if not sub_name.match(name): await ctx.send("Invalid Subreddit name", ephemeral=True) return @@ -285,9 +279,7 @@ class RedditCog(Extension): await ctx.send("Subreddit may be private, quarantined, or nonexistent.", ephemeral=True) return - exists = await SubredditFollow.find_one( - q(display_name=subreddit.display_name, guild=ctx.guild.id) - ) + exists = await SubredditFollow.find_one(q(display_name=subreddit.display_name, guild=ctx.guild.id)) if exists: await ctx.send("Subreddit already being followed in this guild", ephemeral=True) return @@ -338,9 +330,7 @@ class RedditCog(Extension): option = SelectOption(label=sub.display_name, value=str(idx)) options.append(option) - select = Select( - options=options, custom_id="to_delete", min_values=1, max_values=len(subreddits) - ) + select = StringSelectMenu(options=options, custom_id="to_delete", min_values=1, max_values=len(subreddits)) components = [ActionRow(select)] block = "\n".join(x for x in names) @@ -377,9 +367,7 @@ class RedditCog(Extension): await message.edit(components=components) @reddit.subcommand(sub_cmd_name="hot", sub_cmd_description="Get the hot post of a subreddit") - @slash_option( - name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True - ) + @slash_option(name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True) async def _subreddit_hot(self, ctx: InteractionContext, name: str) -> None: if not sub_name.match(name): await ctx.send("Invalid Subreddit name", ephemeral=True) @@ -401,9 +389,7 @@ class RedditCog(Extension): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if setting and setting.value: try: await ctx.author.send(embeds=embeds) @@ -414,9 +400,7 @@ class RedditCog(Extension): await ctx.send(embeds=embeds) @reddit.subcommand(sub_cmd_name="top", sub_cmd_description="Get the top post of a subreddit") - @slash_option( - name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True - ) + @slash_option(name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True) @slash_option( name="time", description="Top time", @@ -452,9 +436,7 @@ class RedditCog(Extension): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if setting and setting.value: try: await ctx.author.send(embeds=embeds) @@ -464,12 +446,8 @@ class RedditCog(Extension): else: await ctx.send(embeds=embeds) - @reddit.subcommand( - sub_cmd_name="random", sub_cmd_description="Get a random post of a subreddit" - ) - @slash_option( - name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True - ) + @reddit.subcommand(sub_cmd_name="random", sub_cmd_description="Get a random post of a subreddit") + @slash_option(name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True) async def _subreddit_random(self, ctx: InteractionContext, name: str) -> None: if not sub_name.match(name): await ctx.send("Invalid Subreddit name", ephemeral=True) @@ -491,9 +469,7 @@ class RedditCog(Extension): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if setting and setting.value: try: await ctx.author.send(embeds=embeds) @@ -503,12 +479,8 @@ class RedditCog(Extension): else: await ctx.send(embeds=embeds) - @reddit.subcommand( - sub_cmd_name="rising", sub_cmd_description="Get a rising post of a subreddit" - ) - @slash_option( - name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True - ) + @reddit.subcommand(sub_cmd_name="rising", sub_cmd_description="Get a rising post of a subreddit") + @slash_option(name="name", description="Subreddit name", opt_type=OptionTypes.STRING, required=True) async def _subreddit_rising(self, ctx: InteractionContext, name: str) -> None: if not sub_name.match(name): await ctx.send("Invalid Subreddit name", ephemeral=True) @@ -530,9 +502,7 @@ class RedditCog(Extension): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if setting and setting.value: try: await ctx.author.send(embeds=embeds) @@ -543,9 +513,7 @@ class RedditCog(Extension): await ctx.send(embeds=embeds) @reddit.subcommand(sub_cmd_name="post", sub_cmd_description="Get a specific submission") - @slash_option( - name="sid", description="Submission ID", opt_type=OptionTypes.STRING, required=True - ) + @slash_option(name="sid", description="Submission ID", opt_type=OptionTypes.STRING, required=True) async def _reddit_post(self, ctx: InteractionContext, sid: str) -> None: await ctx.defer() try: @@ -558,9 +526,7 @@ class RedditCog(Extension): embeds = await self.post_embeds(post.subreddit, post) if post.over_18 and not ctx.channel.nsfw: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if setting and setting.value: try: await ctx.author.send(embeds=embeds) @@ -570,14 +536,10 @@ class RedditCog(Extension): else: await ctx.send(embeds=embeds) - @reddit.subcommand( - sub_cmd_name="dm_nsfw", sub_cmd_description="DM NSFW posts if channel isn't NSFW" - ) + @reddit.subcommand(sub_cmd_name="dm_nsfw", sub_cmd_description="DM NSFW posts if channel isn't NSFW") @slash_option(name="dm", description="Send DM?", opt_type=OptionTypes.BOOLEAN, required=True) async def _reddit_dm(self, ctx: InteractionContext, dm: bool) -> None: - setting = await UserSetting.find_one( - q(user=ctx.author.id, type="reddit", setting="dm_nsfw") - ) + setting = await UserSetting.find_one(q(user=ctx.author.id, type="reddit", setting="dm_nsfw")) if not setting: setting = UserSetting(user=ctx.author.id, type="reddit", setting="dm_nsfw", value=dm) setting.value = dm diff --git a/jarvis/cogs/rolegiver.py b/jarvis/cogs/rolegiver.py index 4d5edb5..bb521cc 100644 --- a/jarvis/cogs/rolegiver.py +++ b/jarvis/cogs/rolegiver.py @@ -14,7 +14,12 @@ from naff import ( listen, ) from naff.client.utils.misc_utils import get -from naff.models.discord.components import ActionRow, Button, Select, SelectOption +from naff.models.discord.components import ( + ActionRow, + Button, + SelectOption, + StringSelectMenu, +) from naff.models.discord.embed import EmbedField from naff.models.discord.enums import ButtonStyles from naff.models.discord.role import Role @@ -115,9 +120,7 @@ class RolegiverCog(Extension): embed.set_thumbnail(url=ctx.guild.icon.url) embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}") - components = Button( - style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}" - ) + components = Button(style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}") await ctx.send(embeds=embed, components=components) if ctx.guild.id not in self.cache: @@ -168,9 +171,7 @@ class RolegiverCog(Extension): EmbedField(name="Remaining Role(s)", value="\n".join([x.mention for x in remaining])), ] - embed = build_embed( - title="Rolegiver Updated", description="Role removed from rolegiver", fields=fields - ) + embed = build_embed(title="Rolegiver Updated", description="Role removed from rolegiver", fields=fields) embed.set_thumbnail(url=ctx.guild.icon.url) @@ -211,9 +212,7 @@ class RolegiverCog(Extension): embed.set_thumbnail(url=ctx.guild.icon.url) embed.set_footer(text=f"{ctx.author.username}#{ctx.author.discriminator} | {ctx.author.id}") - components = Button( - style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}" - ) + components = Button(style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}") await ctx.send(embeds=embed, components=components) @rolegiver.subcommand(sub_cmd_name="get", sub_cmd_description="Get a role") @@ -230,7 +229,7 @@ class RolegiverCog(Extension): option = SelectOption(label=role.name, value=str(role.id)) options.append(option) - select = Select( + select = StringSelectMenu( options=options, placeholder="Select roles to add", min_values=1, @@ -277,9 +276,7 @@ class RolegiverCog(Extension): icon_url=ctx.author.display_avatar.url, ) - 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}") for row in components: for component in row.components: @@ -311,7 +308,7 @@ class RolegiverCog(Extension): option = SelectOption(label=role.name, value=str(role.id)) options.append(option) - select = Select( + select = StringSelectMenu( options=options, custom_id="to_remove", placeholder="Select roles to remove", @@ -355,9 +352,7 @@ class RolegiverCog(Extension): embed.set_thumbnail(url=ctx.guild.icon.url) embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.display_avatar.url) - 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}") for row in components: for component in row.components: @@ -371,9 +366,7 @@ class RolegiverCog(Extension): component.disabled = True await message.edit(components=components) - @rolegiver.subcommand( - sub_cmd_name="cleanup", sub_cmd_description="Removed deleted roles from rolegiver" - ) + @rolegiver.subcommand(sub_cmd_name="cleanup", sub_cmd_description="Removed deleted roles from rolegiver") @check(admin_or_permissions(Permissions.MANAGE_GUILD)) async def _rolegiver_cleanup(self, ctx: InteractionContext) -> None: setting = await Rolegiver.find_one(q(guild=ctx.guild.id)) diff --git a/jarvis/cogs/starboard.py b/jarvis/cogs/starboard.py index 38c823a..f54218c 100644 --- a/jarvis/cogs/starboard.py +++ b/jarvis/cogs/starboard.py @@ -7,7 +7,12 @@ from jarvis_core.db.models import Star, Starboard from naff import Client, Extension, InteractionContext, Permissions from naff.client import errors from naff.models.discord.channel import GuildText -from naff.models.discord.components import ActionRow, Button, Select, SelectOption +from naff.models.discord.components import ( + ActionRow, + Button, + SelectOption, + StringSelectMenu, +) from naff.models.discord.enums import ButtonStyles from naff.models.discord.message import Message from naff.models.naff.application_commands import ( @@ -150,9 +155,7 @@ class StarboardCog(Extension): if c and isinstance(c, GuildText): channel_list.append(c) else: - self.logger.warning( - f"Starboard {starboard.channel} no longer valid in {ctx.guild.name}" - ) + self.logger.warning(f"Starboard {starboard.channel} no longer valid in {ctx.guild.name}") to_delete.append(starboard) for starboard in to_delete: @@ -166,11 +169,9 @@ class StarboardCog(Extension): if x: select_channels.append(SelectOption(label=x.name, value=str(idx))) - select_channels = [ - SelectOption(label=x.name, value=str(idx)) for idx, x in enumerate(channel_list) - ] + select_channels = [SelectOption(label=x.name, value=str(idx)) for idx, x in enumerate(channel_list)] - select = Select( + select = StringSelectMenu( options=select_channels, min_values=1, max_values=1, @@ -232,9 +233,7 @@ class StarboardCog(Extension): embed.set_footer(text=ctx.guild.name + " | " + channel.name) if image_url: embed.set_image(url=image_url) - star_components = Button( - style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}" - ) + star_components = Button(style=ButtonStyles.DANGER, emoji="🗑️", custom_id=f"delete|{ctx.author.id}") star = await starboard.send(embeds=embed, components=star_components) await Star( diff --git a/jarvis/cogs/twitter.py b/jarvis/cogs/twitter.py index e177f5b..cd819ae 100644 --- a/jarvis/cogs/twitter.py +++ b/jarvis/cogs/twitter.py @@ -8,7 +8,7 @@ from jarvis_core.db.models import TwitterAccount, TwitterFollow from naff import Client, Extension, InteractionContext, Permissions from naff.client.utils.misc_utils import get from naff.models.discord.channel import GuildText -from naff.models.discord.components import ActionRow, Select, SelectOption +from naff.models.discord.components import ActionRow, SelectOption, StringSelectMenu from naff.models.naff.application_commands import ( OptionTypes, SlashCommand, @@ -27,9 +27,7 @@ class TwitterCog(Extension): self.bot = bot self.logger = logging.getLogger(__name__) config = JarvisConfig.from_yaml() - auth = tweepy.AppAuthHandler( - config.twitter["consumer_key"], config.twitter["consumer_secret"] - ) + auth = tweepy.AppAuthHandler(config.twitter["consumer_key"], config.twitter["consumer_secret"]) self.api = tweepy.API(auth) self._guild_cache = {} self._channel_cache = {} @@ -43,9 +41,7 @@ class TwitterCog(Extension): sub_cmd_name="follow", sub_cmd_description="Follow a Twitter acount", ) - @slash_option( - name="handle", description="Twitter account", opt_type=OptionTypes.STRING, required=True - ) + @slash_option(name="handle", description="Twitter account", opt_type=OptionTypes.STRING, required=True) @slash_option( name="channel", description="Channel to post tweets to", @@ -75,9 +71,7 @@ class TwitterCog(Extension): account = await asyncio.to_thread(self.api.get_user, screen_name=handle) latest_tweet = (await asyncio.to_thread(self.api.user_timeline, screen_name=handle))[0] except Exception: - await ctx.send( - "Unable to get user timeline. Are you sure the handle is correct?", ephemeral=True - ) + await ctx.send("Unable to get user timeline. Are you sure the handle is correct?", ephemeral=True) return exists = await TwitterFollow.find_one(q(twitter_id=account.id, guild=ctx.guild.id)) @@ -130,9 +124,7 @@ class TwitterCog(Extension): option = SelectOption(label=account.handle, value=str(twitter.twitter_id)) options.append(option) - select = Select( - options=options, custom_id="to_delete", min_values=1, max_values=len(twitters) - ) + select = StringSelectMenu(options=options, custom_id="to_delete", min_values=1, max_values=len(twitters)) components = [ActionRow(select)] block = "\n".join(x for x in handlemap.values()) @@ -196,9 +188,7 @@ class TwitterCog(Extension): option = SelectOption(label=account.handle, value=str(twitter.twitter_id)) options.append(option) - select = Select( - options=options, custom_id="to_update", min_values=1, max_values=len(twitters) - ) + select = StringSelectMenu(options=options, custom_id="to_update", min_values=1, max_values=len(twitters)) components = [ActionRow(select)] block = "\n".join(x for x in handlemap.values()) diff --git a/poetry.lock b/poetry.lock index 9576d34..b94171b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -139,14 +139,15 @@ test = ["pytest", "pytest-asyncio", "pytest-cov"] [[package]] name = "asyncpraw" -version = "7.5.0" -description = "Async PRAW, an abbreviation for `Asynchronous Python Reddit API Wrapper`, is a python package that allows for simple access to reddit's API." +version = "7.6.1" +description = "Async PRAW, an abbreviation for \"Asynchronous Python Reddit API Wrapper\", is a python package that allows for simple access to Reddit's API." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -aiofiles = "<=0.6.0" +aiofiles = "<1" +aiohttp = "<4" aiosqlite = "<=0.17.0" asyncio-extras = "<=1.3.2" asyncprawcore = ">=2.1,<3" @@ -154,10 +155,10 @@ update-checker = ">=0.18" [package.extras] ci = ["coveralls"] -dev = ["asynctest (>=0.13.0)", "mock (>=0.8)", "packaging", "pre-commit", "pytest (>=2.7.3)", "pytest-asyncio", "pytest-vcr", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-trio", "testfixtures (>4.13.2,<7)", "vcrpy (==4.1.1)"] -lint = ["pre-commit", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-trio"] -readthedocs = ["sphinx", "sphinx-rtd-theme", "sphinxcontrib-trio"] -test = ["asynctest (>=0.13.0)", "mock (>=0.8)", "pytest (>=2.7.3)", "pytest-asyncio", "pytest-vcr", "testfixtures (>4.13.2,<7)", "vcrpy (==4.1.1)"] +dev = ["asynctest (>=0.13.0)", "mock (>=0.8)", "packaging", "pre-commit", "pytest (>=7.2.0,<7.3.0)", "pytest-asyncio", "pytest-vcr", "sphinx", "sphinx-rtd-dark-mode", "sphinx-rtd-theme", "sphinxcontrib-trio", "testfixtures (>4.13.2,<7)", "vcrpy (>=4.1.1)"] +lint = ["pre-commit", "sphinx", "sphinx-rtd-dark-mode", "sphinx-rtd-theme", "sphinxcontrib-trio"] +readthedocs = ["sphinx", "sphinx-rtd-dark-mode", "sphinx-rtd-theme", "sphinxcontrib-trio"] +test = ["asynctest (>=0.13.0)", "mock (>=0.8)", "pytest (>=7.2.0,<7.3.0)", "pytest-asyncio", "pytest-vcr", "testfixtures (>4.13.2,<7)", "vcrpy (>=4.1.1)"] [[package]] name = "asyncprawcore" @@ -361,6 +362,17 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "emoji" +version = "2.2.0" +description = "Emoji for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +dev = ["coverage", "coveralls", "pytest"] + [[package]] name = "frozenlist" version = "1.3.0" @@ -401,11 +413,11 @@ gitdb = ">=4.0.1,<5" [[package]] name = "h11" -version = "0.13.0" +version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "idna" @@ -545,7 +557,7 @@ python-versions = "*" [[package]] name = "naff" -version = "1.12.0" +version = "2.0.0" description = "Not another freaking fork" category = "main" optional = false @@ -555,11 +567,13 @@ python-versions = ">=3.10" aiohttp = "*" attrs = "*" discord-typings = ">=0.5.1" +emoji = "*" tomli = "*" [package.extras] -all = ["Brotli", "PyNaCl (>=1.5.0,<1.6)", "aiodns", "orjson", "sentry-sdk"] -docs = ["Brotli", "PyNaCl (>=1.5.0,<1.6)", "aiodns", "mkdocs-autorefs", "mkdocs-awesome-pages-plugin", "mkdocs-git-committers-plugin-2", "mkdocs-git-revision-date-localized-plugin", "mkdocs-material", "mkdocs-minify-plugin", "mkdocstrings-python", "orjson", "sentry-sdk"] +all = ["Brotli", "PyNaCl (>=1.5.0,<1.6)", "aiodns", "jurigged", "orjson", "sentry-sdk"] +docs = ["Brotli", "PyNaCl (>=1.5.0,<1.6)", "aiodns", "jurigged", "mkdocs-autorefs", "mkdocs-awesome-pages-plugin", "mkdocs-git-committers-plugin-2", "mkdocs-git-revision-date-localized-plugin", "mkdocs-material", "mkdocs-minify-plugin", "mkdocstrings-python", "orjson", "sentry-sdk"] +jurigged = ["jurigged"] sentry = ["sentry-sdk"] speedup = ["Brotli", "aiodns", "orjson"] tests = ["pytest", "pytest-asyncio", "pytest-cov", "pytest-recording", "python-dotenv", "typeguard"] @@ -571,19 +585,19 @@ version = "0.1.0" description = "A stat tracker client for NAFF" category = "main" optional = false -python-versions = "^3.10" +python-versions = ">=3.10" develop = false [package.dependencies] -naff = {version = "^1.7.1", extras = ["orjson"]} +naff = {version = "^2.0.0", extras = ["orjson"]} prometheus-client = "^0.14.1" uvicorn = "^0.18.2" [package.source] type = "git" -url = "https://github.com/artem30801/nafftrack.git" -reference = "master" -resolved_reference = "ac5ece577f67faad01602d1b945e08c72f43d093" +url = "https://github.com/zevaryx/nafftrack.git" +reference = "HEAD" +resolved_reference = "493e4824d034e7e27a5d9eae8684d1764344cc25" [[package]] name = "nanoid" @@ -1166,7 +1180,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "uvicorn" -version = "0.18.2" +version = "0.18.3" description = "The lightning-fast ASGI server." category = "main" optional = false @@ -1177,7 +1191,7 @@ click = ">=7.0" h11 = ">=0.8" [package.extras] -standard = ["PyYAML (>=5.1)", "colorama (>=0.4)", "httptools (>=0.4.0)", "python-dotenv (>=0.13)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.0)"] +standard = ["colorama (>=0.4)", "httptools (>=0.4.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.0)"] [[package]] name = "watchdog" @@ -1246,7 +1260,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "57bd23e6265cf41781732790f7aea43c6985f3711ecd9977f8058b81b2689460" +content-hash = "44ee3a6f02922fc25bb1f97e17de4699cacbc8f44130f5702d4b1d70cc169223" [metadata.files] aiofile = [ @@ -1368,8 +1382,8 @@ asyncio-extras = [ {file = "asyncio_extras-1.3.2.tar.gz", hash = "sha256:084b62bebc19c6ba106d438a274bbb5566941c469128cd4af1a85f00a2c81f8d"}, ] asyncpraw = [ - {file = "asyncpraw-7.5.0-py3-none-any.whl", hash = "sha256:b40f3db3464077a7a7e30a89181ba15ba4c5bc550dc2642e815b235f42ad8eb2"}, - {file = "asyncpraw-7.5.0.tar.gz", hash = "sha256:61aabf05052472d8b29e0f0500a6ec8b483129374d36dad286d94e4b6864572d"}, + {file = "asyncpraw-7.6.1-py3-none-any.whl", hash = "sha256:b7a424d9357ff5991de71341ddf8d0f133b0b28cbc7f65e20e4e399e334e0d2b"}, + {file = "asyncpraw-7.6.1.tar.gz", hash = "sha256:17567c517afa06bb33996a01632ee7f1d733307fd2820ed982da9bfb13adb98a"}, ] asyncprawcore = [ {file = "asyncprawcore-2.3.0-py3-none-any.whl", hash = "sha256:46c52e6cfe91801a8c9490a0ee29a85cbc6713ccc535d5c704d448aee9729e5b"}, @@ -1466,6 +1480,9 @@ distro = [ {file = "distro-1.7.0-py3-none-any.whl", hash = "sha256:d596311d707e692c2160c37807f83e3820c5d539d5a83e87cfb6babd8ba3a06b"}, {file = "distro-1.7.0.tar.gz", hash = "sha256:151aeccf60c216402932b52e40ee477a939f8d58898927378a02abbe852c1c39"}, ] +emoji = [ + {file = "emoji-2.2.0.tar.gz", hash = "sha256:a2986c21e4aba6b9870df40ef487a17be863cb7778dcf1c01e25917b7cd210bb"}, +] frozenlist = [ {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"}, {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b"}, @@ -1540,8 +1557,8 @@ gitpython = [ {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] h11 = [ - {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, - {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1638,8 +1655,8 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] naff = [ - {file = "naff-1.12.0-py3-none-any.whl", hash = "sha256:37b595f0c9fed1672b5fe6f511374da4a33e818ae8451c710d745231d7cbd941"}, - {file = "naff-1.12.0.tar.gz", hash = "sha256:21d1ce708e1a7cfe08ae59e7d79576cff103a027424b032c9ac8c33dbe2d0a5d"}, + {file = "naff-2.0.0-py3-none-any.whl", hash = "sha256:afd3906acbdaf6f87ea6e618f07e97f059f9adf8011afd1e3b73fb55d03d153a"}, + {file = "naff-2.0.0.tar.gz", hash = "sha256:eb51697ddf91ba0047a3d35951ad5a4daceb97301698b0078781dee969eb3f99"}, ] nafftrack = [] nanoid = [ @@ -2243,8 +2260,8 @@ urllib3 = [ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, ] uvicorn = [ - {file = "uvicorn-0.18.2-py3-none-any.whl", hash = "sha256:c19a057deb1c5bb060946e2e5c262fc01590c6529c0af2c3d9ce941e89bc30e0"}, - {file = "uvicorn-0.18.2.tar.gz", hash = "sha256:cade07c403c397f9fe275492a48c1b869efd175d5d8a692df649e6e7e2ed8f4e"}, + {file = "uvicorn-0.18.3-py3-none-any.whl", hash = "sha256:0abd429ebb41e604ed8d2be6c60530de3408f250e8d2d84967d85ba9e86fe3af"}, + {file = "uvicorn-0.18.3.tar.gz", hash = "sha256:9a66e7c42a2a95222f76ec24a4b754c158261c4696e683b9dadc72b590e0311b"}, ] watchdog = [ {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:676263bee67b165f16b05abc52acc7a94feac5b5ab2449b491f1a97638a79277"}, diff --git a/pyproject.toml b/pyproject.toml index 03f92a7..28027e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jarvis" -version = "2.3.0" +version = "2.4.0" description = "JARVIS admin bot" authors = ["Zevaryx "] @@ -25,13 +25,13 @@ rook = "^0.1.170" rich = "^12.3.0" jurigged = "^0.5.0" aioredis = "^2.0.1" -naff = { version = "^1.2.0", extras = ["orjson"] } -nafftrack = {git = "https://github.com/artem30801/nafftrack.git", rev = "master"} +naff = { version = "^2.0.0", extras = ["orjson"] } ansitoimg = "^2022.1" nest-asyncio = "^1.5.5" thefuzz = {extras = ["speedup"], version = "^0.19.0"} beautifulsoup4 = "^4.11.1" calculator = {git = "https://git.zevaryx.com/zevaryx/calculator.git"} +nafftrack = {git = "https://github.com/zevaryx/nafftrack.git"} [tool.poetry.dev-dependencies] black = {version = "^22.3.0", allow-prereleases = true}