📋 Получение информации о Других Модулях
Вашему модулю может понадобиться взаимодействовать с другими модулями, загруженными ботом, или получать информацию о них. Для этого в ModuleLoader
, доступном через self.loader
(если дано разрешение use_loader
), предусмотрены методы.
Получение информации о загруженных модулях (свойство loaded_modules
)
Класс BaseModule предоставляет удобное свойство loaded_modules, которое является сокращением для self.loader.get_modules_info().
self.loaded_modules
: Возвращает словарь, в котором ключами являются имена внутренних каталогов текущих загруженных модулей, а значениями - соответствующие им объектыModuleInfo
(base.module.ModuleInfo
).
Пример использования:
# Внутри метода BaseModule или ModuleExtension
def list_loaded_modules(self):
"""Логгирует имена и версии всех загруженных в данный момент модулей."""
if not self.loader: # Проверьте, есть ли доступ для погрузчика
self.logger.error("Невозможно составить список модулей: Доступ к загрузчику не предоставлен.")
return
loaded: dict[str, ModuleInfo] = self.loaded_modules # Используйте свойство
if not loaded:
self.logger.info("В настоящее время другие модули не загружены.")
return
self.logger.info("Текущие загруженные модули:")
for internal_name, info in loaded.items():
# info is a ModuleInfo dataclass instance
self.logger.info(
f"- {info.name} (v{info.version}) "
f"[Внутренний: {internal_name}, Автор: {info.author}]"
)
async def check_for_core_module(self, message: Message):
"""Проверяет, загружен ли модуль с именем 'Core'."""
if not self.loader:
await message.reply("Ошибка: Требуется доступ к загрузчику.")
return
core_loaded = False
for info in self.loaded_modules.values():
if info.name.lower() == "core":
core_loaded = True
break
if core_loaded:
await message.reply("В настоящее время загружен модуль Core.")
else:
await message.reply("Модуль Core не загружен.")
Другие информационные методы (через self.loader
)
get_all_modules_info() -> dict[str, ModuleInfo]
: Аналогичнаloaded_modules
, но включает информацию для всех модулей, найденных в каталоге modules/, даже тех, которые не удалось загрузить или у которых auto_load: false. Полезно для пользовательских интерфейсов управления.get_module(name: str) -> Optional[BaseModule]
: Получает реальный запущенный экземпляр другого загруженного модуля по имени его внутренней директории. Используйте с осторожностью, так как прямой вызов методов других модулей может создать тесную связь.get_module_info(name: str) -> Optional[ModuleInfo]
: ПолучениеModuleInfo
для конкретного модуля (по внутреннему имени), независимо от того, загружен он или нет.get_module_help(name: str) -> Optional[Union[HelpPage, str]]
: Получение страницы/строкисправки
для конкретного загруженного модуля.get_module_perms(name: str) -> list[Permissions]
: Получение объявленных разрешений для конкретного загруженного модуля.get_int_name(name: str) -> Optional[str]
: Преобразование удобного для пользователя имени (изinfo.name
) обратно во внутреннее имя каталога.
Использование этих методов позволяет модулям быть осведомленными о своем окружении и потенциально адаптировать свое поведение в зависимости от того, какие другие модули активны. Не забудьте сначала запросить разрешение use_loader
.