1- import moment from 'node-karin/moment'
1+ import { info } from '@/root'
2+ import { karin , logger } from 'node-karin'
23import { config } from '@/utils/config'
3- import { EVENT_COUNT , hooks , karin , RECV_MSG , redis , SEND_MSG } from 'node-karin'
4-
5- import type { Contact } from 'node-karin'
4+ import { getMonthStat , getTodayStat , initStat , MB , uptime } from '@/core'
65
76export const status = karin . command ( / ^ # 状 态 $ / , async ( e ) => {
8- const today = moment ( ) . format ( 'YYYY-MM-DD' )
9- const month = moment ( ) . format ( 'YYYY-MM' )
10-
11- const [
12- send ,
13- recv ,
14- event ,
15- sendMonth ,
16- recvMonth ,
17- eventMonth
18- ] = await Promise . all ( [
19- getStat ( `${ SEND_MSG } :${ today } *` ) ,
20- getStat ( `${ RECV_MSG } :${ today } *` ) ,
21- getStat ( `${ EVENT_COUNT } :${ today } *` ) ,
22- getStat ( `${ SEND_MSG } :${ month } *` ) ,
23- getStat ( `${ RECV_MSG } :${ month } *` ) ,
24- getStat ( `${ EVENT_COUNT } :${ month } *` )
25- ] )
7+ const { send, recv, event } = await getTodayStat ( )
8+ const { send : sendMonth , recv : recvMonth , event : eventMonth } = await getMonthStat ( )
269
2710 await e . reply ( [
2811 '------机器人状态------' ,
@@ -42,66 +25,6 @@ export const status = karin.command(/^#状态$/, async (e) => {
4225 return true
4326} , { name : '状态统计' } )
4427
45- /**
46- * 生成存储键
47- * @param contact 联系人
48- * @example
49- * ```ts
50- * friend:<peer>
51- * group:<peer>
52- * guild:<peer>:<subPeer>
53- * direct:<peer>:<subPeer>
54- * ```
55- */
56- const createKey = ( contact : Contact ) => {
57- const { scene, peer, subPeer } = contact
58- return `${ moment ( ) . format ( 'YYYY-MM-DD' ) } :${ scene } :${ peer } ${ subPeer ? `:${ subPeer } ` : '' } `
59- }
60-
61- /**
62- * 获取 Redis 键值统计
63- */
64- const getStat = async ( pattern : string ) => {
65- const keys = await redis . keys ( pattern )
66- const values = await Promise . all ( keys . map ( ( key ) => redis . get ( key ) . then ( Number ) ) )
67- return values . reduce ( ( total , value ) => total + ( value || 0 ) , 0 )
68- }
69-
70- const MB = ( ) => ( process . memoryUsage ( ) . rss / 1024 / 1024 ) . toFixed ( 2 )
71-
72- const uptime = ( ) => {
73- const uptime = process . uptime ( )
74- const day = Math . floor ( uptime / 86400 )
75- const hour = Math . floor ( ( uptime % 86400 ) / 3600 )
76- const minute = Math . floor ( ( uptime % 3600 ) / 60 )
77-
78- return `${ day > 0 ? `${ day } 天` : '' } ${ hour } 小时${ minute } 分钟`
79- }
80-
81- ( ( ) => {
82- if ( ! config ( ) . status ) return
83-
84- hooks . message ( ( event , next ) => {
85- try {
86- redis . incr ( `${ RECV_MSG } :${ createKey ( event . contact ) } ` )
87- } finally {
88- next ( )
89- }
90- } )
91-
92- hooks . sendMsg . message ( ( contact , _ , __ , next ) => {
93- try {
94- redis . incr ( `${ SEND_MSG } :${ createKey ( contact ) } ` )
95- } finally {
96- next ( )
97- }
98- } )
28+ if ( config ( ) . status ) initStat ( )
9929
100- hooks . eventCall ( ( e , _ , next ) => {
101- try {
102- redis . incr ( `${ EVENT_COUNT } :${ createKey ( e . contact ) } ` )
103- } finally {
104- next ( )
105- }
106- } )
107- } ) ( )
30+ logger . info ( `${ logger . violet ( `[插件:${ info . version } ]` ) } ${ logger . green ( info . pkg . name ) } 初始化完成~` )
0 commit comments