Migrate to interaction v5

This commit is contained in:
Zeva Rose 2023-02-01 08:23:41 -07:00
parent 7981d38882
commit d4724fd196
49 changed files with 431 additions and 359 deletions

View file

@ -13,4 +13,5 @@ extend-ignore =
# Plugins we don't currently include: flake8-return # Plugins we don't currently include: flake8-return
R502, # do not implicitly return None in function able to return non-None value. R502, # do not implicitly return None in function able to return non-None value.
R503, # missing explicit return at the end of function ableto return non-None value. R503, # missing explicit return at the end of function ableto return non-None value.
R505, B023, # Temporary
max-line-length=100 max-line-length=100

View file

@ -4,9 +4,9 @@ from functools import partial
from typing import Any from typing import Any
import jurigged import jurigged
from interactions import Intents
from jarvis_core.db import connect from jarvis_core.db import connect
from jarvis_core.log import get_logger from jarvis_core.log import get_logger
from naff import Intents
from redis import asyncio as aioredis from redis import asyncio as aioredis
from jarvis import const from jarvis import const

View file

@ -2,24 +2,25 @@
import logging import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from interactions import Client
from interactions.ext.prefixed_commands.context import PrefixedContext
from interactions.models.internal.context import BaseContext, InteractionContext
from jarvis_core.util.ansi import Fore, Format, fmt from jarvis_core.util.ansi import Fore, Format, fmt
from naff.models.naff.context import Context, InteractionContext, PrefixedContext
from nafftrack.client import StatsClient
from jarvis.client.errors import ErrorMixin from jarvis.client.errors import ErrorMixin
from jarvis.client.events import EventMixin from jarvis.client.events import EventMixin
from jarvis.client.tasks import TaskMixin from jarvis.client.tasks import TaskMixin
if TYPE_CHECKING: if TYPE_CHECKING:
from aioredis import Redis from redis import asyncio as aioredis
KEY_FMT = fmt(Fore.GRAY) KEY_FMT = fmt(Fore.GRAY)
VAL_FMT = fmt(Fore.WHITE) VAL_FMT = fmt(Fore.WHITE)
CMD_FMT = fmt(Fore.GREEN, Format.BOLD) CMD_FMT = fmt(Fore.GREEN, Format.BOLD)
class Jarvis(StatsClient, ErrorMixin, EventMixin, TaskMixin): class Jarvis(Client, ErrorMixin, EventMixin, TaskMixin):
def __init__(self, redis: "Redis", *args, **kwargs): # noqa: ANN002 ANN003 def __init__(self, redis: "aioredis.Redis", *args, **kwargs): # noqa: ANN002 ANN003
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.redis = redis self.redis = redis
self.logger = logging.getLogger(__name__) self.logger = logging.getLogger(__name__)
@ -27,10 +28,10 @@ class Jarvis(StatsClient, ErrorMixin, EventMixin, TaskMixin):
self.pre_run_callback = self._prerun self.pre_run_callback = self._prerun
self.synced = False self.synced = False
async def _prerun(self, ctx: Context, *args, **kwargs) -> None: async def _prerun(self, ctx: BaseContext, *args, **kwargs) -> None:
name = ctx.invoke_target name = ctx.invoke_target
cargs = "" cargs = ""
if isinstance(ctx, InteractionContext) and ctx.target_id: if isinstance(ctx, InteractionContext) and hasattr(ctx, "target_id"):
kwargs["context target"] = ctx.target kwargs["context target"] = ctx.target
cargs = " ".join(f"{k}:{v}" for k, v in kwargs.items()) cargs = " ".join(f"{k}:{v}" for k, v in kwargs.items())
elif isinstance(ctx, PrefixedContext): elif isinstance(ctx, PrefixedContext):

View file

