2024-12-10 19:49:11 +08:00
|
|
|
import asyncio
|
2024-08-27 23:30:14 +08:00
|
|
|
import os
|
2024-08-26 11:38:19 +08:00
|
|
|
import re
|
2024-08-26 23:54:07 +08:00
|
|
|
|
2024-08-26 11:38:19 +08:00
|
|
|
import nonebot
|
|
|
|
|
from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter
|
2024-12-10 19:49:11 +08:00
|
|
|
from nonebot.log import logger
|
2024-08-26 11:38:19 +08:00
|
|
|
|
|
|
|
|
nonebot.init()
|
|
|
|
|
|
2024-12-10 19:49:11 +08:00
|
|
|
from zhenxun.services.db_context import disconnect, init
|
2024-08-26 11:38:19 +08:00
|
|
|
|
|
|
|
|
driver = nonebot.get_driver()
|
2024-08-27 23:30:14 +08:00
|
|
|
|
2024-08-26 11:38:19 +08:00
|
|
|
driver.register_adapter(OneBotV11Adapter)
|
2024-08-27 23:30:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
driver.on_startup(init)
|
|
|
|
|
driver.on_shutdown(disconnect)
|
|
|
|
|
|
2024-08-26 11:38:19 +08:00
|
|
|
|
|
|
|
|
# nonebot.load_builtin_plugins("echo")
|
|
|
|
|
nonebot.load_plugins("zhenxun/builtin_plugins")
|
|
|
|
|
nonebot.load_plugins("zhenxun/plugins")
|
|
|
|
|
|
2026-04-18 23:42:10 +08:00
|
|
|
|
|
|
|
|
def _normalize_plugin_name(name: str) -> str:
|
|
|
|
|
return name.replace(":", ".")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _collect_loaded_plugin_names() -> set[str]:
|
|
|
|
|
loaded_names: set[str] = set()
|
|
|
|
|
for plugin in nonebot.get_loaded_plugins():
|
|
|
|
|
loaded_names.add(_normalize_plugin_name(plugin.name))
|
|
|
|
|
loaded_names.add(
|
|
|
|
|
_normalize_plugin_name(
|
|
|
|
|
re.sub(
|
|
|
|
|
r"^zhenxun\.(plugins|builtin_plugins)\.",
|
|
|
|
|
"",
|
|
|
|
|
plugin.module_name,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
return loaded_names
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
all_plugins = [
|
|
|
|
|
_normalize_plugin_name(name) for name in nonebot.get_available_plugin_names()
|
|
|
|
|
]
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"所有插件:{all_plugins}")
|
2026-04-18 23:42:10 +08:00
|
|
|
loaded_plugins = _collect_loaded_plugin_names()
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"已加载插件:{loaded_plugins}")
|
2024-08-26 11:38:19 +08:00
|
|
|
|
|
|
|
|
for plugin in all_plugins.copy():
|
2024-08-26 23:54:07 +08:00
|
|
|
if plugin.startswith(("platform",)):
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"平台插件:{plugin}")
|
2026-04-18 23:42:10 +08:00
|
|
|
elif plugin in loaded_plugins:
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"已加载插件:{plugin}")
|
2024-08-26 11:38:19 +08:00
|
|
|
else:
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"未加载插件:{plugin}")
|
2024-08-26 11:38:19 +08:00
|
|
|
continue
|
|
|
|
|
all_plugins.remove(plugin)
|
|
|
|
|
|
|
|
|
|
if all_plugins:
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info(f"出现未加载的插件:{all_plugins}")
|
2024-08-26 11:38:19 +08:00
|
|
|
exit(1)
|
|
|
|
|
else:
|
2024-08-27 23:30:14 +08:00
|
|
|
logger.info("所有插件均已加载")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@driver.on_startup
|
|
|
|
|
async def _():
|
|
|
|
|
task = asyncio.create_task(asyncio.sleep(1))
|
|
|
|
|
task.add_done_callback(lambda _: driver._lifespan.on_ready(os._exit(0)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nonebot.run()
|