node-karin 0.3.9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/defSet/config.yaml +11 -0
- package/lib/adapter/input/index.d.ts +63 -0
- package/lib/adapter/input/index.js +188 -0
- package/lib/adapter/onebot/onebot11.d.ts +12 -138
- package/lib/adapter/onebot/onebot11.js +70 -50
- package/lib/core/index.d.ts +1 -0
- package/lib/core/index.js +1 -0
- package/lib/core/karin.d.ts +45 -4
- package/lib/core/karin.js +52 -1
- package/lib/core/listener.js +6 -2
- package/lib/core/plugin.app.d.ts +4 -1
- package/lib/core/plugin.app.js +3 -3
- package/lib/core/plugin.d.ts +8 -2
- package/lib/core/plugin.loader.d.ts +7 -0
- package/lib/core/plugin.loader.js +49 -12
- package/lib/core/server.js +26 -0
- package/lib/db/index.d.ts +2 -4
- package/lib/db/index.js +2 -4
- package/lib/db/level.d.ts +1 -0
- package/lib/db/level.js +1 -0
- package/lib/db/redis.d.ts +2 -41
- package/lib/db/redis.js +2 -3
- package/lib/event/event.d.ts +7 -3
- package/lib/event/event.handler.d.ts +7 -6
- package/lib/event/event.handler.js +6 -1
- package/lib/event/event.js +6 -1
- package/lib/event/index.js +2 -2
- package/lib/event/message.handler.d.ts +3 -3
- package/lib/event/message.handler.js +8 -11
- package/lib/event/notice.d.ts +4 -4
- package/lib/event/notice.handler.d.ts +17 -0
- package/lib/event/notice.handler.js +203 -0
- package/lib/event/request.d.ts +4 -4
- package/lib/event/request.handler.d.ts +17 -0
- package/lib/event/request.handler.js +109 -0
- package/lib/event/request.js +1 -0
- package/lib/event/review.handler.js +12 -24
- package/lib/index.d.ts +2 -1
- package/lib/types/adapter.d.ts +3 -2
- package/lib/types/api.d.ts +295 -0
- package/lib/types/api.js +1 -0
- package/lib/types/config.d.ts +21 -0
- package/lib/types/event.d.ts +127 -241
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/plugin.d.ts +4 -4
- package/lib/utils/button.d.ts +2 -2
- package/lib/utils/common.d.ts +5 -6
- package/lib/utils/common.js +3 -4
- package/lib/utils/config.d.ts +5 -2
- package/lib/utils/config.js +43 -17
- package/lib/utils/handler.d.ts +5 -12
- package/lib/utils/handler.js +3 -1
- package/lib/utils/yamlEditor.d.ts +1 -1
- package/package.json +4 -3
- package/lib/utils/kritor-proto.d.ts +0 -1
|
@@ -62,13 +62,11 @@ export const review = new (class Handler {
|
|
|
62
62
|
this.GroupEnable = e => {
|
|
63
63
|
/** 白名单不为空 */
|
|
64
64
|
if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
|
|
65
|
-
|
|
66
|
-
return this.Config.WhiteList.groups.includes(group_id)
|
|
65
|
+
return this.Config.WhiteList.groups.includes(String(e.group_id))
|
|
67
66
|
}
|
|
68
67
|
/** 白名单为空 检查黑名单是否为空 */
|
|
69
68
|
if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
|
|
70
|
-
|
|
71
|
-
return !this.Config.BlackList.groups.includes(group_id)
|
|
69
|
+
return !this.Config.BlackList.groups.includes(String(e.group_id))
|
|
72
70
|
}
|
|
73
71
|
/** 黑白名单都为空 */
|
|
74
72
|
return true
|
|
@@ -79,8 +77,7 @@ export const review = new (class Handler {
|
|
|
79
77
|
if (this.App.WhiteList.groups) {
|
|
80
78
|
this.GroupEnable = e => {
|
|
81
79
|
if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
|
|
82
|
-
|
|
83
|
-
return this.Config.WhiteList.groups.includes(group_id)
|
|
80
|
+
return this.Config.WhiteList.groups.includes(String(e.group_id))
|
|
84
81
|
}
|
|
85
82
|
return true
|
|
86
83
|
}
|
|
@@ -90,8 +87,7 @@ export const review = new (class Handler {
|
|
|
90
87
|
if (this.App.BlackList.groups) {
|
|
91
88
|
this.GroupEnable = e => {
|
|
92
89
|
if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
|
|
93
|
-
|
|
94
|
-
return !this.Config.BlackList.groups.includes(group_id)
|
|
90
|
+
return !this.Config.BlackList.groups.includes(String(e.group_id))
|
|
95
91
|
}
|
|
96
92
|
return true
|
|
97
93
|
}
|
|
@@ -110,13 +106,11 @@ export const review = new (class Handler {
|
|
|
110
106
|
this.UserEnable = e => {
|
|
111
107
|
/** 白名单不为空 */
|
|
112
108
|
if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
|
|
113
|
-
|
|
114
|
-
return this.Config.WhiteList.users.includes(user_id)
|
|
109
|
+
return this.Config.WhiteList.users.includes(String(e.user_id))
|
|
115
110
|
}
|
|
116
111
|
/** 白名单为空 检查黑名单是否为空 */
|
|
117
112
|
if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
|
|
118
|
-
|
|
119
|
-
return !this.Config.BlackList.users.includes(user_id)
|
|
113
|
+
return !this.Config.BlackList.users.includes(String(e.user_id))
|
|
120
114
|
}
|
|
121
115
|
/** 黑白名单都为空 */
|
|
122
116
|
return true
|
|
@@ -127,8 +121,7 @@ export const review = new (class Handler {
|
|
|
127
121
|
if (this.App.WhiteList.users) {
|
|
128
122
|
this.UserEnable = e => {
|
|
129
123
|
if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
|
|
130
|
-
|
|
131
|
-
return this.Config.WhiteList.users.includes(user_id)
|
|
124
|
+
return this.Config.WhiteList.users.includes(String(e.user_id))
|
|
132
125
|
}
|
|
133
126
|
return true
|
|
134
127
|
}
|
|
@@ -138,8 +131,7 @@ export const review = new (class Handler {
|
|
|
138
131
|
if (this.App.BlackList.users) {
|
|
139
132
|
this.UserEnable = e => {
|
|
140
133
|
if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
|
|
141
|
-
|
|
142
|
-
return !this.Config.BlackList.users.includes(user_id)
|
|
134
|
+
return !this.Config.BlackList.users.includes(String(e.user_id))
|
|
143
135
|
}
|
|
144
136
|
return true
|
|
145
137
|
}
|
|
@@ -158,13 +150,11 @@ export const review = new (class Handler {
|
|
|
158
150
|
this.GroupMsgPrint = e => {
|
|
159
151
|
/** 白名单不为空 */
|
|
160
152
|
if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
|
|
161
|
-
|
|
162
|
-
return this.Config.WhiteList.GroupMsgLog.includes(group_id)
|
|
153
|
+
return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
|
|
163
154
|
}
|
|
164
155
|
/** 白名单为空 检查黑名单是否为空 */
|
|
165
156
|
if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
|
|
166
|
-
|
|
167
|
-
return !this.Config.BlackList.GroupMsgLog.includes(group_id)
|
|
157
|
+
return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
|
|
168
158
|
}
|
|
169
159
|
/** 黑白名单都为空 */
|
|
170
160
|
return true
|
|
@@ -175,8 +165,7 @@ export const review = new (class Handler {
|
|
|
175
165
|
if (this.App.WhiteList.GroupMsgLog) {
|
|
176
166
|
this.GroupMsgPrint = e => {
|
|
177
167
|
if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
|
|
178
|
-
|
|
179
|
-
return this.Config.WhiteList.GroupMsgLog.includes(group_id)
|
|
168
|
+
return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
|
|
180
169
|
}
|
|
181
170
|
return true
|
|
182
171
|
}
|
|
@@ -186,8 +175,7 @@ export const review = new (class Handler {
|
|
|
186
175
|
if (this.App.BlackList.GroupMsgLog) {
|
|
187
176
|
this.GroupMsgPrint = e => {
|
|
188
177
|
if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
|
|
189
|
-
|
|
190
|
-
return !this.Config.BlackList.GroupMsgLog.includes(group_id)
|
|
178
|
+
return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
|
|
191
179
|
}
|
|
192
180
|
return true
|
|
193
181
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -29,13 +29,14 @@ export declare const Renderer: {
|
|
|
29
29
|
export declare const Cfg: {
|
|
30
30
|
dir: string;
|
|
31
31
|
_path: string;
|
|
32
|
-
|
|
32
|
+
npmCfgDir: string;
|
|
33
33
|
change: Map<string, any>;
|
|
34
34
|
watcher: Map<string, any>;
|
|
35
35
|
review: boolean;
|
|
36
36
|
logger: import("log4js").Logger;
|
|
37
37
|
initCfg(): Promise<void>;
|
|
38
38
|
getPlugins(): string[];
|
|
39
|
+
checkPath(path: string): void;
|
|
39
40
|
dirPath(name: string, plugins: string[]): Promise<void>;
|
|
40
41
|
timeout(type?: "ws" | "grpc"): number;
|
|
41
42
|
readonly redis: import("./types/index.js").Redis;
|
package/lib/types/adapter.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { WebSocket } from 'ws';
|
|
2
2
|
import { IncomingMessage } from 'http';
|
|
3
|
+
import { contact } from './event.js';
|
|
3
4
|
import { KarinElement, KarinNodeElement } from './element.js';
|
|
4
|
-
import {
|
|
5
|
+
import { PushMessageBody, EssenceMessageBody, FriendInfo, GroupInfo, GroupMemberInfo, GroupHonorInfo } from './api.js';
|
|
5
6
|
export interface KarinAdapter {
|
|
6
7
|
/**
|
|
7
8
|
* - 适配器版本信息
|
|
@@ -49,7 +50,7 @@ export interface KarinAdapter {
|
|
|
49
50
|
/**
|
|
50
51
|
* - 适配器名称
|
|
51
52
|
*/
|
|
52
|
-
name: 'ICQQ' | 'OneBot11' | 'OntBot12' | 'Kritor' | string;
|
|
53
|
+
name: 'ICQQ' | 'OneBot11' | 'OntBot12' | 'Kritor' | 'input' | string;
|
|
53
54
|
/**
|
|
54
55
|
* - 适配器类型
|
|
55
56
|
*/
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { contact, Sender, KarinElement } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* - 转发、历史消息返回的结构
|
|
4
|
+
*/
|
|
5
|
+
export interface PushMessageBody {
|
|
6
|
+
/**
|
|
7
|
+
* - 消息发送时间
|
|
8
|
+
*/
|
|
9
|
+
time: number;
|
|
10
|
+
/**
|
|
11
|
+
* - 消息ID
|
|
12
|
+
*/
|
|
13
|
+
message_id: string;
|
|
14
|
+
/**
|
|
15
|
+
* - 消息序列号
|
|
16
|
+
*/
|
|
17
|
+
message_seq: number;
|
|
18
|
+
/**
|
|
19
|
+
* - 消息来源
|
|
20
|
+
*/
|
|
21
|
+
contact: contact;
|
|
22
|
+
/**
|
|
23
|
+
* - 消息发送者
|
|
24
|
+
*/
|
|
25
|
+
sender: Sender;
|
|
26
|
+
/**
|
|
27
|
+
* - 消息元素
|
|
28
|
+
*/
|
|
29
|
+
elements: Array<KarinElement>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* - 精华消息返回的结构
|
|
33
|
+
*/
|
|
34
|
+
export interface EssenceMessageBody {
|
|
35
|
+
/**
|
|
36
|
+
* - 群ID
|
|
37
|
+
*/
|
|
38
|
+
group_id: string;
|
|
39
|
+
/**
|
|
40
|
+
* - 发送者uid
|
|
41
|
+
*/
|
|
42
|
+
sender_uid: string;
|
|
43
|
+
/**
|
|
44
|
+
* - 发送者uin
|
|
45
|
+
*/
|
|
46
|
+
sender_uin: string;
|
|
47
|
+
/**
|
|
48
|
+
* - 发送者昵称
|
|
49
|
+
*/
|
|
50
|
+
sender_nick: string;
|
|
51
|
+
/**
|
|
52
|
+
* - 操作者uid
|
|
53
|
+
*/
|
|
54
|
+
operator_uid: string;
|
|
55
|
+
/**
|
|
56
|
+
* - 操作者uin
|
|
57
|
+
*/
|
|
58
|
+
operator_uin: string;
|
|
59
|
+
/**
|
|
60
|
+
* - 操作者昵称
|
|
61
|
+
*/
|
|
62
|
+
operator_nick: string;
|
|
63
|
+
/**
|
|
64
|
+
* - 操作时间
|
|
65
|
+
*/
|
|
66
|
+
operation_time: number;
|
|
67
|
+
/**
|
|
68
|
+
* - 消息时间
|
|
69
|
+
*/
|
|
70
|
+
message_time: number;
|
|
71
|
+
/**
|
|
72
|
+
* - 消息ID
|
|
73
|
+
*/
|
|
74
|
+
message_id: string;
|
|
75
|
+
/**
|
|
76
|
+
* - 消息序列号
|
|
77
|
+
*/
|
|
78
|
+
message_seq: string;
|
|
79
|
+
/**
|
|
80
|
+
* - 被设置的精华消息元素文本
|
|
81
|
+
*/
|
|
82
|
+
json_elements: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* - QQ好友信息
|
|
86
|
+
*/
|
|
87
|
+
export interface FriendInfo {
|
|
88
|
+
/**
|
|
89
|
+
* - 用户UID
|
|
90
|
+
*/
|
|
91
|
+
uid: string;
|
|
92
|
+
/**
|
|
93
|
+
* - 用户UIN
|
|
94
|
+
*/
|
|
95
|
+
uin: string;
|
|
96
|
+
/**
|
|
97
|
+
* - qid
|
|
98
|
+
*/
|
|
99
|
+
qid: string;
|
|
100
|
+
/**
|
|
101
|
+
* - 名称
|
|
102
|
+
*/
|
|
103
|
+
nick: string;
|
|
104
|
+
/**
|
|
105
|
+
* - 备注
|
|
106
|
+
*/
|
|
107
|
+
remark?: string;
|
|
108
|
+
/**
|
|
109
|
+
* - 用户等级
|
|
110
|
+
*/
|
|
111
|
+
level?: number;
|
|
112
|
+
/**
|
|
113
|
+
* - 生日
|
|
114
|
+
*/
|
|
115
|
+
birthday?: string;
|
|
116
|
+
/**
|
|
117
|
+
* - 登录天数
|
|
118
|
+
*/
|
|
119
|
+
login_day?: number;
|
|
120
|
+
/**
|
|
121
|
+
* - 点赞数
|
|
122
|
+
*/
|
|
123
|
+
vote_cnt?: number;
|
|
124
|
+
/**
|
|
125
|
+
* - 学校是否已核实
|
|
126
|
+
*/
|
|
127
|
+
is_school_verified?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* - 年龄
|
|
130
|
+
* - 拓展字段
|
|
131
|
+
*/
|
|
132
|
+
age?: number;
|
|
133
|
+
/**
|
|
134
|
+
* - 性别
|
|
135
|
+
* - 拓展字段
|
|
136
|
+
*/
|
|
137
|
+
sex?: 'male' | 'female' | 'unknown';
|
|
138
|
+
ext?: {
|
|
139
|
+
/**
|
|
140
|
+
* 大会员
|
|
141
|
+
*/
|
|
142
|
+
big_vip?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* 好莱坞/腾讯视频会员
|
|
145
|
+
*/
|
|
146
|
+
hollywood_vip?: boolean;
|
|
147
|
+
/**
|
|
148
|
+
* QQ会员
|
|
149
|
+
*/
|
|
150
|
+
qq_vip?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* QQ超级会员
|
|
153
|
+
*/
|
|
154
|
+
super_vip?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* 是否已经赞过
|
|
157
|
+
*/
|
|
158
|
+
voted?: boolean;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* - QQ群信息
|
|
163
|
+
*/
|
|
164
|
+
export interface GroupInfo {
|
|
165
|
+
/**
|
|
166
|
+
* - 群ID
|
|
167
|
+
*/
|
|
168
|
+
group_id: string;
|
|
169
|
+
/**
|
|
170
|
+
* - 群名称
|
|
171
|
+
*/
|
|
172
|
+
group_name: string;
|
|
173
|
+
/**
|
|
174
|
+
* - 群备注
|
|
175
|
+
*/
|
|
176
|
+
group_remark?: string;
|
|
177
|
+
/**
|
|
178
|
+
* - 群主UID
|
|
179
|
+
*/
|
|
180
|
+
owner: string;
|
|
181
|
+
/**
|
|
182
|
+
* - 群管理员UID列表
|
|
183
|
+
*/
|
|
184
|
+
admins: Array<string>;
|
|
185
|
+
/**
|
|
186
|
+
* - 最大成员数
|
|
187
|
+
*/
|
|
188
|
+
max_member_count: number;
|
|
189
|
+
/**
|
|
190
|
+
* - 当前成员数
|
|
191
|
+
*/
|
|
192
|
+
member_count: number;
|
|
193
|
+
/**
|
|
194
|
+
* - 群UIN
|
|
195
|
+
*/
|
|
196
|
+
group_uin?: string;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* - 群成员信息
|
|
200
|
+
*/
|
|
201
|
+
export interface GroupMemberInfo {
|
|
202
|
+
/**
|
|
203
|
+
* - 用户UID
|
|
204
|
+
*/
|
|
205
|
+
uid: string;
|
|
206
|
+
/**
|
|
207
|
+
* - 用户UIN
|
|
208
|
+
*/
|
|
209
|
+
uin: string;
|
|
210
|
+
/**
|
|
211
|
+
* - 用户昵称
|
|
212
|
+
*/
|
|
213
|
+
nick: string;
|
|
214
|
+
/**
|
|
215
|
+
* - 年龄
|
|
216
|
+
*/
|
|
217
|
+
age: number;
|
|
218
|
+
/**
|
|
219
|
+
* - 群内头衔
|
|
220
|
+
*/
|
|
221
|
+
unique_title: string;
|
|
222
|
+
/**
|
|
223
|
+
* - 群内头衔过期时间
|
|
224
|
+
*/
|
|
225
|
+
unique_title_expire_time: number;
|
|
226
|
+
/**
|
|
227
|
+
* - 群名片
|
|
228
|
+
*/
|
|
229
|
+
card?: string;
|
|
230
|
+
/**
|
|
231
|
+
* - 加群时间
|
|
232
|
+
*/
|
|
233
|
+
join_time?: number;
|
|
234
|
+
/**
|
|
235
|
+
* - 最后活跃时间
|
|
236
|
+
*/
|
|
237
|
+
last_active_time?: number;
|
|
238
|
+
/**
|
|
239
|
+
* - 用户等级
|
|
240
|
+
*/
|
|
241
|
+
level: number;
|
|
242
|
+
/**
|
|
243
|
+
* - 禁言时间
|
|
244
|
+
*/
|
|
245
|
+
shut_up_time: number;
|
|
246
|
+
/**
|
|
247
|
+
* - 距离
|
|
248
|
+
*/
|
|
249
|
+
distance?: number;
|
|
250
|
+
/**
|
|
251
|
+
* - 荣誉列表
|
|
252
|
+
*/
|
|
253
|
+
honors?: Array<number>;
|
|
254
|
+
/**
|
|
255
|
+
* - 是否好友
|
|
256
|
+
*/
|
|
257
|
+
unfriendly?: boolean;
|
|
258
|
+
/**
|
|
259
|
+
* - 是否可修改群名片
|
|
260
|
+
*/
|
|
261
|
+
card_changeable?: boolean;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* 群荣誉信息
|
|
265
|
+
*/
|
|
266
|
+
export interface GroupHonorInfo {
|
|
267
|
+
/**
|
|
268
|
+
* - 荣誉成员uid
|
|
269
|
+
*/
|
|
270
|
+
uid: string;
|
|
271
|
+
/**
|
|
272
|
+
* - 荣誉成员uin
|
|
273
|
+
*/
|
|
274
|
+
uin: string;
|
|
275
|
+
/**
|
|
276
|
+
* - 荣誉成员昵称
|
|
277
|
+
*/
|
|
278
|
+
nick: string;
|
|
279
|
+
/**
|
|
280
|
+
* - 荣誉名称
|
|
281
|
+
*/
|
|
282
|
+
honor_name: string;
|
|
283
|
+
/**
|
|
284
|
+
* - 荣誉图标url
|
|
285
|
+
*/
|
|
286
|
+
avatar: string;
|
|
287
|
+
/**
|
|
288
|
+
* - 荣誉id
|
|
289
|
+
*/
|
|
290
|
+
id: number;
|
|
291
|
+
/**
|
|
292
|
+
* - 荣誉描述
|
|
293
|
+
*/
|
|
294
|
+
description: string;
|
|
295
|
+
}
|
package/lib/types/api.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|
package/lib/types/config.d.ts
CHANGED
|
@@ -130,6 +130,27 @@ export interface Config {
|
|
|
130
130
|
* 管理员列表
|
|
131
131
|
*/
|
|
132
132
|
admin: string[];
|
|
133
|
+
/**
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
AdapterInput: {
|
|
137
|
+
/**
|
|
138
|
+
* - 是否开启input适配器
|
|
139
|
+
*/
|
|
140
|
+
enable: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* - 是否将语音、图片、视频消息转为文件 转为文件后可通过url访问
|
|
143
|
+
*/
|
|
144
|
+
msgToFile: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* - url访问token 如果为 AdapterInput 每次启动后会重新生成
|
|
147
|
+
*/
|
|
148
|
+
token: string;
|
|
149
|
+
/**
|
|
150
|
+
* - ip地址
|
|
151
|
+
*/
|
|
152
|
+
ip: string;
|
|
153
|
+
};
|
|
133
154
|
/**
|
|
134
155
|
* 黑名单相关
|
|
135
156
|
*/
|