@ -2,8 +2,13 @@
import traceback import traceback
from datetime import datetime, timezone from datetime import datetime, timezone
from naff.client.errors import CommandCheckFailure, CommandOnCooldown, HTTPException from interactions.client.errors import (
from naff.models.naff.context import Context, InteractionContext, PrefixedContext CommandCheckFailure,
CommandOnCooldown,
HTTPException,
)
from interactions.ext.prefixed_commands.context import PrefixedContext
from interactions.models.internal.context import BaseContext, InteractionContext
from pastypy import AsyncPaste as Paste from pastypy import AsyncPaste as Paste
DEFAULT_GUILD = 862402786116763668 DEFAULT_GUILD = 862402786116763668
@ -35,9 +40,7 @@ class ErrorMixin:
else: else:
self.logger.error(f"Ignoring exception in {source}", exc_info=error) self.logger.error(f"Ignoring exception in {source}", exc_info=error)
async def on_command_error( async def on_command_error(self, ctx: BaseContext, error: Exception, *args: list, **kwargs: dict) -> None:
self, ctx: Context, error: Exception, *args: list, **kwargs: dict
) -> None:
"""NAFF on_command_error override.""" """NAFF on_command_error override."""
name = ctx.invoke_target name = ctx.invoke_target
self.logger.debug(f"Handling error in {name}: {error}") self.logger.debug(f"Handling error in {name}: {error}")
@ -67,9 +70,7 @@ class ErrorMixin:
v = v[97] + "..." v = v[97] + "..."
arg_str += f" - {v}" arg_str += f" - {v}"
callback_args = "\n".join(f" - {i}" for i in args) if args else " None" callback_args = "\n".join(f" - {i}" for i in args) if args else " None"
callback_kwargs = ( callback_kwargs = "\n".join(f" {k}: {v}" for k, v in kwargs.items()) if kwargs else " None"
"\n".join(f" {k}: {v}" for k, v in kwargs.items()) if kwargs else " None"
)
full_message = ERROR_MSG.format( full_message = ERROR_MSG.format(
guild_name=ctx.guild.name, guild_name=ctx.guild.name,
error_time=error_time, error_time=error_time,

View file

@ -2,14 +2,15 @@
import asyncio import asyncio
from aiohttp import ClientSession from aiohttp import ClientSession
from interactions import listen
from interactions.ext.prefixed_commands.context import PrefixedContext
from interactions.models.discord.channel import DMChannel
from interactions.models.discord.embed import EmbedField
from interactions.models.internal.application_commands import ContextMenu
from interactions.models.internal.context import BaseContext, InteractionContext
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import Reminder, Setting from jarvis_core.db.models import Reminder, Setting
from jarvis_core.util.ansi import RESET, Fore, Format, fmt from jarvis_core.util.ansi import RESET, Fore, Format, fmt
from naff import listen
from naff.models.discord.channel import DMChannel
from naff.models.discord.embed import EmbedField
from naff.models.naff.application_commands import ContextMenu
from naff.models.naff.context import Context, InteractionContext, PrefixedContext
from jarvis import const from jarvis import const
from jarvis.client.events.components import ComponentEventMixin from jarvis.client.events.components import ComponentEventMixin
@ -71,9 +72,7 @@ class EventMixin(MemberEventMixin, MessageEventMixin, ComponentEventMixin):
if not isinstance(self.interaction_tree[cid][_], ContextMenu) if not isinstance(self.interaction_tree[cid][_], ContextMenu)
) )
global_context_menus = sum( global_context_menus = sum(
1 1 for _ in self.interaction_tree[cid] if isinstance(self.interaction_tree[cid][_], ContextMenu)
for _ in self.interaction_tree[cid]
if isinstance(self.interaction_tree[cid][_], ContextMenu)
) )
else: else:
guild_base_commands += sum( guild_base_commands += sum(
@ -82,9 +81,7 @@ class EventMixin(MemberEventMixin, MessageEventMixin, ComponentEventMixin):
if not isinstance(self.interaction_tree[cid][_], ContextMenu) if not isinstance(self.interaction_tree[cid][_], ContextMenu)
) )
guild_context_menus += sum( guild_context_menus += sum(
1 1 for _ in self.interaction_tree[cid] if isinstance(self.interaction_tree[cid][_], ContextMenu)
for _ in self.interaction_tree[cid]
if isinstance(self.interaction_tree[cid][_], ContextMenu)
) )
self.logger.info("Loaded {:>3} global base slash commands".format(global_base_commands)) self.logger.info("Loaded {:>3} global base slash commands".format(global_base_commands))
self.logger.info("Loaded {:>3} global context menus".format(global_context_menus)) self.logger.info("Loaded {:>3} global context menus".format(global_context_menus))
@ -97,7 +94,7 @@ class EventMixin(MemberEventMixin, MessageEventMixin, ComponentEventMixin):
_ = await Reminder.find().to_list(None) _ = await Reminder.find().to_list(None)
# Modlog # Modlog
async def on_command(self, ctx: Context) -> None: async def on_command(self, ctx: BaseContext) -> None:
"""NAFF on_command override.""" """NAFF on_command override."""
name = ctx.invoke_target name = ctx.invoke_target
if not isinstance(ctx.channel, DMChannel) and name not in ["pw"]: if not isinstance(ctx.channel, DMChannel) and name not in ["pw"]:
@ -135,13 +132,9 @@ class EventMixin(MemberEventMixin, MessageEventMixin, ComponentEventMixin):
color="#fc9e3f", color="#fc9e3f",
) )
embed.set_author(name=ctx.author.username, icon_url=ctx.author.display_avatar.url) embed.set_author(name=ctx.author.username, icon_url=ctx.author.display_avatar.url)
embed.set_footer( embed.set_footer(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(embeds=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"
)
await modlog.delete() await modlog.delete()

View file

@ -1,10 +1,10 @@
"""JARVIS component event mixin.""" """JARVIS component event mixin."""
from interactions import listen
from interactions.api.events.internal import ButtonPressed
from interactions.models.discord.embed import EmbedField
from interactions.models.discord.enums import Permissions
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import Action, Modlog, Note, Phishlist, Reminder, Star from jarvis_core.db.models import Action, Modlog, Note, Phishlist, Reminder, Star
from naff import listen
from naff.api.events.internal import ButtonPressed
from naff.models.discord.embed import EmbedField
from naff.models.discord.enums import Permissions
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -1,14 +1,14 @@
"""JARVIS member event mixin.""" """JARVIS member event mixin."""
import asyncio import asyncio
from interactions import listen
from interactions.api.events.discord import MemberAdd, MemberRemove, MemberUpdate
from interactions.client.utils.misc_utils import get
from interactions.models.discord.embed import Embed, EmbedField
from interactions.models.discord.enums import AuditLogEventType
from interactions.models.discord.user import Member
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import Setting from jarvis_core.db.models import Setting
from naff import listen
from naff.api.events.discord import MemberAdd, MemberRemove, MemberUpdate
from naff.client.utils.misc_utils import get
from naff.models.discord.embed import Embed, EmbedField
from naff.models.discord.enums import AuditLogEventType
from naff.models.discord.user import Member
from jarvis.utils import build_embed from jarvis.utils import build_embed
@ -116,9 +116,7 @@ class MemberEventMixin:
name="Before", name="Before",
value=f"{before.display_name} ({before.username}#{before.discriminator})", value=f"{before.display_name} ({before.username}#{before.discriminator})",
), ),
EmbedField( EmbedField(name="After", value=f"{after.display_name} ({after.username}#{after.discriminator})"),
name="After", value=f"{after.display_name} ({after.username}#{after.discriminator})"
),
) )
embed = build_embed( embed = build_embed(
title="User Renamed", title="User Renamed",
@ -136,9 +134,7 @@ class MemberEventMixin:
before = event.before before = event.before
after = event.after after = event.after
if (before.display_name == after.display_name and before.roles == after.roles) or ( if (before.display_name == after.display_name and before.roles == after.roles) or (not after or not before):
not after or not before
):
return return
log = await Setting.find_one(q(guild=before.guild.id, setting="activitylog")) log = await Setting.find_one(q(guild=before.guild.id, setting="activitylog"))

View file

@ -3,6 +3,15 @@ import re
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from aiohttp import ClientSession from aiohttp import ClientSession
from interactions import listen
from interactions.api.events.discord import MessageCreate, MessageDelete, MessageUpdate
from interactions.client.utils.misc_utils import find_all
from interactions.models.discord.channel import DMChannel, GuildText
from interactions.models.discord.components import ActionRow, Button
from interactions.models.discord.embed import EmbedField
from interactions.models.discord.enums import ButtonStyles, Permissions
from interactions.models.discord.message import Message
from interactions.models.discord.user import Member
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import ( from jarvis_core.db.models import (
Autopurge, Autopurge,
@ -15,15 +24,6 @@ from jarvis_core.db.models import (
Warning, Warning,
) )
from jarvis_core.filters import invites, url from jarvis_core.filters import invites, url
from naff import listen
from naff.api.events.discord import MessageCreate, MessageDelete, MessageUpdate
from naff.client.utils.misc_utils import find_all
from naff.models.discord.channel import DMChannel, GuildText
from naff.models.discord.components import ActionRow, Button
from naff.models.discord.embed import EmbedField
from naff.models.discord.enums import ButtonStyles, Permissions
from naff.models.discord.message import Message
from naff.models.discord.user import Member
from jarvis.branding import get_command_color from jarvis.branding import get_command_color
from jarvis.embeds.admin import warning_embed from jarvis.embeds.admin import warning_embed

View file

@ -1,7 +1,7 @@
"""JARVIS task mixin.""" """JARVIS task mixin."""
from aiohttp import ClientSession from aiohttp import ClientSession
from naff.models.naff.tasks.task import Task from interactions.models.internal.tasks.task import Task
from naff.models.naff.tasks.triggers import IntervalTrigger from interactions.models.internal.tasks.triggers import IntervalTrigger
class TaskMixin: class TaskMixin:

View file

@ -1,5 +1,5 @@
"""JARVIS Core Cogs.""" """JARVIS Core Cogs."""
from naff import Client from interactions import Client
from jarvis.cogs.core import admin, botutil, remindme, socials, util from jarvis.cogs.core import admin, botutil, remindme, socials, util

View file

@ -1,7 +1,7 @@
"""JARVIS Admin Cogs.""" """JARVIS Admin Cogs."""
import logging import logging
from naff import Client from interactions import Client
from jarvis.cogs.core.admin import ( from jarvis.cogs.core.admin import (
autoreact, autoreact,

View file

@ -3,17 +3,17 @@ import logging
import re import re
from typing import Optional, Tuple from typing import Optional, Tuple
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext, Permissions
from jarvis_core.db.models import Autoreact from interactions.client.utils.misc_utils import find
from naff import Client, Extension, InteractionContext, Permissions from interactions.models.discord.channel import GuildText
from naff.client.utils.misc_utils import find from interactions.models.internal.application_commands import (
from naff.models.discord.channel import GuildText
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Autoreact
from jarvis.data.unicode import emoji_list from jarvis.data.unicode import emoji_list
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -2,21 +2,21 @@
import re import re
from datetime import timedelta from datetime import timedelta
from jarvis_core.db import q from interactions import InteractionContext, Permissions
from jarvis_core.db.models import Ban, Unban from interactions.client.utils.misc_utils import find, find_all
from naff import InteractionContext, Permissions from interactions.ext.paginators import Paginator
from naff.client.utils.misc_utils import find, find_all from interactions.models.discord.embed import EmbedField
from naff.ext.paginators import Paginator from interactions.models.discord.user import User
from naff.models.discord.embed import EmbedField from interactions.models.internal.application_commands import (
from naff.models.discord.user import User
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
SlashCommandChoice, SlashCommandChoice,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Ban, Unban
from jarvis.branding import get_command_color from jarvis.branding import get_command_color
from jarvis.embeds.admin import ban_embed, unban_embed from jarvis.embeds.admin import ban_embed, unban_embed

View file

@ -4,16 +4,22 @@ import difflib
import re import re
from typing import Dict, List from typing import Dict, List
from jarvis_core.db import q from interactions import (
from jarvis_core.db.models import Filter AutocompleteContext,
from naff import AutocompleteContext, Client, Extension, InteractionContext, Permissions Client,
from naff.models.discord.modal import InputText, Modal, TextStyles Extension,
from naff.models.naff.application_commands import ( InteractionContext,
Permissions,
)
from interactions.models.discord.modal import InputText, Modal, TextStyles
from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Filter
from thefuzz import process from thefuzz import process
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -1,13 +1,13 @@
"""JARVIS KickCog.""" """JARVIS KickCog."""
from jarvis_core.db.models import Kick from interactions import InteractionContext, Permissions
from naff import InteractionContext, Permissions from interactions.models.discord.user import User
from naff.models.discord.user import User from interactions.models.internal.application_commands import (
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db.models import Kick
from jarvis.embeds.admin import kick_embed from jarvis.embeds.admin import kick_embed
from jarvis.utils.cogs import ModcaseCog from jarvis.utils.cogs import ModcaseCog

View file

@ -2,18 +2,18 @@
import logging import logging
from typing import Union from typing import Union
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext
from jarvis_core.db.models import Lock, Permission from interactions.client.utils.misc_utils import get
from naff import Client, Extension, InteractionContext from interactions.models.discord.channel import GuildText, GuildVoice
from naff.client.utils.misc_utils import get from interactions.models.discord.enums import Permissions
from naff.models.discord.channel import GuildText, GuildVoice from interactions.models.internal.application_commands import (
from naff.models.discord.enums import Permissions
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Lock, Permission
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -1,20 +1,20 @@
"""JARVIS LockdownCog.""" """JARVIS LockdownCog."""
import logging import logging
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext
from jarvis_core.db.models import Lock, Lockdown, Permission from interactions.client.utils.misc_utils import find_all, get
from naff import Client, Extension, InteractionContext from interactions.models.discord.channel import GuildCategory, GuildChannel
from naff.client.utils.misc_utils import find_all, get from interactions.models.discord.enums import Permissions
from naff.models.discord.channel import GuildCategory, GuildChannel from interactions.models.discord.guild import Guild
from naff.models.discord.enums import Permissions from interactions.models.discord.user import Member
from naff.models.discord.guild import Guild from interactions.models.internal.application_commands import (
from naff.models.discord.user import Member
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Lock, Lockdown, Permission
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -1,18 +1,18 @@
"""JARVIS Moderation Case management.""" """JARVIS Moderation Case management."""
from typing import TYPE_CHECKING, List, Optional from typing import TYPE_CHECKING, List, Optional
from jarvis_core.db import q from interactions import Extension, InteractionContext, Permissions
from jarvis_core.db.models import Modlog, Note, actions from interactions.ext.paginators import Paginator
from naff import Extension, InteractionContext, Permissions from interactions.models.discord.embed import Embed, EmbedField
from naff.ext.paginators import Paginator from interactions.models.discord.user import Member
from naff.models.discord.embed import Embed, EmbedField from interactions.models.internal.application_commands import (
from naff.models.discord.user import Member
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Modlog, Note, actions
from rich.console import Console from rich.console import Console
from rich.table import Table from rich.table import Table
@ -20,7 +20,7 @@ from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions
if TYPE_CHECKING: if TYPE_CHECKING:
from naff.models.discord.guild import Guild from interactions.models.discord.guild import Guild
ACTIONS_LOOKUP = { ACTIONS_LOOKUP = {
"ban": actions.Ban, "ban": actions.Ban,

View file

@ -4,12 +4,11 @@ from datetime import datetime, timedelta, timezone
from dateparser import parse from dateparser import parse
from dateparser_data.settings import default_parsers from dateparser_data.settings import default_parsers
from jarvis_core.db.models import Mute from interactions import InteractionContext, Permissions
from naff import InteractionContext, Permissions from interactions.client.errors import Forbidden
from naff.client.errors import Forbidden from interactions.models.discord.modal import InputText, Modal, TextStyles
from naff.models.discord.modal import InputText, Modal, TextStyles from interactions.models.discord.user import Member
from naff.models.discord.user import Member from interactions.models.internal.application_commands import (
from naff.models.naff.application_commands import (
CommandTypes, CommandTypes,
OptionTypes, OptionTypes,
SlashCommandChoice, SlashCommandChoice,
@ -17,7 +16,8 @@ from naff.models.naff.application_commands import (
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db.models import Mute
from jarvis.embeds.admin import mute_embed, unmute_embed from jarvis.embeds.admin import mute_embed, unmute_embed
from jarvis.utils.cogs import ModcaseCog from jarvis.utils.cogs import ModcaseCog

View file

@ -1,16 +1,16 @@
"""JARVIS PurgeCog.""" """JARVIS PurgeCog."""
import logging import logging
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext, Permissions
from jarvis_core.db.models import Autopurge, Purge from interactions.models.discord.channel import GuildText
from naff import Client, Extension, InteractionContext, Permissions from interactions.models.internal.application_commands import (
from naff.models.discord.channel import GuildText
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Autopurge, Purge
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -1,20 +1,20 @@
"""JARVIS RolepingCog.""" """JARVIS RolepingCog."""
import logging import logging
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext, Permissions
from jarvis_core.db.models import Roleping from interactions.client.utils.misc_utils import find_all
from naff import Client, Extension, InteractionContext, Permissions from interactions.ext.paginators import Paginator
from naff.client.utils.misc_utils import find_all from interactions.models.discord.embed import EmbedField
from naff.ext.paginators import Paginator from interactions.models.discord.role import Role
from naff.models.discord.embed import EmbedField from interactions.models.discord.user import Member
from naff.models.discord.role import Role from interactions.models.internal.application_commands import (
from naff.models.discord.user import Member
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Roleping
from jarvis.utils import build_embed from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -3,20 +3,20 @@ import asyncio
import logging import logging
from typing import Any from typing import Any
from jarvis_core.db import q from interactions import AutocompleteContext, Client, Extension, InteractionContext
from jarvis_core.db.models import Setting from interactions.models.discord.channel import GuildText
from naff import AutocompleteContext, Client, Extension, InteractionContext from interactions.models.discord.components import ActionRow, Button, ButtonStyles
from naff.models.discord.channel import GuildText from interactions.models.discord.embed import EmbedField
from naff.models.discord.components import ActionRow, Button, ButtonStyles from interactions.models.discord.enums import Permissions
from naff.models.discord.embed import EmbedField from interactions.models.discord.role import Role
from naff.models.discord.enums import Permissions from interactions.models.internal.application_commands import (
from naff.models.discord.role import Role
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Setting
from thefuzz import process from thefuzz import process
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -4,19 +4,19 @@ from datetime import datetime, timezone
from dateparser import parse from dateparser import parse
from dateparser_data.settings import default_parsers from dateparser_data.settings import default_parsers
from jarvis_core.db.models import Temprole from interactions import Client, Extension, InteractionContext, Permissions
from naff import Client, Extension, InteractionContext, Permissions from interactions.models.discord.components import Button
from naff.models.discord.components import Button from interactions.models.discord.embed import EmbedField
from naff.models.discord.embed import EmbedField from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.role import Role
from naff.models.discord.role import Role from interactions.models.discord.user import Member
from naff.models.discord.user import Member from interactions.models.internal.application_commands import (
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db.models import Temprole
from jarvis.utils import build_embed from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions

View file

@ -3,13 +3,13 @@ import asyncio
import logging import logging
from random import randint from random import randint
from interactions import Client, Extension, InteractionContext
from interactions.models.discord.components import Button, ButtonStyles, spread_to_rows
from interactions.models.internal.application_commands import slash_command
from interactions.models.internal.command import cooldown
from interactions.models.internal.cooldowns import Buckets
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import Setting from jarvis_core.db.models import Setting
from naff import Client, Extension, InteractionContext
from naff.models.discord.components import Button, ButtonStyles, spread_to_rows
from naff.models.naff.application_commands import slash_command
from naff.models.naff.command import cooldown
from naff.models.naff.cooldowns import Buckets
def create_layout() -> list: def create_layout() -> list:

View file

@ -1,19 +1,19 @@
"""JARVIS WarningCog.""" """JARVIS WarningCog."""
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from jarvis_core.db import q from interactions import InteractionContext, Permissions
from jarvis_core.db.models import Warning from interactions.client.utils.misc_utils import get_all
from naff import InteractionContext, Permissions from interactions.ext.paginators import Paginator
from naff.client.utils.misc_utils import get_all from interactions.models.discord.embed import EmbedField
from naff.ext.paginators import Paginator from interactions.models.discord.user import Member
from naff.models.discord.embed import EmbedField from interactions.models.internal.application_commands import (
from naff.models.discord.user import Member
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Warning
from jarvis.embeds.admin import warning_embed from jarvis.embeds.admin import warning_embed
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -6,11 +6,13 @@ from io import BytesIO
import psutil import psutil
from aiofile import AIOFile, LineReader from aiofile import AIOFile, LineReader
from naff import Client, Extension, PrefixedContext, prefixed_command from interactions import Client, Extension
from naff.models.discord.components import Button from interactions.ext.prefixed_commands.command import prefixed_command
from naff.models.discord.embed import EmbedField from interactions.ext.prefixed_commands.context import PrefixedContext
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.components import Button
from naff.models.discord.file import File from interactions.models.discord.embed import EmbedField
from interactions.models.discord.enums import ButtonStyles
from interactions.models.discord.file import File
from rich.console import Console from rich.console import Console
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -7,19 +7,19 @@ from typing import List
from dateparser import parse from dateparser import parse
from dateparser_data.settings import default_parsers from dateparser_data.settings import default_parsers
from jarvis_core.db import q from interactions import AutocompleteContext, Client, Extension, InteractionContext
from jarvis_core.db.models import Reminder from interactions.models.discord.channel import GuildChannel
from naff import AutocompleteContext, Client, Extension, InteractionContext from interactions.models.discord.components import ActionRow, Button
from naff.models.discord.channel import GuildChannel from interactions.models.discord.embed import Embed, EmbedField
from naff.models.discord.components import ActionRow, Button from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.embed import Embed, EmbedField from interactions.models.discord.modal import InputText, Modal, TextStyles
from naff.models.discord.enums import ButtonStyles from interactions.models.internal.application_commands import (
from naff.models.discord.modal import InputText, Modal, TextStyles
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from jarvis_core.db import q
from jarvis_core.db.models import Reminder
from thefuzz import process from thefuzz import process
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -1,6 +1,6 @@
"""JARVIS Social Cogs.""" """JARVIS Social Cogs."""
from naff import Client from interactions import Client
from jarvis.cogs.core.socials import reddit, twitter from jarvis.cogs.core.socials import reddit, twitter

View file

@ -8,6 +8,22 @@ from asyncpraw import Reddit
from asyncpraw.models.reddit.submission import Submission from asyncpraw.models.reddit.submission import Submission
from asyncpraw.models.reddit.submission import Subreddit as Sub from asyncpraw.models.reddit.submission import Subreddit as Sub
from asyncprawcore.exceptions import Forbidden, NotFound, Redirect from asyncprawcore.exceptions import Forbidden, NotFound, Redirect
from interactions import Client, Extension, InteractionContext, Permissions
from interactions.client.utils.misc_utils import get
from interactions.models.discord.channel import ChannelTypes, GuildText
from interactions.models.discord.components import (
ActionRow,
StringSelectMenu,
StringSelectOption,
)
from interactions.models.discord.embed import Embed, EmbedField
from interactions.models.internal.application_commands import (
OptionTypes,
SlashCommand,
SlashCommandChoice,
slash_option,
)
from interactions.models.internal.command import check
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import ( from jarvis_core.db.models import (
Redditor, Redditor,
@ -16,18 +32,6 @@ from jarvis_core.db.models import (
SubredditFollow, SubredditFollow,
UserSetting, UserSetting,
) )
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, SelectOption, StringSelectMenu
from naff.models.discord.embed import Embed, EmbedField
from naff.models.naff.application_commands import (
OptionTypes,
SlashCommand,
SlashCommandChoice,
slash_option,
)
from naff.models.naff.command import check
from jarvis import const from jarvis import const
from jarvis.config import JarvisConfig from jarvis.config import JarvisConfig
@ -208,7 +212,7 @@ class RedditCog(Extension):
for idx, redditor in enumerate(redditors): for idx, redditor in enumerate(redditors):
sub = await Redditor.find_one(q(name=redditor.name)) sub = await Redditor.find_one(q(name=redditor.name))
names.append(sub.name) names.append(sub.name)
option = SelectOption(label=sub.name, value=str(idx)) option = StringSelectOption(label=sub.name, value=str(idx))
options.append(option) options.append(option)
select = StringSelectMenu(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))
@ -327,7 +331,7 @@ class RedditCog(Extension):
for idx, subreddit in enumerate(subreddits): for idx, subreddit in enumerate(subreddits):
sub = await Subreddit.find_one(q(display_name=subreddit.display_name)) sub = await Subreddit.find_one(q(display_name=subreddit.display_name))
names.append(sub.display_name) names.append(sub.display_name)
option = SelectOption(label=sub.display_name, value=str(idx)) option = StringSelectOption(label=sub.display_name, value=str(idx))
options.append(option) options.append(option)
select = StringSelectMenu(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))

View file

@ -3,18 +3,22 @@ import asyncio
import logging import logging
import tweepy import tweepy
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext, Permissions
from jarvis_core.db.models import TwitterAccount, TwitterFollow from interactions.client.utils.misc_utils import get
from naff import Client, Extension, InteractionContext, Permissions from interactions.models.discord.channel import GuildText
from naff.client.utils.misc_utils import get from interactions.models.discord.components import (
from naff.models.discord.channel import GuildText ActionRow,
from naff.models.discord.components import ActionRow, SelectOption, StringSelectMenu StringSelectMenu,
from naff.models.naff.application_commands import ( StringSelectOption,
)
from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import TwitterAccount, TwitterFollow
from jarvis.config import JarvisConfig from jarvis.config import JarvisConfig
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions
@ -121,7 +125,7 @@ class TwitterCog(Extension):
for twitter in twitters: for twitter in twitters:
account = await TwitterAccount.find_one(q(twitter_id=twitter.twitter_id)) account = await TwitterAccount.find_one(q(twitter_id=twitter.twitter_id))
handlemap[str(twitter.twitter_id)] = account.handle handlemap[str(twitter.twitter_id)] = account.handle
option = SelectOption(label=account.handle, value=str(twitter.twitter_id)) option = StringSelectOption(label=account.handle, value=str(twitter.twitter_id))
options.append(option) options.append(option)
select = StringSelectMenu(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))
@ -185,7 +189,7 @@ class TwitterCog(Extension):
for twitter in twitters: for twitter in twitters:
account = await TwitterAccount.find_one(q(twitter_id=twitter.id)) account = await TwitterAccount.find_one(q(twitter_id=twitter.id))
handlemap[str(twitter.twitter_id)] = account.handle handlemap[str(twitter.twitter_id)] = account.handle
option = SelectOption(label=account.handle, value=str(twitter.twitter_id)) option = StringSelectOption(label=account.handle, value=str(twitter.twitter_id))
options.append(option) options.append(option)
select = StringSelectMenu(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))

View file

@ -9,16 +9,17 @@ from io import BytesIO
import numpy as np import numpy as np
from dateparser import parse from dateparser import parse
from naff import Client, Extension, InteractionContext, const from interactions import Client, Extension, InteractionContext
from naff.models.discord.channel import GuildCategory, GuildText, GuildVoice from interactions import __version__ as ipyv
from naff.models.discord.components import Button from interactions.models.discord.channel import GuildCategory, GuildText, GuildVoice
from naff.models.discord.embed import EmbedField from interactions.models.discord.components import Button
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.embed import EmbedField
from naff.models.discord.file import File from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.guild import Guild from interactions.models.discord.file import File
from naff.models.discord.role import Role from interactions.models.discord.guild import Guild
from naff.models.discord.user import User from interactions.models.discord.role import Role
from naff.models.naff.application_commands import ( from interactions.models.discord.user import User
from interactions.models.internal.application_commands import (
CommandTypes, CommandTypes,
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
@ -27,8 +28,8 @@ from naff.models.naff.application_commands import (
slash_command, slash_command,
slash_option, slash_option,
) )
from naff.models.naff.command import cooldown from interactions.models.internal.command import cooldown
from naff.models.naff.cooldowns import Buckets from interactions.models.internal.cooldowns import Buckets
from PIL import Image from PIL import Image
from tzlocal import get_localzone from tzlocal import get_localzone
@ -88,7 +89,9 @@ class UtilCog(Extension):
inline=True, inline=True,
) )
) )
fields.append(EmbedField(name="NAFF", value=f"[{const.__version__}](https://naff.info)", inline=True)) fields.append(
EmbedField(name="interactions", value=f"[{ipyv}](https://interactionspy.readthedocs.io)", inline=True)
)
repo_url = f"https://git.zevaryx.com/stark-industries/jarvis/jarvis-bot/-/tree/{get_repo_hash()}" repo_url = f"https://git.zevaryx.com/stark-industries/jarvis/jarvis-bot/-/tree/{get_repo_hash()}"
fields.append(EmbedField(name="Git Hash", value=f"[{get_repo_hash()[:7]}]({repo_url})", inline=True)) fields.append(EmbedField(name="Git Hash", value=f"[{get_repo_hash()[:7]}]({repo_url})", inline=True))
fields.append(EmbedField(name="Online Since", value=f"<t:{uptime}:F>", inline=False)) fields.append(EmbedField(name="Online Since", value=f"<t:{uptime}:F>", inline=False))

View file

@ -1,5 +1,5 @@
"""JARVIS extra, optional cogs""" """JARVIS extra, optional cogs"""
from naff import Client from interactions import Client
from jarvis.cogs.extra import calc, dev, image, pinboard, rolegiver, tags from jarvis.cogs.extra import calc, dev, image, pinboard, rolegiver, tags

View file

@ -3,11 +3,11 @@ import json
from aiohttp import ClientSession from aiohttp import ClientSession
from calculator import calculate from calculator import calculate
from naff import AutocompleteContext, Client, Extension, InteractionContext from interactions import AutocompleteContext, Client, Extension, InteractionContext
from naff.models.discord.components import Button from interactions.models.discord.components import Button
from naff.models.discord.embed import Embed, EmbedField from interactions.models.discord.embed import Embed, EmbedField
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.enums import ButtonStyles
from naff.models.naff.application_commands import ( from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
SlashCommandChoice, SlashCommandChoice,

View file

@ -12,23 +12,23 @@ import ulid as ulidpy
from aiofile import AIOFile from aiofile import AIOFile
from ansitoimg.render import ansiToRender from ansitoimg.render import ansiToRender
from bson import ObjectId from bson import ObjectId
from jarvis_core.filters import invites, url from interactions import Client, Extension, InteractionContext
from jarvis_core.util import convert_bytesize, hash from interactions.models.discord.components import Button
from jarvis_core.util.http import get_size from interactions.models.discord.embed import EmbedField
from naff import Client, Extension, InteractionContext from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.components import Button from interactions.models.discord.file import File
from naff.models.discord.embed import EmbedField from interactions.models.discord.message import Attachment
from naff.models.discord.enums import ButtonStyles from interactions.models.internal.application_commands import (
from naff.models.discord.file import File
from naff.models.discord.message import Attachment
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
SlashCommandChoice, SlashCommandChoice,
slash_option, slash_option,
) )
from naff.models.naff.command import cooldown from interactions.models.internal.command import cooldown
from naff.models.naff.cooldowns import Buckets from interactions.models.internal.cooldowns import Buckets
from jarvis_core.filters import invites, url
from jarvis_core.util import convert_bytesize, hash
from jarvis_core.util.http import get_size
from rich.console import Console from rich.console import Console
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -6,18 +6,18 @@ from io import BytesIO
import aiohttp import aiohttp
import cv2 import cv2
import numpy as np import numpy as np
from jarvis_core.util import convert_bytesize, unconvert_bytesize from interactions import Client, Extension, InteractionContext
from naff import Client, Extension, InteractionContext from interactions.models.discord.components import Button
from naff.models.discord.components import Button from interactions.models.discord.embed import EmbedField
from naff.models.discord.embed import EmbedField from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.file import File
from naff.models.discord.file import File from interactions.models.discord.message import Attachment
from naff.models.discord.message import Attachment from interactions.models.internal.application_commands import (
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from jarvis_core.util import convert_bytesize, unconvert_bytesize
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -2,27 +2,27 @@
import asyncio import asyncio
import logging import logging
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext, Permissions
from jarvis_core.db.models import Star, Starboard from interactions.client import errors
from naff import Client, Extension, InteractionContext, Permissions from interactions.models.discord.channel import GuildText
from naff.client import errors from interactions.models.discord.components import (
from naff.models.discord.channel import GuildText
from naff.models.discord.components import (
ActionRow, ActionRow,
Button, Button,
SelectOption,
StringSelectMenu, StringSelectMenu,
StringSelectOption,
) )
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.message import Message from interactions.models.discord.message import Message
from naff.models.naff.application_commands import ( from interactions.models.internal.application_commands import (
CommandTypes, CommandTypes,
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
context_menu, context_menu,
slash_option, slash_option,
) )
from naff.models.naff.command import check from interactions.models.internal.command import check
from jarvis_core.db import q
from jarvis_core.db.models import Star, Starboard
from jarvis.utils import build_embed from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions
@ -167,9 +167,9 @@ class PinboardCog(Extension):
select_channels = [] select_channels = []
for idx, x in enumerate(channel_list): for idx, x in enumerate(channel_list):
if x: if x:
select_channels.append(SelectOption(label=x.name, value=str(idx))) select_channels.append(StringSelectOption(label=x.name, value=str(idx)))
select_channels = [SelectOption(label=x.name, value=str(idx)) for idx, x in enumerate(channel_list)] select_channels = [StringSelectOption(label=x.name, value=str(idx)) for idx, x in enumerate(channel_list)]
select = StringSelectMenu( select = StringSelectMenu(
options=select_channels, options=select_channels,

View file

@ -3,9 +3,7 @@ import asyncio
import logging import logging
from typing import Dict from typing import Dict
from jarvis_core.db import q from interactions import (
from jarvis_core.db.models import Rolegiver
from naff import (
AutocompleteContext, AutocompleteContext,
Client, Client,
Extension, Extension,
@ -13,23 +11,25 @@ from naff import (
Permissions, Permissions,
listen, listen,
) )
from naff.client.utils.misc_utils import get from interactions.client.utils.misc_utils import get
from naff.models.discord.components import ( from interactions.models.discord.components import (
ActionRow, ActionRow,
Button, Button,
SelectOption,
StringSelectMenu, StringSelectMenu,
StringSelectOption,
) )
from naff.models.discord.embed import EmbedField from interactions.models.discord.embed import EmbedField
from naff.models.discord.enums import ButtonStyles from interactions.models.discord.enums import ButtonStyles
from naff.models.discord.role import Role from interactions.models.discord.role import Role
from naff.models.naff.application_commands import ( from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import check, cooldown from interactions.models.internal.command import check, cooldown
from naff.models.naff.cooldowns import Buckets from interactions.models.internal.cooldowns import Buckets
from jarvis_core.db import q
from jarvis_core.db.models import Rolegiver
from thefuzz import process from thefuzz import process
from jarvis.utils import build_embed from jarvis.utils import build_embed
@ -226,7 +226,7 @@ class RolegiverCog(Extension):
options = [] options = []
for role in setting.roles: for role in setting.roles:
role: Role = await ctx.guild.fetch_role(role) role: Role = await ctx.guild.fetch_role(role)
option = SelectOption(label=role.name, value=str(role.id)) option = StringSelectOption(label=role.name, value=str(role.id))
options.append(option) options.append(option)
select = StringSelectMenu( select = StringSelectMenu(
@ -305,7 +305,7 @@ class RolegiverCog(Extension):
valid = list(filter(lambda x: x.id in setting.roles, user_roles)) valid = list(filter(lambda x: x.id in setting.roles, user_roles))
options = [] options = []
for role in valid: for role in valid:
option = SelectOption(label=role.name, value=str(role.id)) option = StringSelectOption(label=role.name, value=str(role.id))
options.append(option) options.append(option)
select = StringSelectMenu( select = StringSelectMenu(

View file

@ -4,18 +4,18 @@ import re
from datetime import datetime, timezone from datetime import datetime, timezone
from typing import Dict, List from typing import Dict, List
from jarvis_core.db import q from interactions import AutocompleteContext, Client, Extension, InteractionContext
from jarvis_core.db.models import Setting, Tag from interactions.models.discord.components import Button
from naff import AutocompleteContext, Client, Extension, InteractionContext from interactions.models.discord.embed import EmbedField
from naff.models.discord.components import Button from interactions.models.discord.enums import ButtonStyles, Permissions
from naff.models.discord.embed import EmbedField from interactions.models.discord.modal import InputText, Modal, TextStyles
from naff.models.discord.enums import ButtonStyles, Permissions from interactions.models.internal.application_commands import (
from naff.models.discord.modal import InputText, Modal, TextStyles
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from jarvis_core.db import q
from jarvis_core.db.models import Setting, Tag
from thefuzz import process from thefuzz import process
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -1,5 +1,5 @@
"""JARVIS guild-specific cogs""" """JARVIS guild-specific cogs"""
from naff import Client from interactions import Client
from jarvis.cogs.unique import ctc2, dbrand, gl from jarvis.cogs.unique import ctc2, dbrand, gl

View file

@ -3,20 +3,20 @@ import logging
import re import re
import aiohttp import aiohttp
from jarvis_core.db import q from interactions import Client, Extension, InteractionContext
from jarvis_core.db.models import Guess from interactions.ext.paginators import Paginator
from naff import Client, Extension, InteractionContext from interactions.models.discord.components import ActionRow, Button, ButtonStyles
from naff.ext.paginators import Paginator from interactions.models.discord.embed import EmbedField
from naff.models.discord.components import ActionRow, Button, ButtonStyles from interactions.models.discord.user import Member, User
from naff.models.discord.embed import EmbedField from interactions.models.internal.application_commands import (
from naff.models.discord.user import Member, User
from naff.models.naff.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import cooldown from interactions.models.internal.command import cooldown
from naff.models.naff.cooldowns import Buckets from interactions.models.internal.cooldowns import Buckets
from jarvis_core.db import q
from jarvis_core.db.models import Guess
from jarvis.utils import build_embed from jarvis.utils import build_embed

View file

@ -5,16 +5,16 @@ from datetime import datetime, timedelta, timezone
import aiohttp import aiohttp
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from naff import Client, Extension, InteractionContext from interactions import Client, Extension, InteractionContext
from naff.client.utils import find from interactions.client.utils import find
from naff.models.discord.embed import EmbedField from interactions.models.discord.embed import EmbedField
from naff.models.naff.application_commands import ( from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
slash_option, slash_option,
) )
from naff.models.naff.command import cooldown from interactions.models.internal.command import cooldown
from naff.models.naff.cooldowns import Buckets from interactions.models.internal.cooldowns import Buckets
from thefuzz import process from thefuzz import process
from jarvis.branding import CUSTOM_EMOJIS from jarvis.branding import CUSTOM_EMOJIS

View file

@ -4,12 +4,12 @@ import logging
from datetime import datetime from datetime import datetime
import gitlab import gitlab
from naff import Client, Extension, InteractionContext from interactions import Client, Extension, InteractionContext
from naff.ext.paginators import Paginator from interactions.ext.paginators import Paginator
from naff.models.discord.embed import Embed, EmbedField from interactions.models.discord.embed import Embed, EmbedField
from naff.models.discord.modal import InputText, Modal, TextStyles from interactions.models.discord.modal import InputText, Modal, TextStyles
from naff.models.discord.user import Member from interactions.models.discord.user import Member
from naff.models.naff.application_commands import ( from interactions.models.internal.application_commands import (
OptionTypes, OptionTypes,
SlashCommand, SlashCommand,
SlashCommandChoice, SlashCommandChoice,

View file

@ -1,9 +1,9 @@
"""JARVIS bot-specific embeds.""" """JARVIS bot-specific embeds."""
from typing import Optional from typing import Optional
from naff.models.discord.embed import Embed, EmbedField from interactions.models.discord.embed import Embed, EmbedField
from naff.models.discord.guild import Guild from interactions.models.discord.guild import Guild
from naff.models.discord.user import Member, User from interactions.models.discord.user import Member, User
from jarvis.branding import get_command_color from jarvis.branding import get_command_color
from jarvis.utils import build_embed from jarvis.utils import build_embed
@ -33,9 +33,7 @@ def ban_embed(
fields = [EmbedField(name="Reason", value=reason), EmbedField(name="Type", value=type)] fields = [EmbedField(name="Reason", value=reason), EmbedField(name="Type", value=type)]
if duration: if duration:
fields.append(EmbedField(name="Duration", value=f"{duration} hours")) fields.append(EmbedField(name="Duration", value=f"{duration} hours"))
fields.append( fields.append(EmbedField(name="Admin", value=f"{admin.username}#{admin.discriminator} ({admin.mention})"))
EmbedField(name="Admin", value=f"{admin.username}#{admin.discriminator} ({admin.mention})")
)
if dm: if dm:
embed = build_embed( embed = build_embed(
title=f"You have been banned from {guild.name}", title=f"You have been banned from {guild.name}",

View file

@ -3,9 +3,9 @@ from datetime import datetime, timezone
from pkgutil import iter_modules from pkgutil import iter_modules
import git import git
from naff.models.discord.embed import Embed, EmbedField from interactions.models.discord.embed import Embed, EmbedField
from naff.models.discord.guild import AuditLogEntry from interactions.models.discord.guild import AuditLogEntry
from naff.models.discord.user import Member from interactions.models.discord.user import Member
from jarvis.branding import PRIMARY_COLOR from jarvis.branding import PRIMARY_COLOR
from jarvis.config import JarvisConfig from jarvis.config import JarvisConfig

View file

@ -2,12 +2,12 @@
import logging import logging
from datetime import timedelta from datetime import timedelta
from interactions import Client, Extension, InteractionContext
from interactions.models.discord.components import ActionRow, Button, ButtonStyles
from interactions.models.discord.embed import EmbedField
from interactions.models.discord.user import Member
from jarvis_core.db import q from jarvis_core.db import q
from jarvis_core.db.models import Action, Ban, Kick, Modlog, Mute, Setting, Warning from jarvis_core.db.models import Action, Ban, Kick, Modlog, Mute, Setting, Warning
from naff import Client, Extension, InteractionContext
from naff.models.discord.components import ActionRow, Button, ButtonStyles
from naff.models.discord.embed import EmbedField
from naff.models.discord.user import Member
from jarvis.tracking import warnings_tracker from jarvis.tracking import warnings_tracker
from jarvis.utils import build_embed from jarvis.utils import build_embed
@ -60,9 +60,7 @@ class ModcaseCog(Extension):
self.logger.warning("Unsupported action %s, exiting", name) self.logger.warning("Unsupported action %s, exiting", name)
return return
action = await coll.find_one( action = await coll.find_one(q(user=user.id, guild=ctx.guild_id, active=True), sort=[("_id", -1)])
q(user=user.id, guild=ctx.guild_id, active=True), sort=[("_id", -1)]
)
if not action: if not action:
self.logger.warning("Missing action %s, exiting", name) self.logger.warning("Missing action %s, exiting", name)
return return
@ -71,9 +69,7 @@ class ModcaseCog(Extension):
if notify and name not in ("Kick", "Ban"): # Ignore Kick and Ban, as these are unique if notify and name not in ("Kick", "Ban"): # Ignore Kick and Ban, as these are unique
fields = ( fields = (
EmbedField(name="Action Type", value=name, inline=False), EmbedField(name="Action Type", value=name, inline=False),
EmbedField( EmbedField(name="Reason", value=kwargs.get("reason", None) or "N/A", inline=False),
name="Reason", value=kwargs.get("reason", None) or "N/A", inline=False
),
) )
embed = build_embed( embed = build_embed(
title="Admin action taken", title="Admin action taken",
@ -106,9 +102,7 @@ class ModcaseCog(Extension):
if channel: if channel:
fields = ( fields = (
EmbedField(name="Action Type", value=name, inline=False), EmbedField(name="Action Type", value=name, inline=False),
EmbedField( EmbedField(name="Reason", value=kwargs.get("reason", None) or "N/A", inline=False),
name="Reason", value=kwargs.get("reason", None) or "N/A", inline=False
),
EmbedField(name="Admin", value=ctx.author.mention, inline=False), EmbedField(name="Admin", value=ctx.author.mention, inline=False),
) )
embed = build_embed( embed = build_embed(
@ -116,9 +110,7 @@ class ModcaseCog(Extension):
description=f"Admin action has been taken against {user.mention}", description=f"Admin action has been taken against {user.mention}",
fields=fields, fields=fields,
) )
embed.set_author( embed.set_author(name=f"{user.username}#{user.discriminator}", icon_url=user.display_avatar.url)
name=f"{user.username}#{user.discriminator}", icon_url=user.display_avatar.url
)
embed.set_footer(text=f"User ID: {user.id}") embed.set_footer(text=f"User ID: {user.id}")
if name == "Mute": if name == "Mute":
mts = int(user.communication_disabled_until.timestamp()) mts = int(user.communication_disabled_until.timestamp())
@ -134,9 +126,7 @@ class ModcaseCog(Extension):
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(f"Guild {ctx.guild.id} modlog channel no longer exists, deleting")
f"Guild {ctx.guild.id} modlog channel no longer exists, deleting"
)
await modlog.delete() await modlog.delete()
return return
@ -157,7 +147,5 @@ class ModcaseCog(Extension):
] ]
message = await channel.send(embeds=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)
)
await self.bot.redis.set(f"msg|{message.id}", user.id, ex=timedelta(days=7)) await self.bot.redis.set(f"msg|{message.id}", user.id, ex=timedelta(days=7))

View file

@ -1,5 +1,5 @@
"""Permissions wrappers.""" """Permissions wrappers."""
from naff import InteractionContext, Permissions from interactions import InteractionContext, Permissions
from jarvis.config import JarvisConfig from jarvis.config import JarvisConfig

View file

@ -9,16 +9,16 @@ from types import FunctionType, ModuleType
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional
import git import git
from naff.client.errors import ExtensionNotFound from interactions.client.errors import ExtensionNotFound
from naff.client.utils.misc_utils import find, find_all from interactions.client.utils.misc_utils import find, find_all
from naff.models.naff.application_commands import SlashCommand from interactions.models.internal.application_commands import SlashCommand
from naff.models.naff.extension import Extension from interactions.models.internal.extension import Extension
from rich.table import Table from rich.table import Table
import jarvis.cogs import jarvis.cogs
if TYPE_CHECKING: if TYPE_CHECKING:
from naff.client.client import Client from interactions.client.client import Client
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@ -75,9 +75,7 @@ def get_git_changes(repo: git.Repo) -> dict:
if commit.hexsha == current_hash: if commit.hexsha == current_hash:
break break
files = commit.stats.files files = commit.stats.files
file_changes.update( file_changes.update({key: {"insertions": 0, "deletions": 0, "lines": 0} for key in files.keys()})
{key: {"insertions": 0, "deletions": 0, "lines": 0} for key in files.keys()}
)
for file, stats in files.items(): for file, stats in files.items():
if file not in file_changes: if file not in file_changes:
file_changes[file] = {"insertions": 0, "deletions": 0, "lines": 0} file_changes[file] = {"insertions": 0, "deletions": 0, "lines": 0}
@ -168,9 +166,7 @@ async def update(bot: "Client") -> Optional[UpdateResult]:
reloaded.append(module) reloaded.append(module)
else: else:
for command in commands: for command in commands:
old_command = find( old_command = find(lambda x: x.resolved_name == command.resolved_name, current_commands[module])
lambda x: x.resolved_name == command.resolved_name, current_commands[module]
)
# Extract useful info # Extract useful info
old_args = old_command.options old_args = old_command.options

91
poetry.lock generated
View file

@ -803,6 +803,34 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker
perf = ["ipython"] perf = ["ipython"]
testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"]
[[package]]
name = "interactions"
version = "5.0.0"
description = "Easy, simple, scalable and modular: a Python API wrapper for interactions."
category = "main"
optional = false
python-versions = ">=3.10,<4.0"
files = []
develop = false
[package.dependencies]
aiohttp = "^3.8.3"
attrs = ">=22.1.0"
discord-typings = "^0.5.1"
emoji = "^2.1.0"
mypy = ">0.930"
tomli = "^2.0.1"
[package.extras]
jurigged = ["jurigged (>=0.5.3,<0.6.0)"]
orjson = ["orjson (>=3.6.8,<4.0.0)"]
[package.source]
type = "git"
url = "https://github.com/interactions-py/interactions.py"
reference = "5.x"
resolved_reference = "2a20657a939dfde33163042a1fe8cb3e960a4fa5"
[[package]] [[package]]
name = "jarvis-core" name = "jarvis-core"
version = "0.16.1" version = "0.16.1"
@ -1110,11 +1138,62 @@ files = [
{file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"},
] ]
[[package]]
name = "mypy"
version = "0.991"
description = "Optional static typing for Python"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"},
{file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"},
{file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"},
{file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"},
{file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"},
{file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"},
{file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"},
{file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"},
{file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"},
{file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"},
{file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"},
{file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"},
{file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"},
{file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"},
{file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"},
{file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"},
{file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"},
{file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"},
{file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"},
{file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"},
{file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"},
{file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"},
{file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"},
{file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"},
{file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"},
{file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"},
{file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"},
{file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"},
{file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"},
{file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"},
]
[package.dependencies]
mypy-extensions = ">=0.4.3"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typing-extensions = ">=3.10"
[package.extras]
dmypy = ["psutil (>=4.0)"]
install-types = ["pip"]
python2 = ["typed-ast (>=1.4.0,<2)"]
reports = ["lxml"]
[[package]] [[package]]
name = "mypy-extensions" name = "mypy-extensions"
version = "0.4.3" version = "0.4.3"
description = "Experimental type system extensions for programs checked with the mypy typechecker." description = "Experimental type system extensions for programs checked with the mypy typechecker."
category = "dev" category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1124,19 +1203,19 @@ files = [
[[package]] [[package]]
name = "naff" name = "naff"
version = "2.0.0" version = "2.1.0"
description = "Not another freaking fork" description = "Not another freaking fork"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.10" python-versions = ">=3.10"
files = [ files = [
{file = "naff-2.0.0-py3-none-any.whl", hash = "sha256:afd3906acbdaf6f87ea6e618f07e97f059f9adf8011afd1e3b73fb55d03d153a"}, {file = "naff-2.1.0-py3-none-any.whl", hash = "sha256:e433683b62f1a151867a44c752cb8725e8505f99086b07765f66696fa553adf2"},
{file = "naff-2.0.0.tar.gz", hash = "sha256:eb51697ddf91ba0047a3d35951ad5a4daceb97301698b0078781dee969eb3f99"}, {file = "naff-2.1.0.tar.gz", hash = "sha256:a58db2f56f6f5fc4fbefb354ce4d17a78080817ac8524ce6e74dedc54e1c850c"},
] ]
[package.dependencies] [package.dependencies]
aiohttp = "*" aiohttp = "*"
attrs = "*" attrs = ">=22.1.0"
discord-typings = ">=0.5.1" discord-typings = ">=0.5.1"
emoji = "*" emoji = "*"
tomli = "*" tomli = "*"
@ -2690,4 +2769,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools"
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.10,<4" python-versions = ">=3.10,<4"
content-hash = "89f766c3bacf47f7b955a812a695020dbae9c4f301816e94c943151af2696a19" content-hash = "4a6ff8ef1a1d34dece616ee55184914e45562fb90713c6d8ba78552799d1712e"

View file

@ -22,7 +22,6 @@ aiofile = "^3.8.1"
asyncpraw = "^7.5.0" asyncpraw = "^7.5.0"
rich = "^12.3.0" rich = "^12.3.0"
jurigged = "^0.5.3" # Contributed jurigged = "^0.5.3" # Contributed
naff = { version = "^2.0.0", extras = ["orjson"] } # Contributed
ansitoimg = "^2022.1" ansitoimg = "^2022.1"
nest-asyncio = "^1.5.5" nest-asyncio = "^1.5.5"
thefuzz = {extras = ["speedup"], git = "https://github.com/zevaryx/thefuzz.git", rev = "master"} # Forked thefuzz = {extras = ["speedup"], git = "https://github.com/zevaryx/thefuzz.git", rev = "master"} # Forked
@ -30,6 +29,7 @@ beautifulsoup4 = "^4.11.1"
calculator = {git = "https://git.zevaryx.com/zevaryx/calculator.git"} # Mine calculator = {git = "https://git.zevaryx.com/zevaryx/calculator.git"} # Mine
nafftrack = {git = "https://github.com/zevaryx/nafftrack.git"} # Contributed nafftrack = {git = "https://github.com/zevaryx/nafftrack.git"} # Contributed
redis = "^4.4.0" redis = "^4.4.0"
interactions = {git = "https://github.com/interactions-py/interactions.py", rev = "5.x"}
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
black = {version = "^22.3.0", allow-prereleases = true} black = {version = "^22.3.0", allow-prereleases = true}