import discord from discord.ext import bridge # from cogs.birthday import BirthdayCog # from cogs.productivity import ProductivityCog from cogs.cs import CSCog from cogs.insult import InsultsCog from cogs.roulette import RouletteCog from setup.logger import LOGGER bot_intents = discord.Intents.default() bot_intents.message_content = True bot_intents.members = True bot_intents.presences = True bot_intents.guilds = True bot_intents.reactions = True bot = bridge.Bot(command_prefix='$', intents=bot_intents) COG_REGISTRY = { 'cs': CSCog, 'insult': InsultsCog, 'roulette': RouletteCog } def _normalize_cog_names(cogs=None): if cogs is None: return list(COG_REGISTRY.keys()) if isinstance(cogs, str): cogs = [cogs] selected_cogs = [] for cog_name in cogs: name = str(cog_name).strip().lower() if not name: continue if name in {'all', '*'}: return list(COG_REGISTRY.keys()) if name in COG_REGISTRY: selected_cogs.append(name) else: LOGGER.warning("Unknown cog '%s'. Available cogs: %s", cog_name, ', '.join(COG_REGISTRY.keys())) return list(dict.fromkeys(selected_cogs)) def register_cogs(cogs=None): selected_cogs = _normalize_cog_names(cogs) existing_cog_names = set(COG_REGISTRY.values()) for existing_name in list(bot.cogs.keys()): if existing_name in {cog_class.__name__ for cog_class in existing_cog_names}: bot.remove_cog(existing_name) for cog_name in selected_cogs: cog_class = COG_REGISTRY[cog_name] bot.add_cog(cog_class(bot)) return selected_cogs def reload_feature(feature: str): normalized_feature = str(feature).strip().lower() LOGGER.debug(bot.cogs) if normalized_feature in {'all', '*'}: register_cogs() LOGGER.debug('All cogs reloaded!') return if normalized_feature not in COG_REGISTRY: LOGGER.warning("Unknown cog '%s'. Available cogs: %s", feature, ', '.join(COG_REGISTRY.keys())) return LOGGER.debug(f'Reloading {feature}...') target_cog_name = COG_REGISTRY[normalized_feature].__name__ for existing_name in list(bot.cogs.keys()): if existing_name == target_cog_name: bot.remove_cog(existing_name) break bot.add_cog(COG_REGISTRY[normalized_feature](bot)) LOGGER.debug(f'{feature} reloaded!')