zhenxun_bot/zhenxun/builtin_plugins/check/__init__.py

90 lines
2.4 KiB
Python
Raw Normal View History

from nonebot import on_notice
from nonebot.adapters.onebot.v11 import PokeNotifyEvent
2024-09-07 01:25:42 +08:00
from nonebot.permission import SUPERUSER
from nonebot.plugin import PluginMetadata
from nonebot.rule import Rule, to_me
from nonebot_plugin_alconna import Alconna, on_alconna
2024-09-07 01:25:42 +08:00
from zhenxun.configs.config import Config
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
2024-09-07 01:25:42 +08:00
from zhenxun.services.log import logger
from zhenxun.services.renderer import renderer_service
2024-09-07 01:25:42 +08:00
from zhenxun.utils.enum import PluginType
from zhenxun.utils.message import MessageUtils
from zhenxun.utils.rules import notice_rule
2024-09-07 01:25:42 +08:00
from .data_source import get_status_info
__plugin_meta__ = PluginMetadata(
name="服务器自我检查",
description="查看服务器当前状态",
usage="""
查看服务器当前状态
指令:
自检
戳一戳BOT
2024-09-07 01:25:42 +08:00
""".strip(),
extra=PluginExtraData(
author="HibiKier",
version="0.1",
plugin_type=PluginType.SUPERUSER,
configs=[
RegisterConfig(
key="type",
value="mix",
help="自检触发方式 ['message', 'poke', 'mix']",
default_value="mix",
)
],
).to_dict(),
2024-09-07 01:25:42 +08:00
)
def commandRule() -> Rule:
return Rule(lambda: Config.get_config("check", "type") in {"message", "mix"})
def noticeRule() -> Rule:
return Rule(lambda: Config.get_config("check", "type") in {"poke", "mix"})
_self_check_matcher = _self_check_matcher = on_alconna(
Alconna("自检"),
rule=to_me() & commandRule(),
permission=SUPERUSER,
block=True,
priority=1,
)
_self_check_poke_matcher = on_notice(
priority=5,
permission=SUPERUSER,
block=False,
rule=notice_rule(PokeNotifyEvent) & to_me() & noticeRule(),
)
async def handle_self_check():
2024-09-07 01:25:42 +08:00
try:
data_dict = await get_status_info()
image_bytes = await renderer_service.render(
"pages/builtin/check", data=data_dict
2024-09-07 01:25:42 +08:00
)
await MessageUtils.build_message(image_bytes).send()
logger.info("自检成功", "自检")
2024-09-07 01:25:42 +08:00
except Exception as e:
await MessageUtils.build_message(f"自检失败: {e}").send()
logger.error("自检失败", "自检", e=e)
@_self_check_matcher.handle()
async def handle_message_check():
await handle_self_check()
@_self_check_poke_matcher.handle()
async def handle_poke_check():
await handle_self_check()