mioki 0.5.1 → 0.6.1
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/dist/index.cjs +36 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -5
- package/dist/index.d.mts +8 -5
- package/dist/index.mjs +35 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EventMap, GroupMessageEvent, LogLevel, MessageEvent, NapCat, PrivateMessageEvent, RecvElement, RecvImageElement, Sendable } from "napcat-sdk";
|
|
1
|
+
import { EventMap, GroupMessageEvent, LogLevel, Logger, MessageEvent, NapCat, PrivateMessageEvent, RecvElement, RecvImageElement, Sendable } from "napcat-sdk";
|
|
3
2
|
import { Low } from "lowdb";
|
|
4
3
|
import { Jiti } from "jiti";
|
|
5
4
|
import prettyMs from "pretty-ms";
|
|
@@ -18,12 +17,12 @@ import { ScheduledTask, TaskContext } from "node-cron";
|
|
|
18
17
|
//#region rolldown:runtime
|
|
19
18
|
//#endregion
|
|
20
19
|
//#region src/logger.d.ts
|
|
21
|
-
declare const logger:
|
|
20
|
+
declare const logger: Logger;
|
|
22
21
|
/**
|
|
23
22
|
* 获取日志文件名
|
|
24
23
|
*/
|
|
25
24
|
declare function getLogFilePath(type?: string): string;
|
|
26
|
-
declare function getMiokiLogger(level: LogLevel):
|
|
25
|
+
declare function getMiokiLogger(level: LogLevel): Logger;
|
|
27
26
|
//#endregion
|
|
28
27
|
//#region src/start.d.ts
|
|
29
28
|
interface StartOptions {
|
|
@@ -524,6 +523,8 @@ interface MiokiStatus {
|
|
|
524
523
|
bot: {
|
|
525
524
|
uin: number;
|
|
526
525
|
nickname: string;
|
|
526
|
+
friends: number;
|
|
527
|
+
groups: number;
|
|
527
528
|
};
|
|
528
529
|
plugins: {
|
|
529
530
|
enabled: number;
|
|
@@ -531,6 +532,8 @@ interface MiokiStatus {
|
|
|
531
532
|
};
|
|
532
533
|
stats: {
|
|
533
534
|
uptime: number;
|
|
535
|
+
send: number;
|
|
536
|
+
receive: number;
|
|
534
537
|
};
|
|
535
538
|
versions: {
|
|
536
539
|
node: string;
|
|
@@ -614,7 +617,7 @@ interface MiokiContext extends Services, Configs, Utils, RemoveBotParam<Actions>
|
|
|
614
617
|
/** 待清理的函数集合,在插件卸载时会被调用 */
|
|
615
618
|
clears: Set<(() => any) | null | undefined>;
|
|
616
619
|
/** 日志器 */
|
|
617
|
-
logger:
|
|
620
|
+
logger: Logger;
|
|
618
621
|
}
|
|
619
622
|
declare const runtimePlugins: Map<string, {
|
|
620
623
|
name: string;
|
package/dist/index.d.mts
CHANGED
|
@@ -5,23 +5,22 @@ import { BinaryLike, BinaryToTextEncoding } from "node:crypto";
|
|
|
5
5
|
import { Low } from "lowdb";
|
|
6
6
|
import { Jiti } from "jiti";
|
|
7
7
|
import { string2argv } from "string2argv";
|
|
8
|
-
import { EventMap, GroupMessageEvent, LogLevel, MessageEvent, NapCat, PrivateMessageEvent, RecvElement, RecvImageElement, Sendable } from "napcat-sdk";
|
|
8
|
+
import { EventMap, GroupMessageEvent, LogLevel, Logger, MessageEvent, NapCat, PrivateMessageEvent, RecvElement, RecvImageElement, Sendable } from "napcat-sdk";
|
|
9
9
|
import prettyMs from "pretty-ms";
|
|
10
10
|
import { filesize } from "filesize";
|
|
11
11
|
import dayjs from "dayjs";
|
|
12
12
|
import dedent from "dedent";
|
|
13
13
|
import { box, colorize, colors, stripAnsi } from "consola/utils";
|
|
14
14
|
import systemInfo from "systeminformation";
|
|
15
|
-
import { ConsolaInstance } from "consola/core";
|
|
16
15
|
import { ScheduledTask, TaskContext } from "node-cron";
|
|
17
16
|
|
|
18
17
|
//#region src/logger.d.ts
|
|
19
|
-
declare const logger:
|
|
18
|
+
declare const logger: Logger;
|
|
20
19
|
/**
|
|
21
20
|
* 获取日志文件名
|
|
22
21
|
*/
|
|
23
22
|
declare function getLogFilePath(type?: string): string;
|
|
24
|
-
declare function getMiokiLogger(level: LogLevel):
|
|
23
|
+
declare function getMiokiLogger(level: LogLevel): Logger;
|
|
25
24
|
//#endregion
|
|
26
25
|
//#region src/start.d.ts
|
|
27
26
|
interface StartOptions {
|
|
@@ -522,6 +521,8 @@ interface MiokiStatus {
|
|
|
522
521
|
bot: {
|
|
523
522
|
uin: number;
|
|
524
523
|
nickname: string;
|
|
524
|
+
friends: number;
|
|
525
|
+
groups: number;
|
|
525
526
|
};
|
|
526
527
|
plugins: {
|
|
527
528
|
enabled: number;
|
|
@@ -529,6 +530,8 @@ interface MiokiStatus {
|
|
|
529
530
|
};
|
|
530
531
|
stats: {
|
|
531
532
|
uptime: number;
|
|
533
|
+
send: number;
|
|
534
|
+
receive: number;
|
|
532
535
|
};
|
|
533
536
|
versions: {
|
|
534
537
|
node: string;
|
|
@@ -612,7 +615,7 @@ interface MiokiContext extends Services, Configs, Utils, RemoveBotParam<Actions>
|
|
|
612
615
|
/** 待清理的函数集合,在插件卸载时会被调用 */
|
|
613
616
|
clears: Set<(() => any) | null | undefined>;
|
|
614
617
|
/** 日志器 */
|
|
615
|
-
logger:
|
|
618
|
+
logger: Logger;
|
|
616
619
|
}
|
|
617
620
|
declare const runtimePlugins: Map<string, {
|
|
618
621
|
name: string;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { t as __export } from "./chunk-C6wwvPpM.mjs";
|
|
2
2
|
import fs, { default as fs$1 } from "node:fs";
|
|
3
|
+
import util from "node:util";
|
|
3
4
|
import path, { default as path$1 } from "node:path";
|
|
4
5
|
import mri, { default as mri$1 } from "mri";
|
|
5
6
|
import crypto from "node:crypto";
|
|
@@ -858,14 +859,21 @@ function getMiokiLogger(level) {
|
|
|
858
859
|
level: LogLevels[level],
|
|
859
860
|
defaults: { tag: "mioki" },
|
|
860
861
|
reporters: [{ log: (logObj) => {
|
|
861
|
-
const message = stripAnsi$1(logObj.message || logObj.args?.
|
|
862
|
+
const message = stripAnsi$1(logObj.message || logObj.args?.map((e) => typeof e === "string" ? e : util.inspect(e, {
|
|
863
|
+
colors: true,
|
|
864
|
+
depth: null
|
|
865
|
+
})).join(" ") || "");
|
|
862
866
|
const line = `${`[${logObj.date.toISOString()}] [${LEVEL_MAP[logObj.level].name}] ${logObj.tag ? `[${logObj.tag}] ` : ""}`}${message}`;
|
|
863
867
|
fs$1.appendFileSync(logFile, line + "\n");
|
|
864
868
|
} }, { log: (logObj) => {
|
|
865
|
-
const
|
|
866
|
-
|
|
867
|
-
|
|
869
|
+
const line = `${colors$1.gray(`[${logObj.date.toLocaleTimeString("zh-CN")}]`)} ${colors$1.bold(colors$1[LEVEL_MAP[logObj.level].color](LEVEL_MAP[logObj.level].name))} ${logObj.tag ? colors$1.dim(`[${logObj.tag}] `) : ""} ${logObj.message || logObj.args?.map((e) => typeof e === "string" ? e : util.inspect(e, {
|
|
870
|
+
colors: true,
|
|
871
|
+
depth: null
|
|
872
|
+
})).join(" ") || ""}`;
|
|
873
|
+
if (logObj.level <= LogLevels["error"]) console.error(line);
|
|
868
874
|
else if (logObj.level === LogLevels["warn"]) console.warn(line);
|
|
875
|
+
else if (logObj.level === LogLevels["log"]) console.log(line);
|
|
876
|
+
else if (logObj.level === LogLevels["info"]) console.info(line);
|
|
869
877
|
else console.debug(line);
|
|
870
878
|
} }],
|
|
871
879
|
formatOptions: {
|
|
@@ -878,7 +886,7 @@ function getMiokiLogger(level) {
|
|
|
878
886
|
|
|
879
887
|
//#endregion
|
|
880
888
|
//#region package.json
|
|
881
|
-
var version = "0.
|
|
889
|
+
var version = "0.6.1";
|
|
882
890
|
|
|
883
891
|
//#endregion
|
|
884
892
|
//#region src/actions.ts
|
|
@@ -1249,9 +1257,9 @@ async function enablePlugin(bot, plugin, type = "external") {
|
|
|
1249
1257
|
});
|
|
1250
1258
|
const end = hrtime.bigint();
|
|
1251
1259
|
const time = Math.round(Number(end - start$1)) / 1e6;
|
|
1252
|
-
bot.logger.info(
|
|
1260
|
+
bot.logger.info(`- 启用插件 ${colors$1.yellow(`[${typeDesc}]`)} ${colors$1.yellow(`${name}@${version$1}`)} => 耗时 ${colors$1.green(time.toFixed(2))} 毫秒`);
|
|
1253
1261
|
} catch (e) {
|
|
1254
|
-
throw new Error(`启用插件 ${colors$1.yellow(`[${typeDesc}]`)}${colors$1.yellow(`${name}@${version$1}`)} 失败: ${e?.message}`);
|
|
1262
|
+
throw new Error(`启用插件 ${colors$1.yellow(`[${typeDesc}]`)} ${colors$1.yellow(`${name}@${version$1}`)} 失败: ${e?.message}`);
|
|
1255
1263
|
}
|
|
1256
1264
|
return plugin;
|
|
1257
1265
|
}
|
|
@@ -1280,10 +1288,12 @@ async function getMiokiStatus(bot) {
|
|
|
1280
1288
|
const osArch = os.arch();
|
|
1281
1289
|
const isInUnix = ["Linux", "Darwin"].includes(osType);
|
|
1282
1290
|
const arch = ArchMap[osArch] || osArch;
|
|
1283
|
-
const [osInfo, localPlugins, versionInfo] = await Promise.all([
|
|
1291
|
+
const [osInfo, localPlugins, versionInfo, friendList, groupList] = await Promise.all([
|
|
1284
1292
|
systemInfo.osInfo(),
|
|
1285
1293
|
findLocalPlugins(),
|
|
1286
|
-
bot.getVersionInfo()
|
|
1294
|
+
bot.getVersionInfo(),
|
|
1295
|
+
bot.getFriendList(),
|
|
1296
|
+
bot.getGroupList()
|
|
1287
1297
|
]);
|
|
1288
1298
|
const pluginCount = localPlugins.length + BUILTIN_PLUGINS.length;
|
|
1289
1299
|
const system = isInUnix ? {
|
|
@@ -1301,13 +1311,19 @@ async function getMiokiStatus(bot) {
|
|
|
1301
1311
|
return {
|
|
1302
1312
|
bot: {
|
|
1303
1313
|
uin: bot.uin,
|
|
1304
|
-
nickname: bot.nickname
|
|
1314
|
+
nickname: bot.nickname,
|
|
1315
|
+
friends: friendList.length,
|
|
1316
|
+
groups: groupList.length
|
|
1305
1317
|
},
|
|
1306
1318
|
plugins: {
|
|
1307
1319
|
enabled: runtimePlugins.size,
|
|
1308
1320
|
total: pluginCount
|
|
1309
1321
|
},
|
|
1310
|
-
stats: {
|
|
1322
|
+
stats: {
|
|
1323
|
+
uptime: process.uptime() * 1e3,
|
|
1324
|
+
send: bot.stat.send.group + bot.stat.send.private,
|
|
1325
|
+
receive: bot.stat.recv.group + bot.stat.recv.private
|
|
1326
|
+
},
|
|
1311
1327
|
versions: {
|
|
1312
1328
|
node: nodeVersion,
|
|
1313
1329
|
mioki: version,
|
|
@@ -1348,7 +1364,9 @@ async function getMiokiStatusStr(client) {
|
|
|
1348
1364
|
return `
|
|
1349
1365
|
👤 ${bot.nickname}
|
|
1350
1366
|
🆔 ${bot.uin}
|
|
1367
|
+
📋 ${localNum(bot.friends)} 好友 / ${localNum(bot.groups)} 群
|
|
1351
1368
|
🧩 启用了 ${localNum(plugins.enabled)} 个插件,共 ${localNum(plugins.total)} 个
|
|
1369
|
+
📮 收 ${localNum(stats.receive)} 条,发 ${localNum(stats.send)} 条
|
|
1352
1370
|
🚀 ${filesize(memory.rss.used, { round: 1 })}/${memory.percent}%
|
|
1353
1371
|
⏳ 已运行 ${pm(stats.uptime, {
|
|
1354
1372
|
hideYear: true,
|
|
@@ -1682,7 +1700,7 @@ const BUILTIN_PLUGINS = [core_default];
|
|
|
1682
1700
|
//#region src/start.ts
|
|
1683
1701
|
async function start(options = {}) {
|
|
1684
1702
|
const { cwd = process.cwd() } = options;
|
|
1685
|
-
if (cwd !== BOT_CWD.value) updateBotCWD(cwd);
|
|
1703
|
+
if (cwd !== BOT_CWD.value) updateBotCWD(path$1.resolve(cwd));
|
|
1686
1704
|
process.title = `mioki v${version}`;
|
|
1687
1705
|
const plugin_dir = getAbsPluginDir();
|
|
1688
1706
|
logger.info(colors$1.dim("=".repeat(40)));
|
|
@@ -1699,7 +1717,7 @@ async function start(options = {}) {
|
|
|
1699
1717
|
logger.info(`${colors$1.dim("配置文件: ")}${colors$1.blue(`${BOT_CWD.value}/package.json`)}`);
|
|
1700
1718
|
logger.info(colors$1.dim("=".repeat(40)));
|
|
1701
1719
|
const { protocol = "ws", port = 6700, host = "localhost", token } = botConfig.napcat || {};
|
|
1702
|
-
logger.info(
|
|
1720
|
+
logger.info(`>>> 正在连接 NapCat 实例: ${colors$1.green(`${protocol}://${host}:${port}`)}`);
|
|
1703
1721
|
const napcat = new NapCat({
|
|
1704
1722
|
token,
|
|
1705
1723
|
protocol,
|
|
@@ -1709,9 +1727,11 @@ async function start(options = {}) {
|
|
|
1709
1727
|
});
|
|
1710
1728
|
napcat.on("ws.close", () => {
|
|
1711
1729
|
logger.error("连接已关闭,请确保 NapCat 实例正常运行及 token 配置正确");
|
|
1730
|
+
process.exit(1);
|
|
1712
1731
|
});
|
|
1713
1732
|
napcat.on("napcat.connected", async ({ user_id, nickname, app_name, app_version }) => {
|
|
1714
|
-
logger.info(`已连接到 NapCat 实例: ${colors$1.green(`${app_name}-v${app_version}
|
|
1733
|
+
logger.info(`已连接到 NapCat 实例: ${colors$1.green(`${app_name}-v${app_version} ${nickname}(${user_id})`)}`);
|
|
1734
|
+
process.title = `mioki v${version} ${app_name}-v${app_version}-${user_id}`;
|
|
1715
1735
|
let lastNoticeTime = 0;
|
|
1716
1736
|
process.on("uncaughtException", async (err) => {
|
|
1717
1737
|
const msg = stringifyError(err);
|
|
@@ -1775,7 +1795,7 @@ async function start(options = {}) {
|
|
|
1775
1795
|
const sortedGroups = Array.from(pluginGroups.entries()).toSorted(([a], [b]) => a - b);
|
|
1776
1796
|
const failedEnablePlugins = [];
|
|
1777
1797
|
try {
|
|
1778
|
-
napcat.logger.info(
|
|
1798
|
+
napcat.logger.info(`>>> 加载 mioki 内置插件: ${BUILTIN_PLUGINS.map((p) => colors$1.cyan(p.name)).join(", ")}`);
|
|
1779
1799
|
await Promise.all(BUILTIN_PLUGINS.map((p) => enablePlugin(napcat, p, "builtin")));
|
|
1780
1800
|
for (const [_, plugins$1] of sortedGroups) await Promise.all(plugins$1.map(async (p) => {
|
|
1781
1801
|
try {
|