# ╔══════════════════════════════════════════════════════════════════╗ # ║ ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ |H|e|x|a|H|o|s|t| ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ ║ # ║ © 2026 HexaHost — All Rights Reserved ║ # ║ ║ # ║ discord ── https://discord.gg/hexahost ║ # ║ github ── https://github.com/theoneandonlymace ║ # ║ ║ # ╚══════════════════════════════════════════════════════════════════╝ from utils.db_paths import db_path import discord from utils.emoji import CROSS, TICK from discord.ext import commands import aiosqlite from utils import Paginator, DescriptionEmbedPaginator from discord.ui import LayoutView, TextDisplay, Separator, Container from utils.cv2 import CV2, build_container class CV2(LayoutView): def __init__(self, title, *sections): super().__init__(timeout=None) items = [TextDisplay(f"**{title}**")] for s in sections: if s: items.append(Separator(visible=True)) items.append(TextDisplay(str(s))) self.add_item(build_container(*items)) class Block(commands.Cog): def __init__(self, bot): self.bot = bot self.bot.loop.create_task(self.set_db()) #@commands.Cog.listener() async def set_db(self): async with aiosqlite.connect(db_path('block.db')) as db: await db.execute(''' CREATE TABLE IF NOT EXISTS user_blacklist ( user_id INTEGER PRIMARY KEY, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') await db.execute(''' CREATE TABLE IF NOT EXISTS guild_blacklist ( guild_id INTEGER PRIMARY KEY, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') await db.commit() @commands.hybrid_group(name="blacklist", aliases=["bl"], invoke_without_command=True) @commands.is_owner() async def blacklist(self, ctx): if ctx.subcommand_passed is None: ctx.command.reset_cooldown(ctx) await ctx.send_help(ctx.command) @blacklist.group(name="user", help="Add/Remove a user to the blacklist.", invoke_without_command=True) @commands.is_owner() async def user(self, ctx): if ctx.subcommand_passed is None: ctx.command.reset_cooldown(ctx) await ctx.send_help(ctx.command) @user.command(name="add", help="Adds a user to the blacklist.") @commands.is_owner() async def add_user(self, ctx, user: discord.User): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT user_id FROM user_blacklist WHERE user_id = ?', (user.id,)) if await cursor.fetchone(): await ctx.reply(view=CV2("User Already Blacklisted", f"{user.mention} is already blacklisted.")) else: await db.execute('INSERT INTO user_blacklist (user_id) VALUES (?)', (user.id,)) await db.commit() await ctx.reply(view=CV2(f"{TICK} User Blacklisted", f"{user.mention} has been added to the blacklist.")) @user.command(name="remove", help="Remove a user from the blacklist.") @commands.is_owner() async def remove_user(self, ctx, user: discord.User): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT user_id FROM user_blacklist WHERE user_id = ?', (user.id,)) if not await cursor.fetchone(): await ctx.reply(view=CV2(f"{CROSS} User Not Blacklisted", f"{user.mention} is not in the blacklist.")) else: await db.execute('DELETE FROM user_blacklist WHERE user_id = ?', (user.id,)) await db.commit() await ctx.reply(view=CV2(f"{TICK} User Unblacklisted", f"{user.mention} has been removed from the blacklist.")) @user.command(name="show", aliases=["list"], help="Shows all Blacklisted users.") @commands.is_owner() async def show_users(self, ctx): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT user_id FROM user_blacklist') rows = await cursor.fetchall() if not rows: await ctx.reply(view=CV2(f"{CROSS} No Blacklisted Users", "There are no users in the blacklist.")) return blacklist = [] for row in rows: user_id = row[0] try: user = await self.bot.fetch_user(user_id) username = user.name user_link = f"https://discord.com/users/{user_id}" #indexx = [""for index, user in enumerate(blacklist)] blacklist.append(f"**[{username}]({user_link})** - ({user_id})") except discord.NotFound: blacklist.append(f"User ID: {user_id} (User not found)") entries = [f"{index+1}. {user}" for index, user in enumerate(blacklist)] paginator = Paginator(source=DescriptionEmbedPaginator( entries=entries, title=f"List of Blacklisted Users - {len(blacklist)}", description="", per_page=10, color=0xFF0000), ctx=ctx ) await paginator.paginate() @blacklist.group(name="guild", help="Add/Remove a guild to the blacklist.", invoke_without_command=True) @commands.is_owner() async def guild(self, ctx): if ctx.subcommand_passed is None: await ctx.send_help(ctx.command) ctx.command.reset_cooldown(ctx) @guild.command(name="add", help="Adds a guild to the blacklist.") @commands.is_owner() async def add_guild(self, ctx, guild_id: int): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT guild_id FROM guild_blacklist WHERE guild_id = ?', (guild_id,)) if await cursor.fetchone(): await ctx.reply(view=CV2(f"{CROSS} Guild Already Blacklisted", f"Guild with ID `{guild_id}` is already blacklisted.")) else: await db.execute('INSERT INTO guild_blacklist (guild_id) VALUES (?)', (guild_id,)) await db.commit() await ctx.reply(view=CV2(f"{TICK} Guild Blacklisted", f"Guild with ID `{guild_id}` has been added to the blacklist.")) @guild.command(name="remove", help="Remove a guild from the blacklist.") @commands.is_owner() async def remove_guild(self, ctx, guild_id: int): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT guild_id FROM guild_blacklist WHERE guild_id = ?', (guild_id,)) if not await cursor.fetchone(): await ctx.reply(view=CV2(f"{CROSS} Guild Not Blacklisted", f"Guild with ID `{guild_id}` is not in the blacklist.")) else: await db.execute('DELETE FROM guild_blacklist WHERE guild_id = ?', (guild_id,)) await db.commit() await ctx.reply(view=CV2(f"{TICK} Guild Unblacklisted", f"Guild with ID `{guild_id}` has been removed from the blacklist.")) @guild.command(name="show", aliases=["list"], help="Shows the list of blacklisted guilds") @commands.is_owner() async def show_guilds(self, ctx): async with aiosqlite.connect(db_path('block.db')) as db: cursor = await db.execute('SELECT guild_id FROM guild_blacklist') rows = await cursor.fetchall() if not rows: await ctx.reply(view=CV2(f"{CROSS} No Blacklisted Guilds", "There are no guilds in the blacklist.")) return blacklist = [] for row in rows: guild_id = row[0] try: guild = await self.bot.fetch_guild(guild_id) guild_name = guild.name guild_link = f"https://discord.com/guilds/{guild_id}" blacklist.append(f"[{guild_name}]({guild_link}) - ({guild_id})") except discord.NotFound: blacklist.append(f"Guild ID: {guild_id} (Guild not found)") entries = [f"{index+1}. {guild}" for index, guild in enumerate(blacklist)] paginator = Paginator(source=DescriptionEmbedPaginator( entries=entries, title=f"List of Blacklisted Guilds - {len(blacklist)}", description="", per_page=10, color=0xFF0000), ctx=ctx ) await paginator.paginate()