diff --git a/bot.py b/bot.py index 3e2f862..733e11c 100644 --- a/bot.py +++ b/bot.py @@ -64,6 +64,25 @@ def setup_logging(): return logger +class MaintenanceAwareTree(discord.app_commands.CommandTree): + """CommandTree subclass that blocks non-admin users when maintenance mode is active.""" + + async def interaction_check(self, interaction: discord.Interaction) -> bool: + bot = interaction.client + if not getattr(bot, "maintenance_mode", False): + return True + if ( + isinstance(interaction.user, discord.Member) + and interaction.user.guild_permissions.administrator + ): + return True + await interaction.response.send_message( + "🔧 The bot is currently in maintenance mode. Please try again later.", + ephemeral=True, + ) + return False + + class SBABot(commands.Bot): """Custom bot class for SBA league management.""" @@ -77,6 +96,7 @@ class SBABot(commands.Bot): command_prefix="!", # Legacy prefix, primarily using slash commands intents=intents, description="Major Domo v2.0", + tree_cls=MaintenanceAwareTree, ) self.logger = logging.getLogger("discord_bot_v2") @@ -86,22 +106,6 @@ class SBABot(commands.Bot): """Called when the bot is starting up.""" self.logger.info("Setting up bot...") - @self.tree.interaction_check - async def maintenance_check(interaction: discord.Interaction) -> bool: - """Block non-admin users when maintenance mode is enabled.""" - if not self.maintenance_mode: - return True - if ( - isinstance(interaction.user, discord.Member) - and interaction.user.guild_permissions.administrator - ): - return True - await interaction.response.send_message( - "🔧 The bot is currently in maintenance mode. Please try again later.", - ephemeral=True, - ) - return False - # Load command packages await self._load_command_packages()