NoneBot2插件——打印系统状态

使用Python编写 NoneBot2插件 显示系统CPU、磁盘、内存的占用状态。
在这里插入图片描述
sys_states 插件目录,__pycache__文件无需创建。
在这里插入图片描述

init.py文件
  • on_command:消息事件响应器
  • on_notice:通知事件响应器
  • export:获取插件的导出内容对象
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占用率
  • 内存占用率
  • 磁盘占用率
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值