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插件——打印系统状态的主要内容,如果未能解决你的问题,请参考以下文章

NoneBot2插件——进群欢迎

Raspberry Pi 3B 安装NoneBot2

Windows 安装 NoneBot2

用nonebot2构建自己的机器人框架

自定义nagios插件实现主动被动模式以及nagios基于mail的简单告警

argparse 代码片段只打印部分日志