# ╔══════════════════════════════════════════════════════════════════╗ # ║ ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ |H|e|x|a|H|o|s|t| ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ ║ # ║ © 2026 HexaHost — All Rights Reserved ║ # ║ ║ # ║ discord ── https://discord.gg/hexahost ║ # ║ github ── https://github.com/theoneandonlymace ║ # ║ ║ # ╚══════════════════════════════════════════════════════════════════╝ from __future__ import annotations from discord.ext import commands import discord import functools from typing import Optional, Any import asyncio __all__ = ("Context", ) class Context(commands.Context): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) def __repr__(self): return "" @property async def session(self): return self.bot.session @discord.utils.cached_property def replied_reference(self) -> Optional[discord.Message]: ref = self.message.reference if ref and isinstance(ref.resolved, discord.Message): return ref.resolved.to_reference() return None def with_type(func): @functools.wraps(func) async def wrapped(self, *args, **kwargs): context = args[0] if isinstance(args[0], commands.Context) else args[1] try: async with context.typing(): await func(*args, **kwargs) except discord.Forbidden: await func(*args, **kwargs) return wrapped async def show_help(self, command: str = None) -> Any: cmd = self.bot.get_command('help') command = command or self.command.qualified_name await self.invoke(cmd, command=command) async def send(self, content: Optional[str] = None, **kwargs) -> Optional[discord.Message]: if not (self.channel.permissions_for(self.me)).send_messages: try: await self.author.send( "bot dont have perms to send msg in that channel") except discord.Forbidden: pass return return await super().send(content, **kwargs) async def reply(self, content: Optional[str] = None, **kwargs) -> Optional[discord.Message]: if not (self.channel.permissions_for(self.me)).send_messages: try: await self.author.send( "bot dont have perms to send msg in that channel") except discord.Forbidden: pass return return await super().reply(content, **kwargs) async def release(self, delay: Optional[int] = None) -> None: delay = delay or 0 await asyncio.sleep(delay)