Update configuration and README for improved setup and security; disable default API and emoji sync, and enhance Discord permission checks in API routes.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
90
bot/core/Context.py
Normal file
90
bot/core/Context.py
Normal file
@@ -0,0 +1,90 @@
|
||||
# ╔══════════════════════════════════════════════════════════════════╗
|
||||
# ║ ║
|
||||
# ║ ░█▀▀░█▀█░█▀▄░█▀▀░█░█ ░█▀▄░█▀▀░█░█░█▀▀ ║
|
||||
# ║ ░█░░░█░█░█░█░█▀▀░▄▀▄ ░█░█░█▀▀░▀▄▀░▀▀█ ║
|
||||
# ║ ░▀▀▀░▀▀▀░▀▀░░▀▀▀░▀░▀ ░▀▀░░▀▀▀░░▀░░▀▀▀ ║
|
||||
# ║ ║
|
||||
# ║ © 2026 CodeX Devs — All Rights Reserved ║
|
||||
# ║ ║
|
||||
# ║ discord ── https://discord.gg/codexdev ║
|
||||
# ║ youtube ── https://youtube.com/@CodeXDevs ║
|
||||
# ║ github ── https://github.com/RayExo ║
|
||||
# ║ ║
|
||||
# ╚══════════════════════════════════════════════════════════════════╝
|
||||
|
||||
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 "<core.Context>"
|
||||
|
||||
@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)
|
||||
Reference in New Issue
Block a user