from typing import Optional from datetime import datetime from nonebot.typing import T_State from nonebot.matcher import Matcher from nonebot.message import run_postprocessor from nonebot.adapters import Bot, Event import ATRI from ATRI.utils.apscheduler import scheduler from .data_source import Console from .drivers import register_route driver = ATRI.driver() @driver.on_bot_connect async def _connect(bot): Console().store_connect_stat(True) @driver.on_bot_disconnect async def _disconnect(bot): Console().store_connect_stat(False) msg_freq = 0 health_freq = 0 error_freq = 0 record_msg = Console().on_message(block=False) @record_msg.handle() async def _record_msg(bot: Bot, event: Event): global msg_freq msg_freq += 1 @run_postprocessor # type: ignore async def _record_is_error( matcher: Matcher, exception: Optional[Exception], bot: Bot, event: Event, state: T_State, ): global health_freq, error_freq if matcher.type != "message": if not exception: health_freq += 1 else: error_freq += 1 @scheduler.scheduled_job("interval", minutes=1) async def _record_data(): global msg_freq, health_freq, error_freq now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") data = { "time": now_time, "freq_data": {"msg": msg_freq, "health": health_freq, "error": error_freq}, } Console().record_data(data) msg_freq, health_freq, error_freq = 0, 0, 0 def init(): register_route() init()