""" This plugin provides a command to list all loaded plugins along with their descriptions. """ # plugins/plugins.py import os import sys import logging import simplematrixbotlib as botlib async def handle_command(room, message, bot, prefix, config): """ Function to handle the !plugins command. Args: room (Room): The Matrix room where the command was invoked. message (RoomMessage): The message object containing the command. Returns: None """ match = botlib.MessageMatch(room, message, bot, prefix) if match.is_not_from_this_bot() and match.prefix() and match.command("plugins"): logging.info("Received !plugins command") plugin_descriptions = get_plugin_descriptions() # Prepend custom string before the output plugin_descriptions.insert(0, "
🔌Plugins List🔌
⤵︎Click Here to Expand⤵︎
") plugins_message = "
".join(plugin_descriptions) plugins_message += "
" await bot.api.send_markdown_message(room.room_id, plugins_message) logging.info("Sent plugin list to the room") def get_plugin_descriptions(): """ Function to get descriptions of all loaded plugin modules. Returns: list: A list of plugin descriptions sorted alphabetically. """ plugin_descriptions = [] for module_name, module in sys.modules.items(): if module_name.startswith("plugins.") and hasattr(module, "__file__"): plugin_path = module.__file__ plugin_name = os.path.basename(plugin_path).split(".")[0] try: description = module.__doc__.strip().split("\n")[0] except AttributeError: description = "No description available" plugin_descriptions.append(f"[{plugin_name}.py]: {description}") # Sort the plugin descriptions alphabetically by plugin name plugin_descriptions.sort() return plugin_descriptions