192 lines
8.5 KiB
Python
192 lines
8.5 KiB
Python
# ╔══════════════════════════════════════════════════════════════════╗
|
|
# ║ ║
|
|
# ║ +-+-+-+-+-+-+-+-+ ║
|
|
# ║ |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.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()
|
|
|
|
|
|
|