Files
Syntrel/cogs/utilities/__init__.py
neoarz 3f4254dcdc feat: Require group prefix for hybrid commands
Added a _require_group_prefix check to all hybrid commands in each cog to ensure commands are only executed when invoked with the appropriate group prefix. Also updated error handling in bot.py to silently ignore CheckFailure errors. This improves command organization and prevents accidental command execution outside their intended context.
2025-09-29 09:59:56 -04:00

57 lines
2.3 KiB
Python

import discord
from discord.ext import commands
from discord.ext.commands import Context
from .translate import translate_command
class Utilities(commands.GroupCog, name="utils"):
def __init__(self, bot) -> None:
self.bot = bot
super().__init__()
@commands.group(name="utilities", aliases=["utils"], invoke_without_command=True)
async def utilities_group(self, context: Context):
embed = discord.Embed(
title="Utilities Commands",
description="Use `.utils <subcommand>` or `/utils <subcommand>`.",
color=0x7289DA
)
embed.set_author(name="Utilities", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
embed.add_field(name="Available", value="translate", inline=False)
await context.send(embed=embed)
async def _invoke_hybrid(self, context: Context, name: str, **kwargs):
command = self.bot.get_command(name)
if command is not None:
await context.invoke(command, **kwargs)
else:
await context.send(f"Unknown utilities command: {name}")
def _require_group_prefix(context: Context) -> bool:
if getattr(context, "interaction", None):
return True
group = getattr(getattr(context, "cog", None), "qualified_name", "").lower()
if not group:
return True
prefix = context.prefix or ""
content = context.message.content.strip().lower()
return content.startswith(f"{prefix}{group} ")
@utilities_group.command(name="translate")
async def utilities_group_translate(self, context: Context, text: str = None, to_lang: str = "en", from_lang: str = None):
await self._invoke_hybrid(context, "translate", text=text, to_lang=to_lang, from_lang=from_lang)
@commands.check(_require_group_prefix)
@commands.hybrid_command(
name="translate",
description="Translate text to another language"
)
async def translate(self, context, text: str = None, to_lang: str = "en", from_lang: str = None):
return await translate_command()(self, context, text=text, to_lang=to_lang, from_lang=from_lang)
async def setup(bot) -> None:
cog = Utilities(bot)
await bot.add_cog(cog)
bot.logger.info("Loaded extension 'utilities.translate'")