2024-02-14 09:56:11 +00:00
|
|
|
|
"""
|
|
|
|
|
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
|
2024-03-01 03:18:58 +00:00
|
|
|
|
plugin_descriptions.insert(0, "<details><summary><strong>🔌Plugins List🔌<br>⤵︎Click Here to Expand⤵︎</strong></summary>")
|
2024-02-14 09:56:11 +00:00
|
|
|
|
|
2024-03-01 03:18:58 +00:00
|
|
|
|
plugins_message = "<br>".join(plugin_descriptions)
|
2024-02-14 09:56:11 +00:00
|
|
|
|
plugins_message += "</details>"
|
|
|
|
|
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"<strong>[{plugin_name}.py]:</strong> {description}")
|
|
|
|
|
|
|
|
|
|
# Sort the plugin descriptions alphabetically by plugin name
|
|
|
|
|
plugin_descriptions.sort()
|
|
|
|
|
|
|
|
|
|
return plugin_descriptions
|