forked from bot/app
feat: 插件启用停用检测
This commit is contained in:
parent
58e603e1ad
commit
ac234544a3
@ -19,7 +19,7 @@ init_log()
|
|||||||
installed_plugins: list[InstalledPlugin] = plugin_db.all(InstalledPlugin())
|
installed_plugins: list[InstalledPlugin] = plugin_db.all(InstalledPlugin())
|
||||||
if installed_plugins:
|
if installed_plugins:
|
||||||
for installed_plugin in installed_plugins:
|
for installed_plugin in installed_plugins:
|
||||||
if not installed_plugin.liteyuki and not check_for_package(installed_plugin.module_name):
|
if not check_for_package(installed_plugin.module_name):
|
||||||
nonebot.logger.error(f"{installed_plugin.module_name} not installed, but in loading database. please run `npm fixup` in chat to reinstall it.")
|
nonebot.logger.error(f"{installed_plugin.module_name} not installed, but in loading database. please run `npm fixup` in chat to reinstall it.")
|
||||||
else:
|
else:
|
||||||
nonebot.load_plugin(installed_plugin.module_name)
|
nonebot.load_plugin(installed_plugin.module_name)
|
||||||
|
@ -5,7 +5,7 @@ import aiofiles
|
|||||||
import nonebot.plugin
|
import nonebot.plugin
|
||||||
|
|
||||||
from liteyuki.utils.data import Database, LiteModel
|
from liteyuki.utils.data import Database, LiteModel
|
||||||
from liteyuki.utils.data_manager import Group, InstalledPlugin, User, group_db, plugin_db, user_db
|
from liteyuki.utils.data_manager import GlobalPlugin, Group, InstalledPlugin, User, group_db, plugin_db, user_db
|
||||||
from liteyuki.utils.ly_typing import T_MessageEvent
|
from liteyuki.utils.ly_typing import T_MessageEvent
|
||||||
|
|
||||||
LNPM_COMMAND_START = "lnpm"
|
LNPM_COMMAND_START = "lnpm"
|
||||||
@ -90,11 +90,12 @@ def get_plugin_session_enable(event: T_MessageEvent, plugin_module_name: str) ->
|
|||||||
|
|
||||||
|
|
||||||
def get_plugin_global_enable(plugin_module_name: str) -> bool:
|
def get_plugin_global_enable(plugin_module_name: str) -> bool:
|
||||||
|
loaded_plugin = nonebot.plugin.get_plugin_by_module_name(plugin_module_name)
|
||||||
return plugin_db.first(
|
return plugin_db.first(
|
||||||
InstalledPlugin(),
|
GlobalPlugin(),
|
||||||
"module_name = ?",
|
"module_name = ?",
|
||||||
plugin_module_name,
|
plugin_module_name,
|
||||||
default=InstalledPlugin(module_name=plugin_module_name, enabled=True)).enabled
|
default=GlobalPlugin(module_name=plugin_module_name, enabled=True)).enabled
|
||||||
|
|
||||||
|
|
||||||
def get_plugin_can_be_toggle(plugin_module_name: str) -> bool:
|
def get_plugin_can_be_toggle(plugin_module_name: str) -> bool:
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import nonebot.plugin
|
import nonebot.plugin
|
||||||
from nonebot import on_command, require
|
from nonebot import require
|
||||||
from nonebot.exception import FinishedException
|
from nonebot.exception import FinishedException, IgnoredException
|
||||||
|
from nonebot.internal.adapter import Event
|
||||||
from nonebot.internal.matcher import Matcher
|
from nonebot.internal.matcher import Matcher
|
||||||
|
from nonebot.adapters import Bot
|
||||||
from nonebot.message import run_preprocessor
|
from nonebot.message import run_preprocessor
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
|
from nonebot.plugin import Plugin
|
||||||
|
|
||||||
from liteyuki.utils.data_manager import Group, InstalledPlugin, User, group_db, plugin_db, user_db
|
from liteyuki.utils.data_manager import GlobalPlugin, Group, InstalledPlugin, User, group_db, plugin_db, user_db
|
||||||
|
from liteyuki.utils.language import get_user_lang
|
||||||
|
from liteyuki.utils.ly_typing import T_Bot, T_MessageEvent
|
||||||
from liteyuki.utils.message import Markdown as md, send_markdown
|
from liteyuki.utils.message import Markdown as md, send_markdown
|
||||||
from liteyuki.utils.permission import GROUP_ADMIN, GROUP_OWNER
|
from liteyuki.utils.permission import GROUP_ADMIN, GROUP_OWNER
|
||||||
from liteyuki.utils.ly_typing import T_Bot, T_MessageEvent
|
from .common import get_plugin_can_be_toggle, get_plugin_default_enable, get_plugin_global_enable, get_plugin_session_enable
|
||||||
from liteyuki.utils.language import get_user_lang
|
|
||||||
from .common import get_plugin_can_be_toggle, get_plugin_global_enable, get_plugin_session_enable, get_plugin_default_enable
|
|
||||||
from .installer import get_store_plugin, npm_update
|
from .installer import get_store_plugin, npm_update
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
@ -197,7 +200,7 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
|
|||||||
ulang.get("npm.plugin_already", NAME=plugin_module_name, STATUS=ulang.get("npm.enable") if toggle else ulang.get("npm.disable")))
|
ulang.get("npm.plugin_already", NAME=plugin_module_name, STATUS=ulang.get("npm.enable") if toggle else ulang.get("npm.disable")))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
plugin = plugin_db.first(InstalledPlugin(), "module_name = ?", plugin_module_name, default=InstalledPlugin(module_name=plugin_module_name))
|
plugin = plugin_db.first(GlobalPlugin(), "module_name = ?", plugin_module_name, default=GlobalPlugin(module_name=plugin_module_name))
|
||||||
if toggle:
|
if toggle:
|
||||||
plugin.enabled = True
|
plugin.enabled = True
|
||||||
else:
|
else:
|
||||||
@ -220,8 +223,20 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
|
|||||||
STATUS=ulang.get("npm.enable") if toggle else ulang.get("npm.disable"))
|
STATUS=ulang.get("npm.enable") if toggle else ulang.get("npm.disable"))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@run_preprocessor
|
@run_preprocessor
|
||||||
async def _(event: T_MessageEvent, matcher: Matcher):
|
async def pre_handle(event: Event, matcher: Matcher):
|
||||||
plugin = matcher.plugin
|
plugin: Plugin = matcher.plugin
|
||||||
|
plugin_global_enable = get_plugin_global_enable(plugin.module_name)
|
||||||
|
if not plugin_global_enable:
|
||||||
|
raise IgnoredException("Plugin disabled globally")
|
||||||
|
if event.get_type() == "message":
|
||||||
|
plugin_session_enable = get_plugin_session_enable(event, plugin.module_name)
|
||||||
|
if not plugin_session_enable:
|
||||||
|
raise IgnoredException("Plugin disabled in session")
|
||||||
|
|
||||||
|
|
||||||
|
@Bot.on_calling_api
|
||||||
|
async def _(bot: Bot, api: str, data: dict[str, any]):
|
||||||
# TODO 插件启用/停用检查hook
|
# TODO 插件启用/停用检查hook
|
||||||
nonebot.logger.info(f"Plugin Callapi: {plugin.module_name}")
|
nonebot.logger.info(f"Plugin Callapi: {api}: {data}")
|
||||||
|
@ -31,8 +31,6 @@ class Group(LiteModel):
|
|||||||
|
|
||||||
|
|
||||||
class InstalledPlugin(LiteModel):
|
class InstalledPlugin(LiteModel):
|
||||||
liteyuki: bool = Field(True, alias="liteyuki") # 是否为LiteYuki插件
|
|
||||||
enabled: bool = Field(True, alias="enabled") # 全局启用
|
|
||||||
TABLE_NAME = "installed_plugin"
|
TABLE_NAME = "installed_plugin"
|
||||||
module_name: str = Field(str(), alias="module_name")
|
module_name: str = Field(str(), alias="module_name")
|
||||||
version: str = Field(str(), alias="version")
|
version: str = Field(str(), alias="version")
|
||||||
@ -40,6 +38,7 @@ class InstalledPlugin(LiteModel):
|
|||||||
|
|
||||||
class GlobalPlugin(LiteModel):
|
class GlobalPlugin(LiteModel):
|
||||||
TABLE_NAME = "global_plugin"
|
TABLE_NAME = "global_plugin"
|
||||||
|
liteyuki: bool = Field(True, alias="liteyuki") # 是否为LiteYuki插件
|
||||||
module_name: str = Field(str(), alias="module_name")
|
module_name: str = Field(str(), alias="module_name")
|
||||||
enabled: bool = Field(True, alias="enabled")
|
enabled: bool = Field(True, alias="enabled")
|
||||||
|
|
||||||
@ -48,5 +47,5 @@ def auto_migrate():
|
|||||||
print("Migrating databases...")
|
print("Migrating databases...")
|
||||||
user_db.auto_migrate(User())
|
user_db.auto_migrate(User())
|
||||||
group_db.auto_migrate(Group())
|
group_db.auto_migrate(Group())
|
||||||
plugin_db.auto_migrate(InstalledPlugin())
|
plugin_db.auto_migrate(InstalledPlugin(), GlobalPlugin())
|
||||||
common_db.auto_migrate(GlobalPlugin())
|
common_db.auto_migrate(GlobalPlugin())
|
||||||
|
Loading…
Reference in New Issue
Block a user