.cs-файлы из каталогов module/ и mods/ компилируются в памяти и подключаются как полноценные сборки ASP.NET Core. Готовые .dll из references/ подключаются напрямую без компиляции.
Порядок загрузки
1
mods/ — пользовательские модули
Сначала обрабатывается каталог
mods/. Здесь размещаются сторонние модули, добавленные вручную.2
module/ — встроенные модули
Затем обрабатывается
module/ со встроенными модулями, скопированными из репозитория при сборке.3
references/ — готовые DLL
Из подкаталогов
references/ подгружаются готовые .dll как части MVC-приложения без компиляции.4
manifest.json — Roslyn-компиляция
Папки с
manifest.json на любой вложенности при необходимости компилируются Roslyn. Фильтрация по SkipModules, LoadModules и флагу enable в манифесте.5
IModuleConfigure.Configure
После компиляции для каждого модуля вызывается
Configure — регистрация контроллеров, сервисов и middleware в DI.6
IModuleLoaded.Loaded
После старта приложения вызывается
Loaded — инициализация фоновых задач, подписка на события.7
dynamic: true — горячая пересборка
Модули с
"dynamic": true в манифесте автоматически пересобираются при изменении .cs-файлов (WatchersDynamicModule).Как фильтры применяются вместе
Состояние модулей
Не существует одного универсального «состояния по умолчанию».
config/base.conf, starter-файл config/example.init.conf и manifest.json применяются вместе.Разрешены base-конфигурацией
Исключены config/base.conf
Дополнительно исключены starter-конфигурацией
config/example.init.conf добавляет к исключениям:
Выключены через manifest.json
Среди модулей с"enable": false: AdminPanel, DatabaseEditor, ExternalBind, Music, Telemetry, Tg-notify.bot, Tracks, Transcoding, WatchTogether, TelegramAuth, TelegramAuthBot и LogUserRequest-Lite.
Полный актуальный каталог: модули Lampac.
manifest.json
Каждый Roslyn-модуль содержитmanifest.json в своей папке:
LoadModules и SkipModules
Оба параметра принимают одинаковые паттерны:LoadModules применяется после SkipModules. Если модуль указан в SkipModules и одновременно подпадает под LoadModules — он не загружается.Соглашения для пользовательских модулей
Подробный гайд по написанию собственных модулей — в разделе Кастомные модули. Минимальные требования:- Публичный класс
ModInitс реализациейIModuleLoaded manifest.jsonс"enable": trueв папке модуля- Конфиг через
ModuleInvoke.Init("ИмяМодуля", …)+ подписка наEventListener.UpdateInitFile - Контроллеры Online/SISI наследуют от
BaseOnlineController/BaseSisiController

