mirror of
				https://github.com/LiteyukiStudio/LiteyukiBot.git
				synced 2025-11-04 02:56:23 +00:00 
			
		
		
		
	⚡ 优化状态卡片速度
This commit is contained in:
		@@ -16,18 +16,19 @@ from liteyuki.utils.message.html_tool import template2image
 | 
			
		||||
from liteyuki.utils import satori_utils
 | 
			
		||||
from .counter_for_satori import satori_counter
 | 
			
		||||
from git import Repo
 | 
			
		||||
 | 
			
		||||
require("nonebot_plugin_apscheduler")
 | 
			
		||||
from nonebot_plugin_apscheduler import scheduler
 | 
			
		||||
 | 
			
		||||
commit_hash = Repo(".").head.commit.hexsha
 | 
			
		||||
 | 
			
		||||
protocol_names = {
 | 
			
		||||
    0: "iPad",
 | 
			
		||||
    1: "Android Phone",
 | 
			
		||||
    2: "Android Watch",
 | 
			
		||||
    3: "Mac",
 | 
			
		||||
    5: "iPad",
 | 
			
		||||
    6: "Android Pad",
 | 
			
		||||
        0: "iPad",
 | 
			
		||||
        1: "Android Phone",
 | 
			
		||||
        2: "Android Watch",
 | 
			
		||||
        3: "Mac",
 | 
			
		||||
        5: "iPad",
 | 
			
		||||
        6: "Android Pad",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
@@ -84,19 +85,19 @@ async def refresh_status_card():
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def generate_status_card(bot: dict, hardware: dict, liteyuki: dict, lang="zh-CN", bot_id="0",
 | 
			
		||||
                               use_cache=False) -> bytes:
 | 
			
		||||
                               use_cache=False
 | 
			
		||||
                               ) -> bytes:
 | 
			
		||||
    if not use_cache:
 | 
			
		||||
        return await template2image(
 | 
			
		||||
            get_path("templates/status.html", abs_path=True),
 | 
			
		||||
            {
 | 
			
		||||
                "data": {
 | 
			
		||||
                    "bot": bot,
 | 
			
		||||
                    "hardware": hardware,
 | 
			
		||||
                    "liteyuki": liteyuki,
 | 
			
		||||
                    "localization": get_local_data(lang)
 | 
			
		||||
                }
 | 
			
		||||
                    "data": {
 | 
			
		||||
                            "bot"         : bot,
 | 
			
		||||
                            "hardware"    : hardware,
 | 
			
		||||
                            "liteyuki"    : liteyuki,
 | 
			
		||||
                            "localization": get_local_data(lang)
 | 
			
		||||
                    }
 | 
			
		||||
            },
 | 
			
		||||
            debug=True
 | 
			
		||||
        )
 | 
			
		||||
    else:
 | 
			
		||||
        if lang not in status_card_cache:
 | 
			
		||||
