๐Ÿ˜ดๆ้ซ˜ๆฑ‰ๅŒ–็ฒพๅ‡†ๅบฆ๏ผŒๅผบ่ฐƒ็‰ˆๆƒๅฃฐๆ˜Ž

This commit is contained in:
2024-07-26 01:23:01 +08:00
parent da08f8d085
commit 3ede8f710d
23 changed files with 657 additions and 183 deletions

View File

@ -18,6 +18,28 @@ __plugin_meta__ = PluginMetadata(
from ..utils.base.language import Language, get_default_lang_code
print(
"\033[34m"
+ r"""
โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–ˆโ–ˆ โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–ˆโ–ˆ โ–ˆโ–ˆ โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–ˆโ„ข
โ–› โ–ˆโ–ˆ โ–ˆโ–ˆ โ–› โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ
โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–… โ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ
โ–ˆโ–ˆ โ–ˆโ–ˆ โ–…โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–› โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–… โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–…โ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆ โ–ˆ โ–œโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–› โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ
โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
ๅ•†ๆ ‡ๆ ‡่ฎฐ ยฉ 2024 ้‡‘็พฟEilles
็‰ˆๆƒๆ‰€ๆœ‰ ยฉ 2020-2024 ็ฅž็พฝSnowyKami & ้‡‘็พฟEilles\\
with LiteyukiStudio & TriM Org.
ไฟ็•™ๆ‰€ๆœ‰ๆƒๅˆฉ
"""
+ "\033[0m"
)
sys_lang = Language(get_default_lang_code())
nonebot.logger.info(

View File

@ -17,22 +17,18 @@ async def count_msg_by_bot_id(bot_id: str) -> int:
condition = " AND bot_id = ?"
condition_args = [bot_id]
msg_rows = msg_db.where_all(
MessageEventModel(),
condition,
*condition_args
)
msg_rows = msg_db.where_all(MessageEventModel(), condition, *condition_args)
return len(msg_rows)
async def get_stat_msg_image(
duration: int,
period: int,
group_id: str = None,
bot_id: str = None,
user_id: str = None,
ulang: Language = Language()
duration: int,
period: int,
group_id: str = None,
bot_id: str = None,
user_id: str = None,
ulang: Language = Language(),
) -> bytes:
"""
่Žทๅ–็ปŸ่ฎกๆถˆๆฏ
@ -48,7 +44,7 @@ async def get_stat_msg_image(
tuple: [int,], [int,] ไธคไธชๅˆ—่กจ๏ผŒๅˆ†ๅˆซไธบๅ‘จๆœŸไธญๅฟƒๆ—ถ้—ดๆˆณๅ’Œๆถˆๆฏๆ•ฐ้‡
"""
now = int(time.time())
start_time = (now - duration)
start_time = now - duration
condition = "time > ?"
condition_args = [start_time]
@ -64,11 +60,7 @@ async def get_stat_msg_image(
condition += " AND user_id = ?"
condition_args.append(user_id)
msg_rows = msg_db.where_all(
MessageEventModel(),
condition,
*condition_args
)
msg_rows = msg_db.where_all(MessageEventModel(), condition, *condition_args)
timestamps = []
msg_count = []
msg_rows.sort(key=lambda x: x.time)
@ -86,26 +78,30 @@ async def get_stat_msg_image(
msg_count[index] += 1
templates = {
"data": [
{
"name" : ulang.get("stat.message")
+ f" Period {convert_seconds_to_time(period)}" + f" Duration {convert_seconds_to_time(duration)}"
+ (f" Group {group_id}" if group_id else "") + (f" Bot {bot_id}" if bot_id else "") + (
f" User {user_id}" if user_id else ""),
"times" : timestamps,
"counts": msg_count
}
]
"data": [
{
"name": "ไปฅ{}ไธบๅˆ†ๅ‰ฒ๏ผŒๅœจ{}่Œƒๅ›ดๅ†…็š„ {}".format(
convert_seconds_to_time(period),
convert_seconds_to_time(duration),
ulang.get("stat.message"),
)
+ (f" ็พค่Š๏ผš{group_id}" if group_id else "")
+ (f" ๆœบๅ™จ๏ผš{bot_id}" if bot_id else "")
+ (f" ็”จๆˆท๏ผš{user_id}" if user_id else ""),
"times": timestamps,
"counts": msg_count,
}
]
}
return await template2image(get_path("templates/stat_msg.html"), templates)
async def get_stat_rank_image(
rank_type: str,
limit: dict[str, Any],
ulang: Language = Language(),
bot: Bot = None,
rank_type: str,
limit: dict[str, Any],
ulang: Language = Language(),
bot: Bot = None,
) -> bytes:
if rank_type == "user":
condition = "user_id != ''"
@ -129,11 +125,7 @@ async def get_stat_rank_image(
condition += " AND time > ?"
condition_args.append(v)
msg_rows = msg_db.where_all(
MessageEventModel(),
condition,
*condition_args
)
msg_rows = msg_db.where_all(MessageEventModel(), condition, *condition_args)
"""
{
@ -150,23 +142,27 @@ async def get_stat_rank_image(
sorted_data = sorted(ranking_counter.items(), key=lambda x: x[1], reverse=True)
ranking: list[dict[str, Any]] = [
{
"name" : _[0],
"count": _[1],
"icon" : await (get_group_icon(platform="qq", group_id=_[0]) if rank_type == "group" else get_user_icon(
platform="qq", user_id=_[0]
))
}
for _ in sorted_data[0:min(len(sorted_data), limit["rank"])]
{
"name": _[0],
"count": _[1],
"icon": await (
get_group_icon(platform="qq", group_id=_[0])
if rank_type == "group"
else get_user_icon(platform="qq", user_id=_[0])
),
}
for _ in sorted_data[0 : min(len(sorted_data), limit["rank"])]
]
templates = {
"data":
{
"name" : ulang.get("stat.rank") + f" Type {rank_type}" + f" Limit {limit}",
"ranking": ranking
}
"data": {
"name": ulang.get("stat.rank")
+ f" ็ฑปๅˆซ๏ผš{rank_type}"
+ f" ๅˆถ็บฆ๏ผš{limit}",
"ranking": ranking,
}
}
return await template2image(get_path("templates/stat_rank.html"), templates, debug=True)
return await template2image(
get_path("templates/stat_rank.html"), templates, debug=True
)

View File

@ -15,7 +15,7 @@ from nonebot_plugin_alconna import (
Subcommand,
Arparma,
Option,
MultiVar
MultiVar,
)
stat_msg = on_alconna(
@ -40,17 +40,11 @@ stat_msg = on_alconna(
help_text="ๆ˜ฏๅฆๆŒ‡ๅฎšๆœบๅ™จไบบ",
),
Option(
"-g|--group",
Args["group_id", str, "current"],
help_text="ๆŒ‡ๅฎš็พค็ป„"
),
Option(
"-u|--user",
Args["user_id", str, "current"],
help_text="ๆŒ‡ๅฎš็”จๆˆท"
"-g|--group", Args["group_id", str, "current"], help_text="ๆŒ‡ๅฎš็พค็ป„"
),
Option("-u|--user", Args["user_id", str, "current"], help_text="ๆŒ‡ๅฎš็”จๆˆท"),
alias={"msg", "m"},
help_text="ๆŸฅ็œ‹็ปŸ่ฎกๆฌกๆ•ฐๅ†…็š„ๆถˆๆฏ"
help_text="ๆŸฅ็œ‹็ปŸ่ฎกๆฌกๆ•ฐๅ†…็š„ๆถˆๆฏ",
),
Subcommand(
"rank",
@ -78,9 +72,9 @@ stat_msg = on_alconna(
help_text="ๆŒ‡ๅฎšๆŽ’ๅ",
),
alias={"r"},
)
),
),
aliases={"stat"}
aliases={"stat"},
)
@ -88,10 +82,14 @@ stat_msg = on_alconna(
async def _(result: Arparma, event: T_MessageEvent, bot: Bot):
ulang = Language(event_utils.get_user_id(event))
try:
duration = convert_time_to_seconds(result.other_args.get("duration", "2d")) # ็ง’ๆ•ฐ
duration = convert_time_to_seconds(
result.other_args.get("duration", "2d")
) # ็ง’ๆ•ฐ
period = convert_time_to_seconds(result.other_args.get("period", "1m"))
except BaseException as e:
await stat_msg.send(ulang.get("liteyuki.invalid_command", TEXT=str(e.__str__())))
await stat_msg.send(
ulang.get("liteyuki.invalid_command", TEXT=str(e.__str__()))
)
return
group_id = result.other_args.get("group_id")
@ -110,7 +108,14 @@ async def _(result: Arparma, event: T_MessageEvent, bot: Bot):
if user_id in ["current", "c"]:
user_id = str(event_utils.get_user_id(event))
img = await get_stat_msg_image(duration=duration, period=period, group_id=group_id, bot_id=bot_id, user_id=user_id, ulang=ulang)
img = await get_stat_msg_image(
duration=duration,
period=period,
group_id=group_id,
bot_id=bot_id,
user_id=user_id,
ulang=ulang,
)
await stat_msg.send(UniMessage.image(raw=img))

View File

@ -1,7 +1,7 @@
from nonebot.plugin import PluginMetadata
from .status import *
__author__ = "snowykami & ้‡‘็พฟEilles"
__author__ = "็ฅž็พฝSnowyKami & ้‡‘็พฟEilles"
__plugin_meta__ = PluginMetadata(
name="็Šถๆ€ๆŸฅ็œ‹ๅ™จ",
description="",

View File

@ -23,12 +23,12 @@ from git import Repo
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: "ๅฎ‰ๅ“ๆŽŒๆœบ",
2: "ๅฎ‰ๅ“็ฉฟๆˆด",
3: "Macไธปๆœบ",
5: "่‹นๆžœiPad",
6: "ๅฎ‰ๅ“ๅนณๆฟ",
}
"""
@ -175,7 +175,7 @@ async def get_bots_data(self_id: str = "0") -> dict:
pass
statistics = status.get("stat", {})
app_name = version_info.get("app_name", "UnknownImplementation")
app_name = version_info.get("app_name", "ๆœช็Ÿฅๅบ”็”จๆŽฅๅฃ")
if app_name in ["Lagrange.OneBot", "LLOneBot", "Shamrock", "NapCat.Onebot"]:
icon = f"https://q.qlogo.cn/g?b=qq&nk={bot_id}&s=640"
elif isinstance(bot, satori.Bot):
@ -188,7 +188,7 @@ async def get_bots_data(self_id: str = "0") -> dict:
"icon": icon,
"id": bot_id,
"protocol_name": protocol_names.get(
version_info.get("protocol_name"), "Online"
version_info.get("protocol_name"), "ๅœจ็บฟ"
),
"groups": groups,
"friends": friends,
@ -226,17 +226,19 @@ async def get_hardware_data() -> dict:
except Exception:
pass
swap = psutil.swap_memory()
cpu_brand_raw = cpuinfo.get_cpu_info().get("brand_raw", "Unknown")
cpu_brand_raw = cpuinfo.get_cpu_info().get("brand_raw", "ๆœช็Ÿฅๅค„็†ๅ™จ")
if "AMD" in cpu_brand_raw:
brand = "AMD"
elif "Intel" in cpu_brand_raw:
brand = "Intel"
brand = "่‹ฑ็‰นๅฐ”"
elif "Nvidia" in cpu_brand_raw:
brand = "่‹ฑไผŸ่พพ"
else:
brand = "Unknown"
brand = "ๆœช็Ÿฅๅค„็†ๅ™จ"
result = {
"cpu": {
"percent": psutil.cpu_percent(),
"name": f"{brand} {cpuinfo.get_cpu_info().get('arch', 'Unknown')}",
"name": f"{brand} {cpuinfo.get_cpu_info().get('arch', 'ๆœช็Ÿฅๆžถๆž„')}",
"cores": psutil.cpu_count(logical=False),
"threads": psutil.cpu_count(logical=True),
"freq": psutil.cpu_freq().current, # MHz

View File

@ -137,7 +137,7 @@ async def _(
or ulang.lang_code not in status_card_cache.keys()
or (
ulang.lang_code in status_card_cache.keys()
and time.time() - status_card_cache[ulang.lang_code][1] > 60
and time.time() - status_card_cache[ulang.lang_code][1] > 300 # ็ผ“ๅญ˜
)
):
status_card_cache[ulang.lang_code] = (

View File

@ -44,8 +44,8 @@ data.forEach((item) => {
function timestampToTime(timestamp) {
let date = new Date(timestamp * 1000)
let Y = date.getFullYear() + '-'
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
let Y = date.getFullYear() + '/'
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/'
let D = date.getDate() + ' '
let h = date.getHours() + ':'
let m = date.getMinutes() + ':'

View File

@ -3,12 +3,12 @@ let data = JSON.parse(document.getElementById("data").innerText) // object
const rowDiv = document.importNode(document.getElementById("row-template").content, true)
function randomHideChar(str) {
// ้šๆœบ้š่—6ไฝไปฅไธŠๅญ—็ฌฆไธฒ็š„ไธญ้—ด่ฟž็ปญๅ››ไฝๅญ—็ฌฆ๏ผŒ็”จ*ไปฃๆ›ฟ
// ้šๆœบ้š่—6ไฝไปฅไธŠๅญ—็ฌฆไธฒ็š„ไธญ้—ด่ฟž็ปญ5ไฝๅญ—็ฌฆ๏ผŒ็”จ ไปฃๆ›ฟ
if (str.length <= 6) {
return str
}
let start = Math.floor(str.length / 2) - 2
return str.slice(0, start) + "****" + str.slice(start + 4)
return str.slice(0, start) + "(ยฌโ€ฟยฌ)" + str.slice(start + 5)
}
data["ranking"].forEach((item) => {
let row = rowDiv.cloneNode(true)

View File

@ -1,25 +1,26 @@
<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Liteyuki Stats Message</title>
<link rel="stylesheet" href="./css/card.css">
<link rel="stylesheet" href="./css/fonts.css">
<link rel="stylesheet" href="./css/stat_msg.css">
</head>
<head>
<meta charset="UTF-8">
<title>Liteyuki Stats Message</title>
<link rel="stylesheet" href="./css/card.css">
<link rel="stylesheet" href="./css/fonts.css">
<link rel="stylesheet" href="./css/stat_msg.css">
</head>
<body>
<body>
<template id="sign-chart-template">
<div class="info-box sign-chart">
</div>
</template>
<template id="sign-chart-template">
<div class="info-box sign-chart">
</div>
</template>
<div class="data-storage" id="data">{{ data | tojson }}</div>
<div class="data-storage" id="data">{{ data | tojson }}</div>
<div class="info-box" id="addition-info"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
<script src="./js/stat_msg.js"></script>
<script src="./js/card.js"></script>
</body>
<div class="info-box" id="addition-info"></div>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
<script src="./js/stat_msg.js"></script>
<script src="./js/card.js"></script>
</body>

View File

@ -1,13 +1,13 @@
<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Liteyuki Stats Message</title>
<link rel="stylesheet" href="./css/card.css">
<link rel="stylesheet" href="./css/fonts.css">
<link rel="stylesheet" href="./css/stat_rank.css">
<style>
<head>
<meta charset="UTF-8">
<title>Liteyuki Stats Message</title>
<link rel="stylesheet" href="./css/card.css">
<link rel="stylesheet" href="./css/fonts.css">
<link rel="stylesheet" href="./css/stat_rank.css">
<style>
.row {
height: 100px;
display: flex;
@ -36,22 +36,23 @@
margin-left: auto;
}
</style>
</head>
</head>
<body>
<body>
<template id="row-template">
<div class="row">
<img src="./img/arrow-up.svg" alt="up" class="row-icon">
<div class="row-name"></div>
<div class="row-count"></div>
</div>
</template>
<template id="row-template">
<div class="row">
<img src="./img/arrow-up.svg" alt="up" class="row-icon">
<div class="row-name"></div>
<div class="row-count"></div>
</div>
</template>
<div class="data-storage" id="data">{{ data | tojson }}</div>
<div class="info-box" id="addition-info"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
<script src="./js/stat_rank.js"></script>
<script src="./js/card.js"></script>
</body>
<div class="data-storage" id="data">{{ data | tojson }}</div>
<div class="info-box" id="addition-info"></div>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
<script src="./js/stat_rank.js"></script>
<script src="./js/card.js"></script>
</body>

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -141,7 +141,7 @@ function main() {
tagSpan.className = 'bot-tag'
tagSpan.innerText = tag
// ็ป™ๆœ€ๅŽไธ€ไธชๆ ‡็ญพไธๆทปๅŠ ๅŽ็ผ€
tagSpan.setAttribute('suffix', (index === 0)||(tag[0] == '\n') ? '0' : '1')
tagSpan.setAttribute('suffix', (index === 0) || (tag[0] == '\n') ? '0' : '1')
botInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
}
)
@ -153,7 +153,7 @@ function main() {
// ๆทปๅŠ ่ฝป้›ชไฟกๆฏ
let liteyukiInfoDiv = document.importNode(document.getElementById('bot-template').content, true) // ๅคๅˆถๆจกๆฟ
liteyukiInfoDiv.className = 'info-box bot-info'
liteyukiInfoDiv.querySelector('.bot-icon-img').setAttribute('src', './img/liteyuki.png')
liteyukiInfoDiv.querySelector('.bot-icon-img').setAttribute('src', './img/litetrimo.png')
liteyukiInfoDiv.querySelector('.bot-name').innerText = `${liteyukiData['name']} - ็ฟไน`
let tagArray = [
@ -172,7 +172,7 @@ function main() {
tagSpan.className = 'bot-tag'
tagSpan.innerText = tag
// ็ป™ๆœ€ๅŽไธ€ไธชๆ ‡็ญพไธๆทปๅŠ ๅŽ็ผ€
tagSpan.setAttribute('suffix', (index === 0)||(tag[0] == '\n') ? '0' : '1')
tagSpan.setAttribute('suffix', (index === 0) || (tag[0] == '\n') ? '0' : '1')
liteyukiInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
}
)
@ -186,7 +186,7 @@ function main() {
const cpuTagArray = [
cpuData['name'],
`${cpuData['cores']}${localData['cores']} ${cpuData['threads']}${localData['threads']}`,
`${(cpuData['freq'] / 1000).toFixed(2)}GHz`
`${(cpuData['freq'] / 1000).toFixed(2)}ๅ‰่ตซๅ…น`
]
const memTagArray = [

View File

@ -1,42 +1,42 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1080, initial-scale=1.0">
<title>Liteyuki Stats</title>
<link rel="stylesheet" href="css/fonts.css">
<link rel="stylesheet" href="css/style.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.3.0/echarts.min.js"></script>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1080, initial-scale=1.0">
<title>Liteyuki Stats</title>
<link rel="stylesheet" href="css/fonts.css">
<link rel="stylesheet" href="css/style.css">
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.3.0/echarts.min.js"></script>
</head>
</head>
<body>
<body>
<div class="info-box" id="hardware-info">
<div class="pie-info" id="cpu-info">
<div class="pie-chart" id="cpu-chart"></div>
<div class="info-box" id="hardware-info">
<div class="pie-info" id="cpu-info">
<div class="pie-chart" id="cpu-chart"></div>
</div>
<div class="pie-info" id="mem-info">
<div class="pie-chart" id="mem-chart"></div>
</div>
<div class="pie-info" id="swap-info">
<div class="pie-chart" id="swap-chart"></div>
</div>
</div>
<div class="pie-info" id="mem-info">
<div class="pie-chart" id="mem-chart"></div>
<div class="info-box" id="disks-info">
</div>
<div class="pie-info" id="swap-info">
<div class="pie-chart" id="swap-chart"></div>
<div class="info-box" id="motto-info">
</div>
</div>
<div class="info-box" id="disks-info">
</div>
<div class="info-box" id="motto-info">
</div>
<!--ๅ‚จๅญ˜ๆ•ฐๆฎdiv๏ผŒไธๆ˜พ็คบ-->
<div id="data" style="display: none">{{ data | tojson }}</div>
<script src="js/bg.js"></script>
<!-- <script src="js/motto.js"></script> -->
<script src="js/style.js"></script>
</body>
<!--ๅ‚จๅญ˜ๆ•ฐๆฎdiv๏ผŒไธๆ˜พ็คบ-->
<div id="data" style="display: none">{{ data | tojson }}</div>
<script src="js/bg.js"></script>
<!-- <script src="js/motto.js"></script> -->
<script src="js/style.js"></script>
</body>
</html>

View File

@ -8,7 +8,6 @@ import nonebot
__NAME__ = "ๅฐน็ตๆธฉ|่ฝป้›ช-็ฟไน"
__VERSION__ = "6.3.4" # 60201
# __VERSION_I__ = 99060303
import requests