NoneBot2插件——打印系统状态
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NoneBot2插件——打印系统状态相关的知识,希望对你有一定的参考价值。
使用Python编写 NoneBot2插件 显示系统CPU、磁盘、内存的占用状态。
sys_states 插件目录,__pycache__文件无需创建。
init.py文件
from nonebot.adapters.cqhttp import Bot, Event, PokeNotifyEvent
from nonebot.adapters.cqhttp.message import Message
from nonebot.plugin import export, on_command, on_notice
from nonebot.rule import Rule
from nonebot.typing import T_State
from .info_get import get_sys_info
export = export()
export.name = '系统状态'
export.usage = '戳一戳以获取系统当前状态'
async def _is_poke(bot: Bot, event: Event, state: T_State) -> bool:
return isinstance(event, PokeNotifyEvent) and event.is_tome()
sys_info = on_notice(Rule(_is_poke), priority=50, block=True)
@sys_info.handle()
async def sys_info_handle(bot: Bot, event: Event, state: T_State):
info = get_sys_info('b')
await sys_info.send(info)
安装 psutil 库
pip install psutil
info_get.py 文件
import psutil
def cpu_info():
cpu = str(psutil.cpu_times())
user = float(cpu.split('user=')[1].split(',')[0])
system = float(cpu.split('system=')[1].split(',')[0])
idle = float(cpu.split('idle=')[1].split(',')[0])
return {
'used' : round(user+system,1),
'user' : round(user,1),
'syst' : round(system,1),
'free' : round(idle,1),
'prec' : round((1 - idle/(user+system+idle))*100,1)
}
def mem_info():
mem = str(psutil.virtual_memory())
return {
'total' : round(float(mem.split('total=')[1].split(',')[0])/(1024**3),1),
'available' : round(float(mem.split('available=')[1].split(',')[0])/(1024**3),1),
'percent' : float(mem.split('percent=')[1].split(',')[0])
}
def disk_info():
disk = str(psutil.disk_usage('/'))
return {
'total' : round(float(disk.split('total=')[1].split(',')[0])/(1024**3),1),
'free' : round(float(disk.split('free=')[1].split(',')[0])/(1024**3),1),
'percent': float(disk.split('percent=')[1].split(',')[0].strip(')'))
}
def get_sys_info(method):
cpu = cpu_info()
mem = mem_info()
disk = disk_info()
if method == 'a':
return f'————————CPU————————\\
\\nCPU使用时间:{cpu["used"]}\\
\\n ->系统占用:{cpu["syst"]}\\
\\n ->用户占用:{cpu["user"]}\\
\\nCPU闲置时间:{cpu["free"]}\\
\\nCPU占用率:{cpu["prec"]}%\\
\\n————————MEM————————\\
\\n总内存:{mem["total"]}GB\\
\\n可用内存:{mem["available"]}GB\\
\\n内存占用率:{mem["percent"]}%\\
\\n————————DISK————————\\
\\n磁盘总空间:{disk["total"]}GB\\
\\n磁盘可用空间:{disk["free"]}GB\\
\\n磁盘占用率:{disk["percent"]}%'
elif method == 'b':
return f'CPU占用率:{cpu["prec"]}%\\
\\n内存占用率:{mem["percent"]}%\\
\\n磁盘占用率:{disk["percent"]}%'
加载插件目录
在 bot.py 文件中添加以下行:
# 加载插件目录,该目录下为各插件,以下划线开头的插件将不会被加载
nonebot.load_plugins("awesome_bot/plugins")
app = nonebot.get_asgi()
我的 bot.py 文件 如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import nonebot
from nonebot.adapters.cqhttp import Bot as CQHTTPBot
nonebot.init()
app = nonebot.get_asgi()
driver = nonebot.get_driver()
driver.register_adapter("cqhttp", CQHTTPBot)
nonebot.load_builtin_plugins() # 加载 nonebot 内置插件
nonebot.load_from_toml("pyproject.toml")
nonebot.load_plugins("src/plugins") # 加载插件目录,该目录下为各插件,以下划线开头的插件将不会被加载
app = nonebot.get_asgi()
if __name__ == "__main__":
nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
nonebot.run(app="__mp_main__:app")
运行结果
尝试运行 python bot.py,可以看到日志输出了类似如下内容:
08-04 14:26:20 [DEBUG] nonebot | Succeeded to load adapter "cqhttp"
08-04 14:26:20 [INFO] nonebot | Succeeded to import "nonebot.plugins.echo"
08-04 14:26:20 [INFO] nonebot | Succeeded to import "sys_states"
08-04 14:26:20 [INFO] uvicorn | Started server process [21184]
08-04 14:26:20 [INFO] uvicorn | Waiting for application startup.
08-04 14:26:20 [INFO] uvicorn | Application startup complete.
说明插件安装成功。
开始在QQ上使用,查看效果,使用手机QQ对机器人头像戳一戳,就会自动打印电脑的
- CPU占用率
- 内存占用率
- 磁盘占用率
以上是关于NoneBot2插件——打印系统状态的主要内容,如果未能解决你的问题,请参考以下文章