@@ -107,32 +108,32 @@ async def generate_status_card(bot: dict, hardware: dict, liteyuki: dict, lang="
 | 
			
		||||
def get_local_data(lang_code) -> dict:
 | 
			
		||||
    lang = Language(lang_code)
 | 
			
		||||
    return {
 | 
			
		||||
        "friends": lang.get("status.friends"),
 | 
			
		||||
        "groups": lang.get("status.groups"),
 | 
			
		||||
        "plugins": lang.get("status.plugins"),
 | 
			
		||||
        "bots": lang.get("status.bots"),
 | 
			
		||||
        "message_sent": lang.get("status.message_sent"),
 | 
			
		||||
        "message_received": lang.get("status.message_received"),
 | 
			
		||||
        "cpu": lang.get("status.cpu"),
 | 
			
		||||
        "memory": lang.get("status.memory"),
 | 
			
		||||
        "swap": lang.get("status.swap"),
 | 
			
		||||
        "disk": lang.get("status.disk"),
 | 
			
		||||
            "friends"         : lang.get("status.friends"),
 | 
			
		||||
            "groups"          : lang.get("status.groups"),
 | 
			
		||||
            "plugins"         : lang.get("status.plugins"),
 | 
			
		||||
            "bots"            : lang.get("status.bots"),
 | 
			
		||||
            "message_sent"    : lang.get("status.message_sent"),
 | 
			
		||||
            "message_received": lang.get("status.message_received"),
 | 
			
		||||
            "cpu"             : lang.get("status.cpu"),
 | 
			
		||||
            "memory"          : lang.get("status.memory"),
 | 
			
		||||
            "swap"            : lang.get("status.swap"),
 | 
			
		||||
            "disk"            : lang.get("status.disk"),
 | 
			
		||||
 | 
			
		||||
        "usage": lang.get("status.usage"),
 | 
			
		||||
        "total": lang.get("status.total"),
 | 
			
		||||
        "used": lang.get("status.used"),
 | 
			
		||||
        "free": lang.get("status.free"),
 | 
			
		||||
            "usage"           : lang.get("status.usage"),
 | 
			
		||||
            "total"           : lang.get("status.total"),
 | 
			
		||||
            "used"            : lang.get("status.used"),
 | 
			
		||||
            "free"            : lang.get("status.free"),
 | 
			
		||||
 | 
			
		||||
        "days": lang.get("status.days"),
 | 
			
		||||
        "hours": lang.get("status.hours"),
 | 
			
		||||
        "minutes": lang.get("status.minutes"),
 | 
			
		||||
        "seconds": lang.get("status.seconds"),
 | 
			
		||||
        "runtime": lang.get("status.runtime"),
 | 
			
		||||
        "threads": lang.get("status.threads"),
 | 
			
		||||
        "cores": lang.get("status.cores"),
 | 
			
		||||
        "process": lang.get("status.process"),
 | 
			
		||||
        "resources": lang.get("status.resources"),
 | 
			
		||||
        "description": lang.get("status.description"),
 | 
			
		||||
            "days"            : lang.get("status.days"),
 | 
			
		||||
            "hours"           : lang.get("status.hours"),
 | 
			
		||||
            "minutes"         : lang.get("status.minutes"),
 | 
			
		||||
            "seconds"         : lang.get("status.seconds"),
 | 
			
		||||
            "runtime"         : lang.get("status.runtime"),
 | 
			
		||||
            "threads"         : lang.get("status.threads"),
 | 
			
		||||
            "cores"           : lang.get("status.cores"),
 | 
			
		||||
            "process"         : lang.get("status.process"),
 | 
			
		||||
            "resources"       : lang.get("status.resources"),
 | 
			
		||||
            "description"     : lang.get("status.description"),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -141,8 +142,8 @@ async def get_bots_data(self_id: str = "0") -> dict:
 | 
			
		||||
    Returns:
 | 
			
		||||
    """
 | 
			
		||||
    result = {
 | 
			
		||||
        "self_id": self_id,
 | 
			
		||||
        "bots": [],
 | 
			
		||||
            "self_id": self_id,
 | 
			
		||||
            "bots"   : [],
 | 
			
		||||
    }
 | 
			
		||||
    for bot_id, bot in nonebot.get_bots().items():
 | 
			
		||||
        groups = 0
 | 
			
		||||
@@ -180,15 +181,15 @@ async def get_bots_data(self_id: str = "0") -> dict:
 | 
			
		||||
        else:
 | 
			
		||||
            icon = None
 | 
			
		||||
        bot_data = {
 | 
			
		||||
            "name": bot_name,
 | 
			
		||||
            "icon": icon,
 | 
			
		||||
            "id": bot_id,
 | 
			
		||||
            "protocol_name": protocol_names.get(version_info.get("protocol_name"), "Online"),
 | 
			
		||||
            "groups": groups,
 | 
			
		||||
            "friends": friends,
 | 
			
		||||
            "message_sent": satori_counter.msg_sent if isinstance(bot, satori.Bot) else statistics.get("message_sent", 0),
 | 
			
		||||
            "message_received": satori_counter.msg_received if isinstance(bot, satori.Bot) else statistics.get("message_received", 0),
 | 
			
		||||
            "app_name": app_name
 | 
			
		||||
                "name"            : bot_name,
 | 
			
		||||
                "icon"            : icon,
 | 
			
		||||
                "id"              : bot_id,
 | 
			
		||||
                "protocol_name"   : protocol_names.get(version_info.get("protocol_name"), "Online"),
 | 
			
		||||
                "groups"          : groups,
 | 
			
		||||
                "friends"         : friends,
 | 
			
		||||
                "message_sent"    : satori_counter.msg_sent if isinstance(bot, satori.Bot) else statistics.get("message_sent", 0),
 | 
			
		||||
                "message_received": satori_counter.msg_received if isinstance(bot, satori.Bot) else statistics.get("message_received", 0),
 | 
			
		||||
                "app_name"        : app_name
 | 
			
		||||
        }
 | 
			
		||||
        result["bots"].append(bot_data)
 | 
			
		||||
 | 
			
		||||
@@ -220,27 +221,27 @@ async def get_hardware_data() -> dict:
 | 
			
		||||
    else:
 | 
			
		||||
        brand = "Unknown"
 | 
			
		||||
    result = {
 | 
			
		||||
        "cpu": {
 | 
			
		||||
            "percent": psutil.cpu_percent(),
 | 
			
		||||
            "name": f"{brand} {cpuinfo.get_cpu_info().get('arch', 'Unknown')}",
 | 
			
		||||
            "cores": psutil.cpu_count(logical=False),
 | 
			
		||||
            "threads": psutil.cpu_count(logical=True),
 | 
			
		||||
            "freq": psutil.cpu_freq().current  # MHz
 | 
			
		||||
        },
 | 
			
		||||
        "memory": {
 | 
			
		||||
            "percent": mem.percent,
 | 
			
		||||
            "total": mem.total,
 | 
			
		||||
            "used": mem.used,
 | 
			
		||||
            "free": mem.free,
 | 
			
		||||
            "usedProcess": mem_used_process,
 | 
			
		||||
        },
 | 
			
		||||
        "swap": {
 | 
			
		||||
            "percent": swap.percent,
 | 
			
		||||
            "total": swap.total,
 | 
			
		||||
            "used": swap.used,
 | 
			
		||||
            "free": swap.free
 | 
			
		||||
        },
 | 
			
		||||
        "disk": [],
 | 
			
		||||
            "cpu"   : {
 | 
			
		||||
                    "percent": psutil.cpu_percent(),
 | 
			
		||||
                    "name"   : f"{brand} {cpuinfo.get_cpu_info().get('arch', 'Unknown')}",
 | 
			
		||||
                    "cores"  : psutil.cpu_count(logical=False),
 | 
			
		||||
                    "threads": psutil.cpu_count(logical=True),
 | 
			
		||||
                    "freq"   : psutil.cpu_freq().current  # MHz
 | 
			
		||||
            },
 | 
			
		||||
            "memory": {
 | 
			
		||||
                    "percent"    : mem.percent,
 | 
			
		||||
                    "total"      : mem.total,
 | 
			
		||||
                    "used"       : mem.used,
 | 
			
		||||
                    "free"       : mem.free,
 | 
			
		||||
                    "usedProcess": mem_used_process,
 | 
			
		||||
            },
 | 
			
		||||
            "swap"  : {
 | 
			
		||||
                    "percent": swap.percent,
 | 
			
		||||
                    "total"  : swap.total,
 | 
			
		||||
                    "used"   : swap.used,
 | 
			
		||||
                    "free"   : swap.free
 | 
			
		||||
            },
 | 
			
		||||
            "disk"  : [],
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for disk in psutil.disk_partitions(all=True):
 | 
			
		||||
@@ -249,11 +250,11 @@ async def get_hardware_data() -> dict:
 | 
			
		||||
            if disk_usage.total == 0:
 | 
			
		||||
                continue  # 虚拟磁盘
 | 
			
		||||
            result["disk"].append({
 | 
			
		||||
                "name": disk.mountpoint,
 | 
			
		||||
                "percent": disk_usage.percent,
 | 
			
		||||
                "total": disk_usage.total,
 | 
			
		||||
                "used": disk_usage.used,
 | 
			
		||||
                "free": disk_usage.free
 | 
			
		||||
                    "name"   : disk.mountpoint,
 | 
			
		||||
                    "percent": disk_usage.percent,
 | 
			
		||||
                    "total"  : disk_usage.total,
 | 
			
		||||
                    "used"   : disk_usage.used,
 | 
			
		||||
                    "free"   : disk_usage.free
 | 
			
		||||
            })
 | 
			
		||||
        except:
 | 
			
		||||
            pass
 | 
			
		||||
@@ -264,14 +265,14 @@ async def get_hardware_data() -> dict:
 | 
			
		||||
async def get_liteyuki_data() -> dict:
 | 
			
		||||
    temp_data: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
 | 
			
		||||
    result = {
 | 
			
		||||
        "name": list(get_config("nickname", [__NAME__]))[0],
 | 
			
		||||
        "version": f"{__VERSION__}({commit_hash[:7] if (commit_hash and len(commit_hash) > 8) else ''})",
 | 
			
		||||
        "plugins": len(nonebot.get_loaded_plugins()),
 | 
			
		||||
        "resources": len(get_loaded_resource_packs()),
 | 
			
		||||
        "nonebot": f"{nonebot.__version__}",
 | 
			
		||||
        "python": f"{platform.python_implementation()} {platform.python_version()}",
 | 
			
		||||
        "system": f"{platform.system()} {platform.release()}",
 | 
			
		||||
        "runtime": time.time() - temp_data.data.get("start_time", time.time()),  # 运行时间秒数
 | 
			
		||||
        "bots": len(nonebot.get_bots())
 | 
			
		||||
            "name"     : list(get_config("nickname", [__NAME__]))[0],
 | 
			
		||||
            "version"  : f"{__VERSION__}{'-' + commit_hash[:7] if (commit_hash and len(commit_hash) > 8) else ''}",
 | 
			
		||||
            "plugins"  : len(nonebot.get_loaded_plugins()),
 | 
			
		||||
            "resources": len(get_loaded_resource_packs()),
 | 
			
		||||
            "nonebot"  : f"{nonebot.__version__}",
 | 
			
		||||
            "python"   : f"{platform.python_implementation()} {platform.python_version()}",
 | 
			
		||||
            "system"   : f"{platform.system()} {platform.release()}",
 | 
			
		||||
            "runtime"  : time.time() - temp_data.data.get("start_time", time.time()),  # 运行时间秒数
 | 
			
		||||
            "bots"     : len(nonebot.get_bots())
 | 
			
		||||
    }
 | 
			
		||||
    return result
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user