Condense slash commands
This commit is contained in:
parent
46d42114ba
commit
6f2fdc55d7
7 changed files with 77 additions and 89 deletions
|
@ -8,6 +8,7 @@ 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
|
||||
|
@ -61,6 +62,35 @@ class EventMixin(MemberEventMixin, MessageEventMixin, ComponentEventMixin):
|
|||
"{}&permissions=8&scope=bot%20applications.commands".format(self.user.id)
|
||||
)
|
||||
|
||||
global_base_commands = {}
|
||||
guild_base_commands = {}
|
||||
global_context_menus = []
|
||||
guild_context_menus = []
|
||||
for cid in self.interactions:
|
||||
commands = self.interactions[cid]
|
||||
to_update = global_base_commands if cid == 0 else guild_base_commands
|
||||
for command in commands:
|
||||
if isinstance(commands[command], ContextMenu):
|
||||
if cid == 0:
|
||||
global_context_menus.append(command)
|
||||
else:
|
||||
guild_context_menus.append(command)
|
||||
continue
|
||||
full = command.split(" ")
|
||||
base = full[0]
|
||||
if base not in to_update:
|
||||
to_update[base] = {}
|
||||
if len(full) == 3:
|
||||
to_update[base][full[1]] = full[2]
|
||||
elif len(full) == 2:
|
||||
to_update[base][full[1]] = None
|
||||
|
||||
self.logger.info(
|
||||
"Loaded {:>2} global base slash commands".format(len(global_base_commands))
|
||||
)
|
||||
self.logger.info("Loaded {:>2} global context menus".format(len(global_context_menus)))
|
||||
self.logger.info("Loaded {:>2} guild base slash commands".format(len(guild_base_commands)))
|
||||
self.logger.info("Loaded {:>2} guild context menus".format(len(guild_context_menus)))
|
||||
self.logger.debug("Hitting Reminders for faster loads")
|
||||
_ = await Reminder.find().to_list(None)
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ from naff.models.discord.file import File
|
|||
from naff.models.discord.message import Attachment
|
||||
from naff.models.naff.application_commands import (
|
||||
OptionTypes,
|
||||
SlashCommand,
|
||||
SlashCommandChoice,
|
||||
slash_command,
|
||||
slash_option,
|
||||
)
|
||||
from naff.models.naff.command import cooldown
|
||||
|
@ -60,7 +60,9 @@ class DevCog(Extension):
|
|||
self.bot = bot
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
@slash_command(name="hash", description="Hash some data")
|
||||
dev = SlashCommand(name="dev", description="Developer utilities")
|
||||
|
||||
@dev.subcommand(sub_cmd_name="hash", sub_cmd_description="Hash some data")
|
||||
@slash_option(
|
||||
name="method",
|
||||
description="Hash method",
|
||||
|
@ -126,7 +128,7 @@ class DevCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, components=components)
|
||||
|
||||
@slash_command(name="uuid", description="Generate a UUID")
|
||||
@dev.subcommand(sub_cmd_name="uuid", sub_cmd_description="Generate a UUID")
|
||||
@slash_option(
|
||||
name="version",
|
||||
description="UUID version",
|
||||
|
@ -159,25 +161,25 @@ class DevCog(Extension):
|
|||
to_send = UUID_GET[version](uuidpy.NAMESPACE_DNS, data)
|
||||
await ctx.send(f"UUID{version}: `{to_send}`")
|
||||
|
||||
@slash_command(
|
||||
name="objectid",
|
||||
description="Generate an ObjectID",
|
||||
@dev.subcommand(
|
||||
sub_cmd_name="objectid",
|
||||
sub_cmd_description="Generate an ObjectID",
|
||||
)
|
||||
@cooldown(bucket=Buckets.USER, rate=1, interval=2)
|
||||
async def _objectid(self, ctx: InteractionContext) -> None:
|
||||
await ctx.send(f"ObjectId: `{str(ObjectId())}`")
|
||||
|
||||
@slash_command(
|
||||
name="ulid",
|
||||
description="Generate a ULID",
|
||||
@dev.subcommand(
|
||||
sub_cmd_name="ulid",
|
||||
sub_cmd_description="Generate a ULID",
|
||||
)
|
||||
@cooldown(bucket=Buckets.USER, rate=1, interval=2)
|
||||
async def _ulid(self, ctx: InteractionContext) -> None:
|
||||
await ctx.send(f"ULID: `{ulidpy.new().str}`")
|
||||
|
||||
@slash_command(
|
||||
name="uuid2ulid",
|
||||
description="Convert a UUID to a ULID",
|
||||
@dev.subcommand(
|
||||
sub_cmd_name="uuid2ulid",
|
||||
sub_cmd_description="Convert a UUID to a ULID",
|
||||
)
|
||||
@slash_option(
|
||||
name="uuid", description="UUID to convert", opt_type=OptionTypes.STRING, required=True
|
||||
|
@ -190,9 +192,9 @@ class DevCog(Extension):
|
|||
else:
|
||||
await ctx.send("Invalid UUID")
|
||||
|
||||
@slash_command(
|
||||
name="ulid2uuid",
|
||||
description="Convert a ULID to a UUID",
|
||||
@dev.subcommand(
|
||||
sub_cmd_name="ulid2uuid",
|
||||
sub_cmd_description="Convert a ULID to a UUID",
|
||||
)
|
||||
@slash_option(
|
||||
name="ulid", description="ULID to convert", opt_type=OptionTypes.STRING, required=True
|
||||
|
@ -207,7 +209,7 @@ class DevCog(Extension):
|
|||
|
||||
base64_methods = ["b64", "b16", "b32", "a85", "b85"]
|
||||
|
||||
@slash_command(name="encode", description="Encode some data")
|
||||
@dev.subcommand(sub_cmd_name="encode", sub_cmd_description="Encode some data")
|
||||
@slash_option(
|
||||
name="method",
|
||||
description="Encode method",
|
||||
|
@ -245,7 +247,7 @@ class DevCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, components=components)
|
||||
|
||||
@slash_command(name="decode", description="Decode some data")
|
||||
@dev.subcommand(sub_cmd_name="decode", sub_cmd_description="Decode some data")
|
||||
@slash_option(
|
||||
name="method",
|
||||
description="Decode method",
|
||||
|
@ -283,7 +285,7 @@ class DevCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, components=components)
|
||||
|
||||
@slash_command(name="cloc", description="Get JARVIS lines of code")
|
||||
@dev.subcommand(sub_cmd_name="cloc", sub_cmd_description="Get JARVIS lines of code")
|
||||
@cooldown(bucket=Buckets.CHANNEL, rate=1, interval=30)
|
||||
async def _cloc(self, ctx: InteractionContext) -> None:
|
||||
await ctx.defer()
|
||||
|
|
|
@ -15,7 +15,7 @@ from naff.models.discord.file import File
|
|||
from naff.models.discord.message import Attachment
|
||||
from naff.models.naff.application_commands import (
|
||||
OptionTypes,
|
||||
slash_command,
|
||||
SlashCommand,
|
||||
slash_option,
|
||||
)
|
||||
|
||||
|
@ -40,7 +40,9 @@ class ImageCog(Extension):
|
|||
def __del__(self):
|
||||
self._session.close()
|
||||
|
||||
@slash_command(name="resize", description="Resize an image")
|
||||
image = SlashCommand(name="image", description="Manipulate images")
|
||||
|
||||
@image.subcommand(sub_cmd_name="shrink", sub_cmd_description="Shrink an image")
|
||||
@slash_option(
|
||||
name="target",
|
||||
description="Target size, i.e. 200KB",
|
||||
|
|
|
@ -18,7 +18,6 @@ from naff.models.discord.modal import InputText, Modal, TextStyles
|
|||
from naff.models.naff.application_commands import (
|
||||
OptionTypes,
|
||||
SlashCommand,
|
||||
slash_command,
|
||||
slash_option,
|
||||
)
|
||||
from thefuzz import process
|
||||
|
@ -40,7 +39,9 @@ class RemindmeCog(Extension):
|
|||
self.bot = bot
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
@slash_command(name="remindme", description="Set a reminder")
|
||||
reminders = SlashCommand(name="reminders", description="Manage reminders")
|
||||
|
||||
@reminders.subcommand(sub_cmd_name="set", sub_cmd_description="Set a reminder")
|
||||
@slash_option(
|
||||
name="private",
|
||||
description="Send as DM?",
|
||||
|
@ -210,8 +211,6 @@ class RemindmeCog(Extension):
|
|||
|
||||
return embed
|
||||
|
||||
reminders = SlashCommand(name="reminders", description="Manage reminders")
|
||||
|
||||
@reminders.subcommand(sub_cmd_name="list", sub_cmd_description="List reminders")
|
||||
async def _list(self, ctx: InteractionContext) -> None:
|
||||
reminders = await Reminder.find(q(user=ctx.author.id, active=True)).to_list(None)
|
||||
|
|
|
@ -212,9 +212,7 @@ class RolegiverCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, components=components)
|
||||
|
||||
role = SlashCommand(name="role", description="Get/Remove Rolegiver roles")
|
||||
|
||||
@role.subcommand(sub_cmd_name="get", sub_cmd_description="Get a role")
|
||||
@rolegiver.subcommand(sub_cmd_name="get", sub_cmd_description="Get a role")
|
||||
@cooldown(bucket=Buckets.USER, rate=1, interval=10)
|
||||
async def _role_get(self, ctx: InteractionContext) -> None:
|
||||
setting = await Rolegiver.find_one(q(guild=ctx.guild.id))
|
||||
|
@ -290,7 +288,7 @@ class RolegiverCog(Extension):
|
|||
component.disabled = True
|
||||
await message.edit(components=components)
|
||||
|
||||
@role.subcommand(sub_cmd_name="remove", sub_cmd_description="Remove a role")
|
||||
@rolegiver.subcommand(sub_cmd_name="forfeit", sub_cmd_description="Forfeit a role")
|
||||
@cooldown(bucket=Buckets.USER, rate=1, interval=10)
|
||||
async def _role_remove(self, ctx: InteractionContext) -> None:
|
||||
user_roles = ctx.author.roles
|
||||
|
|
|
@ -265,56 +265,6 @@ class StarboardCog(Extension):
|
|||
description="Manage stars",
|
||||
)
|
||||
|
||||
@star.subcommand(sub_cmd_name="delete", sub_cmd_description="Delete a starred message")
|
||||
@slash_option(
|
||||
name="id", description="Star ID to delete", opt_type=OptionTypes.INTEGER, required=True
|
||||
)
|
||||
@slash_option(
|
||||
name="starboard",
|
||||
description="Starboard to delete star from",
|
||||
opt_type=OptionTypes.CHANNEL,
|
||||
required=True,
|
||||
)
|
||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||
async def _star_delete(
|
||||
self,
|
||||
ctx: InteractionContext,
|
||||
id: int,
|
||||
starboard: GuildText,
|
||||
) -> None:
|
||||
if not isinstance(starboard, GuildText):
|
||||
await ctx.send("Channel must be a GuildText channel", ephemeral=True)
|
||||
return
|
||||
|
||||
exists = await Starboard.find_one(q(channel=starboard.id, guild=ctx.guild.id))
|
||||
if not exists:
|
||||
# TODO: automagically create starboard
|
||||
await ctx.send(
|
||||
f"Starboard does not exist in {starboard.mention}. Please create it first",
|
||||
ephemeral=True,
|
||||
)
|
||||
return
|
||||
|
||||
star = await Star.find_one(
|
||||
q(
|
||||
starboard=starboard.id,
|
||||
index=id,
|
||||
guild=ctx.guild.id,
|
||||
active=True,
|
||||
)
|
||||
)
|
||||
if not star:
|
||||
await ctx.send(f"No star exists with id {id}", ephemeral=True)
|
||||
return
|
||||
|
||||
message = await starboard.fetch_message(star.star)
|
||||
if message:
|
||||
await message.delete()
|
||||
|
||||
await star.delete()
|
||||
|
||||
await ctx.send(f"Star {id} deleted from {starboard.mention}")
|
||||
|
||||
|
||||
def setup(bot: Client) -> None:
|
||||
"""Add StarboardCog to JARVIS"""
|
||||
|
|
|
@ -20,6 +20,7 @@ from naff.models.discord.user import User
|
|||
from naff.models.naff.application_commands import (
|
||||
CommandTypes,
|
||||
OptionTypes,
|
||||
SlashCommand,
|
||||
SlashCommandChoice,
|
||||
context_menu,
|
||||
slash_command,
|
||||
|
@ -49,7 +50,9 @@ class UtilCog(Extension):
|
|||
self.bot = bot
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
@slash_command(name="status", description="Retrieve JARVIS status")
|
||||
bot = SlashCommand(name="bot", description="Bot commands")
|
||||
|
||||
@bot.subcommand(sub_cmd_name="status", sub_cmd_description="Retrieve JARVIS status")
|
||||
@cooldown(bucket=Buckets.CHANNEL, rate=1, interval=30)
|
||||
async def _status(self, ctx: InteractionContext) -> None:
|
||||
title = "JARVIS Status"
|
||||
|
@ -74,9 +77,9 @@ class UtilCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, components=components)
|
||||
|
||||
@slash_command(
|
||||
name="logo",
|
||||
description="Get the current logo",
|
||||
@bot.subcommand(
|
||||
sub_cmd_name="logo",
|
||||
sub_cmd_description="Get the current logo",
|
||||
)
|
||||
@cooldown(bucket=Buckets.CHANNEL, rate=1, interval=30)
|
||||
async def _logo(self, ctx: InteractionContext) -> None:
|
||||
|
@ -89,13 +92,15 @@ class UtilCog(Extension):
|
|||
)
|
||||
await ctx.send(file=logo, components=components)
|
||||
|
||||
@slash_command(name="rchk", description="Robot Camo HK416")
|
||||
rc = SlashCommand(name="rc", description="Robot Camo emoji commands")
|
||||
|
||||
@rc.subcommand(sub_cmd_name="hk", sub_cmd_description="Robot Camo HK416")
|
||||
async def _rchk(self, ctx: InteractionContext) -> None:
|
||||
await ctx.send(content=hk, ephemeral=True)
|
||||
|
||||
@slash_command(
|
||||
name="rcauto",
|
||||
description="Automates robot camo letters",
|
||||
@rc.subcommand(
|
||||
sub_cmd_name="auto",
|
||||
sub_cmd_description="Automates robot camo letters",
|
||||
)
|
||||
@slash_option(
|
||||
name="text",
|
||||
|
@ -176,7 +181,7 @@ class UtilCog(Extension):
|
|||
embed.set_thumbnail(url="attachment://color_show.png")
|
||||
|
||||
data = np.array(JARVIS_LOGO)
|
||||
r, g, b, a = data.T
|
||||
*_, a = data.T
|
||||
|
||||
fill = a > 0
|
||||
|
||||
|
@ -397,7 +402,7 @@ class UtilCog(Extension):
|
|||
)
|
||||
await ctx.send(embeds=embed, ephemeral=private, components=components)
|
||||
|
||||
@slash_command(name="support", description="Got issues?")
|
||||
@bot.subcommand(sub_cmd_name="support", sub_cmd_description="Got issues?")
|
||||
async def _support(self, ctx: InteractionContext) -> None:
|
||||
await ctx.send(
|
||||
f"""
|
||||
|
@ -409,7 +414,9 @@ We'll help as best we can with whatever issues you encounter.
|
|||
"""
|
||||
)
|
||||
|
||||
@slash_command(name="privacy_terms", description="View Privacy and Terms of Use")
|
||||
@bot.subcommand(
|
||||
sub_cmd_name="privacy_terms", sub_cmd_description="View Privacy and Terms of Use"
|
||||
)
|
||||
async def _privacy_terms(self, ctx: InteractionContext) -> None:
|
||||
await ctx.send(
|
||||
"""
|
||||
|
|
Loading…
Add table
Reference in a new issue