1
0
forked from bot/app

feat: 添加了网页监控面板

This commit is contained in:
2024-03-19 00:27:40 +08:00
parent 51cb1a87b8
commit 3adc265876
23 changed files with 316 additions and 42 deletions

View File

@ -1,5 +1,8 @@
import nonebot
from nonebot.plugin import PluginMetadata
from src.utils.language import get_system_lang
from .loader import *
from .webdash import *
__author__ = "snowykami"
__plugin_meta__ = PluginMetadata(
@ -9,11 +12,8 @@ __plugin_meta__ = PluginMetadata(
homepage="https://github.com/snowykami/LiteyukiBot",
)
fastapi_app = nonebot.get_app()
from src.utils.config import config
@fastapi_app.get("/")
async def root():
return {
"message": "Hello LiteyukiBot!",
}
sys_lang = get_system_lang()
nonebot.logger.info(sys_lang.get("main.current_language", LANG=sys_lang.get("language.name")))
nonebot.logger.info(sys_lang.get("main.enable_webdash", URL=f"http://{config['nonebot']['host']}:{config['nonebot']['port']}"))

View File

@ -0,0 +1,14 @@
import os
import nonebot.plugin
from src.utils.language import load_from_dir
from src.utils.resource import load_resource_from_dir
PLUGIN_NAME = os.path.basename(os.path.dirname(__file__))
RESOURCE_PATH = "src/resources"
load_resource_from_dir(RESOURCE_PATH)
for plugin_dir in os.listdir("src/plugins"):
if plugin_dir != PLUGIN_NAME:
nonebot.plugin.load_plugin(f"src.plugins.{plugin_dir}")

View File

@ -0,0 +1,80 @@
import nonebot
import psutil
from dash import Dash, Input, Output, dcc, html
from starlette.middleware.wsgi import WSGIMiddleware
from src.utils.language import Language
app = nonebot.get_app()
def get_system_info():
cpu_percent = psutil.cpu_percent()
memory_info = psutil.virtual_memory()
memory_percent = memory_info.percent
return {
"cpu_percent" : cpu_percent,
"memory_percent": memory_percent
}
@app.get("/system_info")
async def system_info():
return get_system_info()
lang = Language()
dash_app = Dash(__name__)
dash_app.layout = dash_app.layout = html.Div(children=[
html.H1(children=lang.get("main.monitor.title"), style={
'textAlign': 'center'
}),
dcc.Graph(id='live-update-graph'),
dcc.Interval(
id='interval-component',
interval=1 * 1000, # in milliseconds
n_intervals=0
)
])
@dash_app.callback(Output('live-update-graph', 'figure'),
[Input('interval-component', 'n_intervals')])
def update_graph_live(n):
lang = Language()
system_inf = get_system_info()
dash_app.layout = html.Div(children=[
html.H1(children=lang.get("main.monitor.title"), style={
'textAlign': 'center'
}),
dcc.Graph(id='live-update-graph'),
dcc.Interval(
id='interval-component',
interval=1 * 1000, # in milliseconds
n_intervals=0
)
])
figure = {
'data' : [
{
'x' : [lang.get('main.monitor.cpu')],
'y' : [system_inf['cpu_percent']],
'type': 'bar',
'name': f"{lang.get('main.monitor.cpu')} {lang.get('main.monitor.usage')}"
},
{
'x' : [lang.get('main.monitor.memory')],
'y' : [system_inf['memory_percent']],
'type': 'bar',
'name': f"{lang.get('main.monitor.memory')} {lang.get('main.monitor.usage')}"
},
],
'layout': {
'title': lang.get('main.monitor.description'),
}
}
return figure
app.mount("/", WSGIMiddleware(dash_app.server))

View File

@ -1,5 +1,7 @@
import nonebot.plugin
from nonebot import on_command
from nonebot.permission import SUPERUSER
from src.utils.adapter import MessageEvent
from src.utils.language import get_user_lang
@ -9,8 +11,12 @@ toggle_plugin = on_command("enable-plugin", aliases={"启用插件", "禁用插
@list_plugins.handle()
async def _(event: MessageEvent):
lang = get_user_lang(event.user_id)
reply = lang.get("npm.current_plugins")
lang = get_user_lang(str(event.user_id))
reply = lang.get("npm.loaded_plugins")
for plugin in nonebot.get_loaded_plugins():
reply += f"\n- {plugin.name}"
# 检查是否有 metadata 属性
if plugin.metadata:
reply += f"\n- {plugin.metadata.name}"
else:
reply += f"\n- {plugin.name}"
await list_plugins.finish(reply)

View File

@ -0,0 +1 @@
from .profile_manager import *

View File

@ -0,0 +1,39 @@
from nonebot import on_command
from nonebot.params import CommandArg
from src.utils.adapter import Bot, Message, MessageEvent
from src.utils.data_manager import User, user_db
from src.utils.language import get_user_lang
attr_map = {
"lang" : ["lang", "language", "语言"],
"username": ["username", "昵称", "用户名"] # Bot称呼用户的昵称
}
attr_cmd = on_command("profile", aliases={"个人设置"}, priority=0)
@attr_cmd.handle()
async def _(bot: Bot, event: MessageEvent, args: Message = CommandArg()):
user = user_db.first(User, "user_id = ?", str(event.user_id), default=User(user_id=str(event.user_id)))
ulang = get_user_lang(str(event.user_id))
args = str(args).split(" ", 1)
input_key = args[0]
attr_key = "username"
for attr_key, attr_values in attr_map.items():
if input_key in attr_values:
break
if len(args) == 1:
# 查询
value = user.__dict__[attr_key]
await attr_cmd.finish(f"{ulang.get('user.profile_manager.query', ATTR=attr_key, VALUE=value)}")
else:
# 设置
value = args[1]
user.__dict__[attr_key] = value
user_db.save(user)
await attr_cmd.finish(f"{ulang.get('user.profile_manager.set', ATTR=attr_key, VALUE=value)}")