"""
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