mirror of
https://github.com/maubot/maubot
synced 2025-08-30 14:30:38 +00:00
Start working on management API implementation
This commit is contained in:
parent
aefdcd9447
commit
f2449e2eba
14 changed files with 379 additions and 54 deletions
|
@ -14,20 +14,23 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
from sqlalchemy import orm
|
||||
from time import time
|
||||
import sqlalchemy as sql
|
||||
import logging.config
|
||||
import argparse
|
||||
import asyncio
|
||||
import signal
|
||||
import copy
|
||||
import sys
|
||||
import signal
|
||||
import os
|
||||
|
||||
from .config import Config
|
||||
from .db import Base, init as init_db
|
||||
from .server import MaubotServer
|
||||
from .client import Client, init as init_client
|
||||
from .loader import ZippedPluginLoader
|
||||
from .plugin import PluginInstance, init as init_plugin_instance_class
|
||||
from .loader import ZippedPluginLoader, MaubotZipImportError, IDConflictError
|
||||
from .instance import PluginInstance, init as init_plugin_instance_class
|
||||
from .management.api import init as init_management
|
||||
from .__meta__ import __version__
|
||||
|
||||
parser = argparse.ArgumentParser(description="A plugin-based Matrix bot system.",
|
||||
|
@ -57,9 +60,36 @@ loop = asyncio.get_event_loop()
|
|||
|
||||
init_db(db_session)
|
||||
init_client(loop)
|
||||
init_plugin_instance_class(config)
|
||||
server = MaubotServer(config, loop)
|
||||
ZippedPluginLoader.load_all(*config["plugin_directories"])
|
||||
init_plugin_instance_class(db_session, config)
|
||||
management_api = init_management(config, loop)
|
||||
server = MaubotServer(config, management_api, loop)
|
||||
|
||||
trash_path = config["plugin_directories.trash"]
|
||||
|
||||
|
||||
def trash(file_path: str, new_name: Optional[str] = None) -> None:
|
||||
if trash_path == "delete":
|
||||
os.remove(file_path)
|
||||
else:
|
||||
new_name = new_name or f"{int(time())}-{os.path.basename(file_path)}"
|
||||
os.rename(file_path, os.path.abspath(os.path.join(trash_path, new_name)))
|
||||
|
||||
|
||||
ZippedPluginLoader.log.debug("Preloading plugins...")
|
||||
for directory in config["plugin_directories.load"]:
|
||||
for file in os.listdir(directory):
|
||||
if not file.endswith(".mbp"):
|
||||
continue
|
||||
path = os.path.abspath(os.path.join(directory, file))
|
||||
try:
|
||||
ZippedPluginLoader.get(path)
|
||||
except MaubotZipImportError:
|
||||
ZippedPluginLoader.log.exception(f"Failed to load plugin at {path}, trashing...")
|
||||
trash(path)
|
||||
except IDConflictError:
|
||||
ZippedPluginLoader.log.warn(f"Duplicate plugin ID at {path}, trashing...")
|
||||
trash(path)
|
||||
|
||||
plugins = PluginInstance.all()
|
||||
|
||||
for plugin in plugins:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue