# ╔══════════════════════════════════════════════════════════════════╗ # ║ ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ |H|e|x|a|H|o|s|t| ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ ║ # ║ © 2026 HexaHost — All Rights Reserved ║ # ║ ║ # ║ discord ── https://discord.gg/hexahost ║ # ║ github ── https://github.com/theoneandonlymace ║ # ║ ║ # ╚══════════════════════════════════════════════════════════════════╝ import discord from discord.ext import commands from discord.ui import Button, View from discord import Member from utils import Paginator, DescriptionEmbedPaginator from datetime import timedelta import asyncio class Global(commands.Cog): def __init__(self, client): self.client = client self.local_frozen_nicks = {} self.client.frozen_nicknames = {} @commands.group(name="global", invoke_without_command=True) @commands.is_owner() async def global_command(self, ctx: commands.Context): if ctx.subcommand_passed is None: await ctx.send_help(ctx.command) ctx.command.reset_cooldown(ctx) @commands.command(name="GB",help="Bans the user from all mutual guilds.") @commands.is_owner() async def global_ban(self, ctx: commands.Context, user: discord.User, reason: str = "Severe violations of Discord's terms of service."): mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Ban {user.display_name} Globally?", description=f"The user is in **{mutual_count}** mutual guilds with the bot.\n\nGlobal Ban Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=view) await ctx.send(f"Processing global ban for {user.name}...") success, failure = [], [] for guild in mutual_guilds: try: await guild.ban(user, reason=reason) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Success", description=f"Banned the user in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) new_view = View() new_view.add_item(success_button) new_view.add_item(failure_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Bans [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Bans [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() success_button.callback = list_success failure_button.callback = list_failure await ctx.send(embed=embed, view=new_view) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) @global_command.command(name="kick", help="Kicks the user from all mutual guilds.") @commands.is_owner() async def global_kick(self, ctx: commands.Context, user: discord.User, reason: str = "Severe violations of Discord's terms of service."): mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Kick {user.display_name} Globally?", description=f"The user is in **{mutual_count}** mutual guilds with the bot.\n\nGlobal Kick Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=view) await ctx.send(f"Processing global kick for {user.name}...") success, failure = [], [] for guild in mutual_guilds: try: await guild.kick(user, reason=reason) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Success", description=f"Kicked the user in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) new_view = View() new_view.add_item(success_button) new_view.add_item(failure_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Kicks [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Kicks [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() success_button.callback = list_success failure_button.callback = list_failure await ctx.send(embed=embed, view=new_view) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) @global_command.command(name="timeout", help="Timeouts the user for 28 days in all mutual guilds.") @commands.is_owner() async def global_timeout(self, ctx: commands.Context, user: discord.User, reason: str = "Severe violations of Discord's terms of service."): mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Timeout {user.display_name} Globally for 28 days?", description=f"The user is in **{mutual_count}** mutual guilds with the bot.\n\nGlobal Timeout Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=view) await ctx.send(f"Processing global timeout for {user.name}...") success, failure = [], [] for guild in mutual_guilds: member = guild.get_member(user.id) time_delta = (timedelta(days=28)) if member: try: await member.edit(timed_out_until=discord.utils.utcnow() + time_delta, reason=reason) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Success", description=f"Timed out the user in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) new_view = View() new_view.add_item(success_button) new_view.add_item(failure_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Timeouts [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Timeouts [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() success_button.callback = list_success failure_button.callback = list_failure await ctx.send(embed=embed, view=new_view) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) @global_command.command(name="nick", help="Changes the nickname of a user in all mutual guilds.") @commands.is_owner() async def global_nick(self, ctx: commands.Context, user: discord.User, *, name: str): if len(name) > 32: return await ctx.send("Nickname cannot exceed 32 characters. Please provide a shorter nickname.") mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Change {user.display_name}'s Nickname Globally?", description=f"The user is in **{mutual_count}** mutual guilds with the bot.\n\nGlobal Nick Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=view) await ctx.send(f"Processing global nickname change for {user.name}...") success, failure = [], [] for guild in mutual_guilds: try: member = guild.get_member(user.id) if member: await member.edit(nick=name) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Success", description=f"Set the nickname for {user.name} in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) new_view = View() new_view.add_item(success_button) new_view.add_item(failure_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Nickname Change [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Nickname Change [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() success_button.callback = list_success failure_button.callback = list_failure await ctx.send(embed=embed, view=new_view) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) @global_command.command(name="clearnick", help="Clears the nickname of a user in all mutual guilds.") @commands.is_owner() async def global_clearnick(self, ctx: commands.Context, user: discord.User): mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Clear {user.display_name}'s Nickname Globally?", description=f"The user is in **{mutual_count}** mutual guilds with the bot.\n\nGlobal Clearnick Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=view) await ctx.send(f"Processing global nickname clear for {user.name}...") success, failure = [], [] for guild in mutual_guilds: try: member = guild.get_member(user.id) if member: await member.edit(nick=None) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Success", description=f"Cleared the nickname for {user.name} in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) new_view = View() new_view.add_item(success_button) new_view.add_item(failure_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Nickname Clear [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Nickname Clear [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() success_button.callback = list_success failure_button.callback = list_failure await ctx.send(embed=embed, view=new_view) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) @global_command.command(name="freezenick", help="Freezes a user's nickname in all mutual guilds.") @commands.is_owner() async def global_freezenick(self, ctx: commands.Context, user: discord.User, *, name: str): if len(name) > 32: return await ctx.send("Nickname cannot exceed 32 characters. Please provide a shorter nickname.") if not hasattr(self.client, "frozen_nicknames"): self.client.frozen_nicknames = {} mutual_guilds = [guild for guild in self.client.guilds if guild.get_member(user.id)] mutual_count = len(mutual_guilds) confirm_embed = discord.Embed( title=f"Are you sure to Freeze {user.display_name}'s Nickname Globally?", description=f"The user is in {mutual_count} mutual guilds with the bot.\n\nGlobal Freezenick Requestor: {ctx.author.mention}", color=0xFF0000 ) yes_button = Button(label="Yes", style=discord.ButtonStyle.green) no_button = Button(label="No", style=discord.ButtonStyle.red) view = View() view.add_item(yes_button) view.add_item(no_button) async def confirm(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) view.clear_items() await interaction.response.edit_message(view=None) self.client.frozen_nicknames[user.id] = { "name": name, "guild_ids": [guild.id for guild in mutual_guilds], } success, failure = [], [] for guild in mutual_guilds: try: member = guild.get_member(user.id) if member: await member.edit(nick=name) success.append(guild.name) except: failure.append(guild.name) embed = discord.Embed( title="Results", description=f"Frozen nickname for {user.name} in {len(success)} of {mutual_count} mutual guilds.", color=0xFF0000 ) embed.add_field(name="Success Count", value=f"{len(success)} Guilds") embed.add_field(name="Failure Count", value=f"{len(failure)} Guilds") success_button = Button(label="List Successful", style=discord.ButtonStyle.green) failure_button = Button(label="List Unsuccessful", style=discord.ButtonStyle.red) stop_button = Button(label="Stop Freezing", style=discord.ButtonStyle.red) result_view = View() result_view.add_item(success_button) result_view.add_item(failure_button) result_view.add_item(stop_button) async def list_success(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(success)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Successful Freezes [{len(success)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def list_failure(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) entries = [f"{i+1}. {name}" for i, name in enumerate(failure)] paginator = Paginator( source=DescriptionEmbedPaginator(entries=entries, description="", title=f"Unsuccessful Freezes [{len(failure)}]", color=0xFF0000, per_page=10), ctx=ctx ) await paginator.paginate() async def stop_freeze(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) self.client.frozen_nicknames.pop(user.id, None) await interaction.response.send_message(f"Nickname freezing stopped for {user.name}.", ephemeral=True) success_button.callback = list_success failure_button.callback = list_failure stop_button.callback = stop_freeze await ctx.send(embed=embed, view=result_view) self.client.loop.create_task(self.nickname_freeze_task(user.id)) async def cancel(interaction): if interaction.user != ctx.author: return await interaction.response.send_message("This interaction is not for you.", ephemeral=True) await interaction.message.delete() await ctx.send("Nickname freezing cancelled.") yes_button.callback = confirm no_button.callback = cancel await ctx.send(embed=confirm_embed, view=view) async def nickname_freeze_task(self, user_id: int): while user_id in self.client.frozen_nicknames: user_data = self.client.frozen_nicknames[user_id] frozen_name = user_data["name"] guild_ids = user_data["guild_ids"] for guild_id in guild_ids: guild = self.client.get_guild(guild_id) if not guild: continue member = guild.get_member(user_id) if member and member.nick != frozen_name: try: await member.edit(nick=frozen_name) except: pass await asyncio.sleep(10) @global_command.command(name="unfreezenick", help="Unfreezes a user's nickname in all mutual guilds.") @commands.is_owner() async def global_unfreezenick(self, ctx: commands.Context, user: discord.User): if not hasattr(self.client, "frozen_nicknames"): self.client.frozen_nicknames = {} if user.id not in self.client.frozen_nicknames: return await ctx.send(f"❌ | {user.name}'s nickname is not being frozen.") del self.client.frozen_nicknames[user.id] await ctx.send(f"✅ | Nickname freezing stopped for {user.name}.") @commands.command(name="freezenick", help="Freezes a member's nickname in the current server.") @commands.has_permissions(manage_nicknames=True) async def freeze_nickname(self, ctx: commands.Context, member: Member, *, nickname: str): guild_id = ctx.guild.id if guild_id not in self.local_frozen_nicks: self.local_frozen_nicks[guild_id] = {} if member.id in self.local_frozen_nicks[guild_id]: return await ctx.send(f"{member.mention}'s nickname is already being frozen.") try: await member.edit(nick=nickname) self.local_frozen_nicks[guild_id][member.id] = nickname await ctx.send(f"Freezing {member.mention}'s nickname as '{nickname}'.") except: return await ctx.send(f"Could not change {member.mention}'s nickname due to insufficient permissions.") async def monitor_nickname(): while member.id in self.local_frozen_nicks.get(guild_id, {}): if member.nick != nickname: try: await member.edit(nick=nickname) except: self.local_frozen_nicks[guild_id].pop(member.id, None) await ctx.send(f"Stopped monitoring {member.mention}'s nickname due to insufficient permissions.") break await asyncio.sleep(10) if not self.local_frozen_nicks[guild_id]: del self.local_frozen_nicks[guild_id] self.client.loop.create_task(monitor_nickname()) @commands.command(name="unfreezenick", help="Unfreezes a member's nickname in the current server.") @commands.has_permissions(manage_nicknames=True) async def unfreeze_nickname(self, ctx: commands.Context, member: Member): guild_id = ctx.guild.id if guild_id in self.local_frozen_nicks and member.id in self.local_frozen_nicks[guild_id]: self.local_frozen_nicks[guild_id].pop(member.id, None) if not self.local_frozen_nicks[guild_id]: del self.local_frozen_nicks[guild_id] await ctx.send(f"✅ | Stopped freezing {member.mention}'s nickname.") else: await ctx.send(f"❌ | {member.mention}'s nickname is not currently being frozen.")