llonebot-dist 7.12.8 → 7.12.10
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/llbot.js +130 -93
- package/llbot.js.map +1 -1
- package/package.json +1 -1
- package/webui/assets/index-D-XIyK1s.css +2 -0
- package/webui/assets/{index-BH8OmAlQ.js → index-I5R6DF_e.js} +10 -10
- package/webui/index.html +2 -2
- package//346/233/264/346/226/260/346/227/245/345/277/227.txt +16 -0
- package/webui/assets/index-BvJQpqZQ.css +0 -2
package/llbot.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import * as path$4 from "node:path";
|
|
3
3
|
import path, { dirname, join } from "node:path";
|
|
4
|
-
import
|
|
5
|
-
import fs
|
|
6
|
-
import * as fs$
|
|
7
|
-
import fs$
|
|
4
|
+
import fsp, { access, copyFile, mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
|
|
5
|
+
import fs, { existsSync } from "fs";
|
|
6
|
+
import * as fs$5 from "node:fs";
|
|
7
|
+
import fs$1, { appendFile, appendFileSync, createReadStream, existsSync as existsSync$1, mkdirSync, promises, stat as stat$1, statSync, watch } from "node:fs";
|
|
8
8
|
import os from "node:os";
|
|
9
9
|
import { Binary, Time, camelize, clone, deduplicate, deepEqual, defineProperty, difference, filterKeys, hyphenate, is, isNonNullable, isNullable, isPlainObject, makeArray, mapValues, noop, omit, pick, remove, valueMap } from "cosmokit";
|
|
10
10
|
import { Exporter, Factory } from "reggol";
|
|
@@ -3973,7 +3973,7 @@ var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
3973
3973
|
//#endregion
|
|
3974
3974
|
//#region node_modules/qrcode/lib/renderer/png.js
|
|
3975
3975
|
var require_png = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
3976
|
-
var fs$
|
|
3976
|
+
var fs$10 = __require("fs");
|
|
3977
3977
|
var PNG = require_png$1().PNG;
|
|
3978
3978
|
var Utils = require_utils$1();
|
|
3979
3979
|
exports.render = function render(qrData, options) {
|
|
@@ -4025,7 +4025,7 @@ var require_png = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
4025
4025
|
called = true;
|
|
4026
4026
|
cb.apply(null, args);
|
|
4027
4027
|
};
|
|
4028
|
-
const stream = fs$
|
|
4028
|
+
const stream = fs$10.createWriteStream(path);
|
|
4029
4029
|
stream.on("error", done);
|
|
4030
4030
|
stream.on("close", done);
|
|
4031
4031
|
exports.renderToFileStream(stream, qrData, options);
|
|
@@ -6624,7 +6624,7 @@ async function logSummaryMessage(ctx, message) {
|
|
|
6624
6624
|
var require_windows = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6625
6625
|
module.exports = isexe;
|
|
6626
6626
|
isexe.sync = sync;
|
|
6627
|
-
var fs$
|
|
6627
|
+
var fs$9 = __require("fs");
|
|
6628
6628
|
function checkPathExt(path, options) {
|
|
6629
6629
|
var pathext = options.pathExt !== void 0 ? options.pathExt : process.env.PATHEXT;
|
|
6630
6630
|
if (!pathext) return true;
|
|
@@ -6641,12 +6641,12 @@ var require_windows = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
6641
6641
|
return checkPathExt(path, options);
|
|
6642
6642
|
}
|
|
6643
6643
|
function isexe(path, options, cb) {
|
|
6644
|
-
fs$
|
|
6644
|
+
fs$9.stat(path, function(er, stat) {
|
|
6645
6645
|
cb(er, er ? false : checkStat(stat, path, options));
|
|
6646
6646
|
});
|
|
6647
6647
|
}
|
|
6648
6648
|
function sync(path, options) {
|
|
6649
|
-
return checkStat(fs$
|
|
6649
|
+
return checkStat(fs$9.statSync(path), path, options);
|
|
6650
6650
|
}
|
|
6651
6651
|
}));
|
|
6652
6652
|
//#endregion
|
|
@@ -6654,14 +6654,14 @@ var require_windows = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
6654
6654
|
var require_mode = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6655
6655
|
module.exports = isexe;
|
|
6656
6656
|
isexe.sync = sync;
|
|
6657
|
-
var fs$
|
|
6657
|
+
var fs$8 = __require("fs");
|
|
6658
6658
|
function isexe(path, options, cb) {
|
|
6659
|
-
fs$
|
|
6659
|
+
fs$8.stat(path, function(er, stat) {
|
|
6660
6660
|
cb(er, er ? false : checkStat(stat, options));
|
|
6661
6661
|
});
|
|
6662
6662
|
}
|
|
6663
6663
|
function sync(path, options) {
|
|
6664
|
-
return checkStat(fs$
|
|
6664
|
+
return checkStat(fs$8.statSync(path), options);
|
|
6665
6665
|
}
|
|
6666
6666
|
function checkStat(stat, options) {
|
|
6667
6667
|
return stat.isFile() && checkMode(stat, options);
|
|
@@ -9153,7 +9153,7 @@ var require_processor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9153
9153
|
//#endregion
|
|
9154
9154
|
//#region node_modules/fluent-ffmpeg/lib/capabilities.js
|
|
9155
9155
|
var require_capabilities = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
9156
|
-
var fs$
|
|
9156
|
+
var fs$7 = __require("fs");
|
|
9157
9157
|
var path$7 = __require("path");
|
|
9158
9158
|
var async = require_async();
|
|
9159
9159
|
var utils = require_utils();
|
|
@@ -9229,7 +9229,7 @@ var require_capabilities = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9229
9229
|
proto._getFfmpegPath = function(callback) {
|
|
9230
9230
|
if ("ffmpegPath" in cache) return callback(null, cache.ffmpegPath);
|
|
9231
9231
|
async.waterfall([function(cb) {
|
|
9232
|
-
if (process.env.FFMPEG_PATH) fs$
|
|
9232
|
+
if (process.env.FFMPEG_PATH) fs$7.exists(process.env.FFMPEG_PATH, function(exists) {
|
|
9233
9233
|
if (exists) cb(null, process.env.FFMPEG_PATH);
|
|
9234
9234
|
else cb(null, "");
|
|
9235
9235
|
});
|
|
@@ -9260,7 +9260,7 @@ var require_capabilities = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9260
9260
|
if ("ffprobePath" in cache) return callback(null, cache.ffprobePath);
|
|
9261
9261
|
async.waterfall([
|
|
9262
9262
|
function(cb) {
|
|
9263
|
-
if (process.env.FFPROBE_PATH) fs$
|
|
9263
|
+
if (process.env.FFPROBE_PATH) fs$7.exists(process.env.FFPROBE_PATH, function(exists) {
|
|
9264
9264
|
cb(null, exists ? process.env.FFPROBE_PATH : "");
|
|
9265
9265
|
});
|
|
9266
9266
|
else cb(null, "");
|
|
@@ -9278,7 +9278,7 @@ var require_capabilities = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9278
9278
|
else if (ffmpeg.length) {
|
|
9279
9279
|
var name = utils.isWindows ? "ffprobe.exe" : "ffprobe";
|
|
9280
9280
|
var ffprobe = path$7.join(path$7.dirname(ffmpeg), name);
|
|
9281
|
-
fs$
|
|
9281
|
+
fs$7.exists(ffprobe, function(exists) {
|
|
9282
9282
|
cb(null, exists ? ffprobe : "");
|
|
9283
9283
|
});
|
|
9284
9284
|
} else cb(null, "");
|
|
@@ -9303,14 +9303,14 @@ var require_capabilities = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9303
9303
|
if ("flvtoolPath" in cache) return callback(null, cache.flvtoolPath);
|
|
9304
9304
|
async.waterfall([
|
|
9305
9305
|
function(cb) {
|
|
9306
|
-
if (process.env.FLVMETA_PATH) fs$
|
|
9306
|
+
if (process.env.FLVMETA_PATH) fs$7.exists(process.env.FLVMETA_PATH, function(exists) {
|
|
9307
9307
|
cb(null, exists ? process.env.FLVMETA_PATH : "");
|
|
9308
9308
|
});
|
|
9309
9309
|
else cb(null, "");
|
|
9310
9310
|
},
|
|
9311
9311
|
function(flvtool, cb) {
|
|
9312
9312
|
if (flvtool.length) return cb(null, flvtool);
|
|
9313
|
-
if (process.env.FLVTOOL2_PATH) fs$
|
|
9313
|
+
if (process.env.FLVTOOL2_PATH) fs$7.exists(process.env.FLVTOOL2_PATH, function(exists) {
|
|
9314
9314
|
cb(null, exists ? process.env.FLVTOOL2_PATH : "");
|
|
9315
9315
|
});
|
|
9316
9316
|
else cb(null, "");
|
|
@@ -9815,7 +9815,7 @@ var require_ffprobe = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9815
9815
|
//#endregion
|
|
9816
9816
|
//#region node_modules/fluent-ffmpeg/lib/recipes.js
|
|
9817
9817
|
var require_recipes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
9818
|
-
var fs$
|
|
9818
|
+
var fs$6 = __require("fs");
|
|
9819
9819
|
var path$6 = __require("path");
|
|
9820
9820
|
var PassThrough$4 = __require("stream").PassThrough;
|
|
9821
9821
|
var async = require_async();
|
|
@@ -10021,8 +10021,8 @@ var require_recipes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
10021
10021
|
next(null, filenames);
|
|
10022
10022
|
},
|
|
10023
10023
|
function createDirectory(filenames, next) {
|
|
10024
|
-
fs$
|
|
10025
|
-
if (!exists) fs$
|
|
10024
|
+
fs$6.exists(config.folder, function(exists) {
|
|
10025
|
+
if (!exists) fs$6.mkdir(config.folder, function(err) {
|
|
10026
10026
|
if (err) next(err);
|
|
10027
10027
|
else next(null, filenames);
|
|
10028
10028
|
});
|
|
@@ -10270,7 +10270,7 @@ function setFFMpegPath(ffmpegPath) {
|
|
|
10270
10270
|
path.join(import.meta.dirname, "ffmpeg.exe"),
|
|
10271
10271
|
process.env["FFMPEG_PATH"] || ""
|
|
10272
10272
|
];
|
|
10273
|
-
for (const p of paths) if (fs$
|
|
10273
|
+
for (const p of paths) if (fs$1.existsSync(p)) {
|
|
10274
10274
|
import_fluent_ffmpeg.default.setFfmpegPath(p);
|
|
10275
10275
|
console.log("set ffmpeg successfully", p);
|
|
10276
10276
|
break;
|
|
@@ -11385,7 +11385,7 @@ var OB11HeartbeatEvent = class extends OB11BaseMetaEvent {
|
|
|
11385
11385
|
};
|
|
11386
11386
|
//#endregion
|
|
11387
11387
|
//#region src/version.ts
|
|
11388
|
-
var version$2 = "7.12.
|
|
11388
|
+
var version$2 = "7.12.10";
|
|
11389
11389
|
//#endregion
|
|
11390
11390
|
//#region node_modules/sift/es5m/index.js
|
|
11391
11391
|
/******************************************************************************
|
|
@@ -17045,7 +17045,7 @@ var processQueue = async () => {
|
|
|
17045
17045
|
const promises = queue.splice(0, concurrency).map(async ({ filePath, resolve, reject }) => {
|
|
17046
17046
|
let handle;
|
|
17047
17047
|
try {
|
|
17048
|
-
handle = await fs$
|
|
17048
|
+
handle = await fs$5.promises.open(path$4.resolve(filePath), "r");
|
|
17049
17049
|
} catch (err) {
|
|
17050
17050
|
return reject(err);
|
|
17051
17051
|
}
|
|
@@ -17092,7 +17092,7 @@ function checkUriType(uri) {
|
|
|
17092
17092
|
if (uri.startsWith("data:")) return { type: FileUriType.DataURL };
|
|
17093
17093
|
if (uri.startsWith("http://") || uri.startsWith("https://")) return { type: FileUriType.RemoteURL };
|
|
17094
17094
|
if (uri.startsWith("file://")) return { type: FileUriType.FileURL };
|
|
17095
|
-
if (fs$
|
|
17095
|
+
if (fs$1.existsSync(uri)) return { type: FileUriType.Path };
|
|
17096
17096
|
return { type: FileUriType.Unknown };
|
|
17097
17097
|
}
|
|
17098
17098
|
async function fetchFile(url, headersInit) {
|
|
@@ -17122,7 +17122,7 @@ async function uri2local(ctx, uri, needExt) {
|
|
|
17122
17122
|
const { type } = checkUriType(uri);
|
|
17123
17123
|
if (type === FileUriType.FileURL) {
|
|
17124
17124
|
const filePath = fileURLToPath(uri);
|
|
17125
|
-
if (!fs$
|
|
17125
|
+
if (!fs$1.existsSync(filePath)) return {
|
|
17126
17126
|
success: false,
|
|
17127
17127
|
errMsg: "路径不存在",
|
|
17128
17128
|
fileName: "",
|
|
@@ -17148,12 +17148,12 @@ async function uri2local(ctx, uri, needExt) {
|
|
|
17148
17148
|
const res = await fetchFile(uri);
|
|
17149
17149
|
let fileName = randomUUID();
|
|
17150
17150
|
let filePath = path.join(TEMP_DIR, fileName);
|
|
17151
|
-
await
|
|
17151
|
+
await fsp.writeFile(filePath, res.data);
|
|
17152
17152
|
if (needExt) {
|
|
17153
17153
|
const ext = (await ctx.ntFileApi.getFileType(filePath)).ext;
|
|
17154
17154
|
fileName += `.${ext}`;
|
|
17155
17155
|
const newPath = `${filePath}.${ext}`;
|
|
17156
|
-
await
|
|
17156
|
+
await fsp.rename(filePath, newPath);
|
|
17157
17157
|
filePath = newPath;
|
|
17158
17158
|
}
|
|
17159
17159
|
return {
|
|
@@ -17176,11 +17176,11 @@ async function uri2local(ctx, uri, needExt) {
|
|
|
17176
17176
|
let filename = randomUUID();
|
|
17177
17177
|
let filePath = path.join(TEMP_DIR, filename);
|
|
17178
17178
|
const base64 = uri.replace(/^base64:\/\//, "");
|
|
17179
|
-
await
|
|
17179
|
+
await fsp.writeFile(filePath, base64, "base64");
|
|
17180
17180
|
if (needExt) {
|
|
17181
17181
|
const ext = (await ctx.ntFileApi.getFileType(filePath)).ext;
|
|
17182
17182
|
filename += `.${ext}`;
|
|
17183
|
-
await
|
|
17183
|
+
await fsp.rename(filePath, `${filePath}.${ext}`);
|
|
17184
17184
|
filePath = `${filePath}.${ext}`;
|
|
17185
17185
|
}
|
|
17186
17186
|
return {
|
|
@@ -17197,11 +17197,11 @@ async function uri2local(ctx, uri, needExt) {
|
|
|
17197
17197
|
let filename = randomUUID();
|
|
17198
17198
|
const [, _type, base64] = capture;
|
|
17199
17199
|
let filePath = path.join(TEMP_DIR, filename);
|
|
17200
|
-
await
|
|
17200
|
+
await fsp.writeFile(filePath, base64, "base64");
|
|
17201
17201
|
if (needExt) {
|
|
17202
17202
|
const ext = (await ctx.ntFileApi.getFileType(filePath)).ext;
|
|
17203
17203
|
filename += `.${ext}`;
|
|
17204
|
-
await
|
|
17204
|
+
await fsp.rename(filePath, `${filePath}.${ext}`);
|
|
17205
17205
|
filePath = `${filePath}.${ext}`;
|
|
17206
17206
|
}
|
|
17207
17207
|
return {
|
|
@@ -17265,13 +17265,13 @@ function getSha1HexFromBuffer(buf) {
|
|
|
17265
17265
|
}
|
|
17266
17266
|
async function getMd5HexFromFile(filePath) {
|
|
17267
17267
|
const hash = createHash("md5");
|
|
17268
|
-
const stream = fs$
|
|
17268
|
+
const stream = fs$1.createReadStream(filePath);
|
|
17269
17269
|
for await (const chunk of stream) hash.update(chunk);
|
|
17270
17270
|
return hash.digest("hex");
|
|
17271
17271
|
}
|
|
17272
17272
|
async function getSha1HexFromFile(filePath) {
|
|
17273
17273
|
const hash = createHash("sha1");
|
|
17274
|
-
const stream = fs$
|
|
17274
|
+
const stream = fs$1.createReadStream(filePath);
|
|
17275
17275
|
for await (const chunk of stream) hash.update(chunk);
|
|
17276
17276
|
return hash.digest("hex");
|
|
17277
17277
|
}
|
|
@@ -17280,13 +17280,13 @@ function getMd5BufferFromBuffer(buf) {
|
|
|
17280
17280
|
}
|
|
17281
17281
|
async function getMd5BufferFromFile(filePath) {
|
|
17282
17282
|
const hash = createHash("md5");
|
|
17283
|
-
const stream = fs$
|
|
17283
|
+
const stream = fs$1.createReadStream(filePath);
|
|
17284
17284
|
for await (const chunk of stream) hash.update(chunk);
|
|
17285
17285
|
return hash.digest();
|
|
17286
17286
|
}
|
|
17287
17287
|
async function getSha1BufferFromFile(filePath) {
|
|
17288
17288
|
const hash = createHash("sha1");
|
|
17289
|
-
const stream = fs$
|
|
17289
|
+
const stream = fs$1.createReadStream(filePath);
|
|
17290
17290
|
for await (const chunk of stream) hash.update(chunk);
|
|
17291
17291
|
return hash.digest();
|
|
17292
17292
|
}
|
|
@@ -17522,7 +17522,7 @@ async function calculateSha1StreamBytes(filePath) {
|
|
|
17522
17522
|
let bytesRead = 0;
|
|
17523
17523
|
let nextBlockBoundary = blockSize;
|
|
17524
17524
|
const byteArrayList = [];
|
|
17525
|
-
const readable = fs$
|
|
17525
|
+
const readable = fs$1.createReadStream(filePath);
|
|
17526
17526
|
for await (const chunk of readable) {
|
|
17527
17527
|
let buf;
|
|
17528
17528
|
if (tail.length > 0) {
|
|
@@ -17547,7 +17547,7 @@ async function calculateSha1StreamBytes(filePath) {
|
|
|
17547
17547
|
}
|
|
17548
17548
|
async function readAndHash10M(filePath) {
|
|
17549
17549
|
const maxSize = 10002432;
|
|
17550
|
-
const fd = await
|
|
17550
|
+
const fd = await fsp.open(filePath, "r");
|
|
17551
17551
|
const buffer = Buffer.allocUnsafe(maxSize);
|
|
17552
17552
|
const { bytesRead } = await fd.read(buffer, 0, maxSize, 0);
|
|
17553
17553
|
await fd.close();
|
|
@@ -17589,13 +17589,13 @@ var TriSha1 = class {
|
|
|
17589
17589
|
};
|
|
17590
17590
|
async function calculateTriSha1(filePath, fileSize) {
|
|
17591
17591
|
const hash = new TriSha1(fileSize);
|
|
17592
|
-
const stream = fs$
|
|
17592
|
+
const stream = fs$1.createReadStream(filePath);
|
|
17593
17593
|
for await (const chunk of stream) hash.update(chunk);
|
|
17594
17594
|
return hash.finalize();
|
|
17595
17595
|
}
|
|
17596
17596
|
var defaultVideoThumb = Buffer.from("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", "base64");
|
|
17597
17597
|
async function getVideoInfo(filePath) {
|
|
17598
|
-
const size = fs$
|
|
17598
|
+
const size = fs$1.statSync(filePath).size;
|
|
17599
17599
|
return new Promise((resolve, reject) => {
|
|
17600
17600
|
(0, import_fluent_ffmpeg.default)(filePath).ffprobe((err, metadata) => {
|
|
17601
17601
|
if (err) reject(err);
|
|
@@ -17672,7 +17672,7 @@ function convert(ctx, input, options, outputPath) {
|
|
|
17672
17672
|
});
|
|
17673
17673
|
}
|
|
17674
17674
|
async function encodeSilk(ctx, filePath) {
|
|
17675
|
-
const file = await
|
|
17675
|
+
const file = await fsp.readFile(filePath);
|
|
17676
17676
|
if (!isSilk(file)) {
|
|
17677
17677
|
ctx.logger.info(`语音文件${filePath}需要转换成silk`);
|
|
17678
17678
|
let result;
|
|
@@ -17691,7 +17691,7 @@ async function encodeSilk(ctx, filePath) {
|
|
|
17691
17691
|
"-f s16le"
|
|
17692
17692
|
] }), 24e3);
|
|
17693
17693
|
const pttPath = path.join(TEMP_DIR, randomUUID());
|
|
17694
|
-
await
|
|
17694
|
+
await fsp.writeFile(pttPath, result.data);
|
|
17695
17695
|
ctx.logger.info(`语音文件${filePath}转换成功!`, pttPath, `时长:`, result.duration);
|
|
17696
17696
|
return {
|
|
17697
17697
|
converted: true,
|
|
@@ -17714,11 +17714,11 @@ async function encodeSilk(ctx, filePath) {
|
|
|
17714
17714
|
}
|
|
17715
17715
|
}
|
|
17716
17716
|
async function decodeSilk(ctx, inputFilePath, outFormat) {
|
|
17717
|
-
const { data } = await decode(await
|
|
17717
|
+
const { data } = await decode(await fsp.readFile(inputFilePath), 24e3);
|
|
17718
17718
|
const tmpPath = path.join(TEMP_DIR, path.basename(inputFilePath));
|
|
17719
17719
|
const outFilePath = tmpPath + `.${outFormat}`;
|
|
17720
17720
|
const pcmFilePath = tmpPath + ".pcm";
|
|
17721
|
-
await
|
|
17721
|
+
await fsp.writeFile(pcmFilePath, data);
|
|
17722
17722
|
return convert(ctx, pcmFilePath, { input: [
|
|
17723
17723
|
"-f s16le",
|
|
17724
17724
|
"-ar 24000",
|
|
@@ -18112,8 +18112,12 @@ async function createSendElements(ctx, messageData, peer, ignoreTypes = []) {
|
|
|
18112
18112
|
if (isAdmin && remainAtAllCount > 0) sendElements.push(SendElement.at(atQQ, atQQ, AtType.All, "@全体成员"));
|
|
18113
18113
|
} else if (peer.chatType === ChatType.Group) {
|
|
18114
18114
|
const uid = await ctx.ntUserApi.getUidByUin(atQQ, peer.peerUid);
|
|
18115
|
-
let display
|
|
18115
|
+
let display;
|
|
18116
18116
|
if (segment.data.name) display = `@${segment.data.name}`;
|
|
18117
|
+
else {
|
|
18118
|
+
const info = await ctx.ntGroupApi.getGroupMember(peer.peerUid, uid);
|
|
18119
|
+
display = `@${info.cardName || info.nick}`;
|
|
18120
|
+
}
|
|
18117
18121
|
sendElements.push(SendElement.at(atQQ, uid, AtType.One, display));
|
|
18118
18122
|
}
|
|
18119
18123
|
}
|
|
@@ -21901,20 +21905,22 @@ var GetGroupMemberInfo$1 = class extends BaseAction {
|
|
|
21901
21905
|
let info;
|
|
21902
21906
|
try {
|
|
21903
21907
|
info = await this.ctx.ntUserApi.getUserDetailInfoWithBizInfo(member.uid);
|
|
21904
|
-
this.ctx.logger.info("getUserDetailInfoWithBizInfo");
|
|
21905
21908
|
} catch (e) {
|
|
21906
21909
|
try {
|
|
21907
21910
|
info = (await this.ctx.ntUserApi.fetchUserDetailInfo(member.uid)).detail.get(member.uid);
|
|
21908
|
-
this.ctx.logger.info("fetchUserDetailInfo");
|
|
21909
21911
|
} catch (e) {}
|
|
21910
21912
|
}
|
|
21911
|
-
if (info) {
|
|
21912
|
-
this.ctx.logger.info(info);
|
|
21913
|
+
if (info?.commonExt) {
|
|
21913
21914
|
ret.sex = OB11Entities.sex(info.simpleInfo.baseInfo.sex);
|
|
21914
|
-
ret.qq_level =
|
|
21915
|
-
ret.age = info.simpleInfo.baseInfo.age
|
|
21915
|
+
ret.qq_level = calcQQLevel(info.commonExt.qqLevel);
|
|
21916
|
+
ret.age = info.simpleInfo.baseInfo.age;
|
|
21917
|
+
if (ret.qq_level === 0) ret.qq_level = (await this.ctx.pmhq.fetchUserInfo(+payload.user_id)).level;
|
|
21918
|
+
} else {
|
|
21919
|
+
const info = await this.ctx.pmhq.fetchUserInfo(+payload.user_id);
|
|
21920
|
+
ret.sex = OB11Entities.sex(info.sex);
|
|
21921
|
+
ret.qq_level = info.level;
|
|
21922
|
+
ret.age = info.age;
|
|
21916
21923
|
}
|
|
21917
|
-
if (ret.qq_level === 0) ret.qq_level = (await this.ctx.pmhq.fetchUserInfo(+payload.user_id)).level;
|
|
21918
21924
|
return ret;
|
|
21919
21925
|
}
|
|
21920
21926
|
};
|
|
@@ -23853,6 +23859,18 @@ var Msg;
|
|
|
23853
23859
|
var Misc;
|
|
23854
23860
|
(function(_Misc) {
|
|
23855
23861
|
_Misc.UserInfoLabel = ProtoMessage.of({ labels: ProtoField(1, { content: ProtoField(4, "string") }, "repeated") });
|
|
23862
|
+
_Misc.UserInfoBusiness = ProtoMessage.of({ body: ProtoField(3, {
|
|
23863
|
+
msg: ProtoField(1, "string"),
|
|
23864
|
+
lists: ProtoField(3, {
|
|
23865
|
+
type: ProtoField(1, "uint32"),
|
|
23866
|
+
field2: ProtoField(2, "uint32"),
|
|
23867
|
+
isYear: ProtoField(3, "uint32"),
|
|
23868
|
+
level: ProtoField(4, "uint32"),
|
|
23869
|
+
isPro: ProtoField(5, "uint32"),
|
|
23870
|
+
icon1: ProtoField(6, "string"),
|
|
23871
|
+
icon2: ProtoField(7, "string")
|
|
23872
|
+
}, "repeated")
|
|
23873
|
+
}) });
|
|
23856
23874
|
})(Misc || (Misc = {}));
|
|
23857
23875
|
//#endregion
|
|
23858
23876
|
//#region src/onebot11/helper/createMultiMessage.ts
|
|
@@ -24494,7 +24512,11 @@ var GetStrangerInfo = class extends BaseAction {
|
|
|
24494
24512
|
birthday_year: info.birthdayYear,
|
|
24495
24513
|
birthday_month: info.birthdayMonth,
|
|
24496
24514
|
birthday_day: info.birthdayDay,
|
|
24497
|
-
labels: info.labels
|
|
24515
|
+
labels: info.labels,
|
|
24516
|
+
is_vip: info.isVip,
|
|
24517
|
+
is_years_vip: info.isYearsVip,
|
|
24518
|
+
vip_level: info.vipLevel,
|
|
24519
|
+
remark: info.remark
|
|
24498
24520
|
};
|
|
24499
24521
|
}
|
|
24500
24522
|
};
|
|
@@ -24889,7 +24911,7 @@ var DownloadFile = class extends BaseAction {
|
|
|
24889
24911
|
const res = await fetchFile(payload.url, headers);
|
|
24890
24912
|
await fsPromise.writeFile(filePath, res.data);
|
|
24891
24913
|
} else throw new Error("不存在任何文件, 无法下载");
|
|
24892
|
-
if (fs
|
|
24914
|
+
if (fs.existsSync(filePath)) {
|
|
24893
24915
|
if (isRandomName) {
|
|
24894
24916
|
const md5 = await getMd5HexFromFile(filePath);
|
|
24895
24917
|
const newPath = path.join(TEMP_DIR, md5);
|
|
@@ -28522,7 +28544,12 @@ var MessageEncoder = class {
|
|
|
28522
28544
|
if (attrs.type === "all") this.elements.push(SendElement.at("", "", AtType.All, "@全体成员"));
|
|
28523
28545
|
else {
|
|
28524
28546
|
const uid = await this.ctx.ntUserApi.getUidByUin(attrs.id, this.peer.peerUid);
|
|
28525
|
-
|
|
28547
|
+
let display;
|
|
28548
|
+
if (attrs.name) display = `@${attrs.name}`;
|
|
28549
|
+
else {
|
|
28550
|
+
const info = await this.ctx.ntGroupApi.getGroupMember(this.peer.peerUid, uid);
|
|
28551
|
+
display = `@${info.cardName || info.nick}`;
|
|
28552
|
+
}
|
|
28526
28553
|
this.elements.push(SendElement.at(attrs.id, uid, AtType.One, display));
|
|
28527
28554
|
}
|
|
28528
28555
|
} else if (type === "a") {
|
|
@@ -43432,7 +43459,7 @@ async function download(url, headers) {
|
|
|
43432
43459
|
return Buffer.from(bytes);
|
|
43433
43460
|
}
|
|
43434
43461
|
async function resolveMilkyUri(uri) {
|
|
43435
|
-
if (uri.startsWith("file://")) return await
|
|
43462
|
+
if (uri.startsWith("file://")) return await fsp.readFile(fileURLToPath(uri));
|
|
43436
43463
|
if (uri.startsWith("http://") || uri.startsWith("https://")) return await download(uri);
|
|
43437
43464
|
if (uri.startsWith("base64://")) return Buffer.from(uri.slice(9), "base64");
|
|
43438
43465
|
throw new Error(`Unsupported URI scheme: ${uri}`);
|
|
@@ -43461,22 +43488,19 @@ var SystemApi = [
|
|
|
43461
43488
|
});
|
|
43462
43489
|
}),
|
|
43463
43490
|
defineApi("get_user_profile", GetUserProfileInput, GetUserProfileOutput, async (ctx, payload) => {
|
|
43464
|
-
const
|
|
43465
|
-
|
|
43466
|
-
|
|
43467
|
-
|
|
43468
|
-
|
|
43469
|
-
|
|
43470
|
-
|
|
43471
|
-
|
|
43472
|
-
|
|
43473
|
-
|
|
43474
|
-
|
|
43475
|
-
|
|
43476
|
-
|
|
43477
|
-
};
|
|
43478
|
-
if (profile.level === 0) profile.level = (await ctx.pmhq.fetchUserInfo(payload.user_id)).level;
|
|
43479
|
-
return Ok(profile);
|
|
43491
|
+
const info = await ctx.pmhq.fetchUserInfo(payload.user_id);
|
|
43492
|
+
return Ok({
|
|
43493
|
+
nickname: info.nick,
|
|
43494
|
+
qid: info.qid,
|
|
43495
|
+
age: info.age,
|
|
43496
|
+
sex: transformGender(info.sex),
|
|
43497
|
+
remark: info.remark,
|
|
43498
|
+
bio: info.longNick,
|
|
43499
|
+
level: info.level,
|
|
43500
|
+
country: info.country,
|
|
43501
|
+
city: info.city,
|
|
43502
|
+
school: info.school
|
|
43503
|
+
});
|
|
43480
43504
|
}),
|
|
43481
43505
|
defineApi("get_friend_list", GetFriendListInput, GetFriendListOutput, async (ctx) => {
|
|
43482
43506
|
const friends = await ctx.ntFriendApi.getBuddyList();
|
|
@@ -43672,7 +43696,8 @@ async function transformOutgoingMessage(ctx, segments, peerUid, isGroup = false)
|
|
|
43672
43696
|
else if (segment.type === "mention" && isGroup) {
|
|
43673
43697
|
const memberUin = segment.data.user_id.toString();
|
|
43674
43698
|
const memberUid = await ctx.ntUserApi.getUidByUin(memberUin, peerUid);
|
|
43675
|
-
|
|
43699
|
+
const info = await ctx.ntGroupApi.getGroupMember(peerUid, memberUid);
|
|
43700
|
+
elements.push(SendElement.at(memberUin, memberUid, AtType.One, `@${info.cardName || info.nick}`));
|
|
43676
43701
|
} else if (segment.type === "mention_all" && isGroup) elements.push(SendElement.at("", "", AtType.All, "@全体成员"));
|
|
43677
43702
|
else if (segment.type === "face") elements.push(SendElement.face(+segment.data.face_id, segment.data.is_large ? 3 : void 0));
|
|
43678
43703
|
else if (segment.type === "reply") {
|
|
@@ -53745,7 +53770,7 @@ var NTQQMsgApi = class extends Service {
|
|
|
53745
53770
|
chatInfo: peer,
|
|
53746
53771
|
filterMsgType: [],
|
|
53747
53772
|
filterSendersUid,
|
|
53748
|
-
filterMsgToTime: filterMsgTime,
|
|
53773
|
+
filterMsgToTime: String(filterMsgTime + 1),
|
|
53749
53774
|
filterMsgFromTime: filterMsgTime,
|
|
53750
53775
|
isReverseOrder: true,
|
|
53751
53776
|
isIncludeCurrent: true,
|
|
@@ -54025,7 +54050,7 @@ var NTQQUserApi = class extends Service {
|
|
|
54025
54050
|
const funcs = [async () => {
|
|
54026
54051
|
return (await this.ctx.pmhq.invoke("nodeIKernelUixConvertService/getUin", [[uid]])).uinInfo.get(uid);
|
|
54027
54052
|
}, async () => {
|
|
54028
|
-
return (await this.
|
|
54053
|
+
return (await this.getUserSimpleInfo(uid)).uin;
|
|
54029
54054
|
}];
|
|
54030
54055
|
for (const f of funcs) try {
|
|
54031
54056
|
const result = await f();
|
|
@@ -54035,6 +54060,7 @@ var NTQQUserApi = class extends Service {
|
|
|
54035
54060
|
}
|
|
54036
54061
|
return "";
|
|
54037
54062
|
}
|
|
54063
|
+
/** 始终会从服务器拉取 */
|
|
54038
54064
|
async fetchUserDetailInfo(uid) {
|
|
54039
54065
|
return await this.ctx.pmhq.invoke("nodeIKernelProfileService/fetchUserDetailInfo", [
|
|
54040
54066
|
"BuddyProfileStore",
|
|
@@ -54049,12 +54075,14 @@ var NTQQUserApi = class extends Service {
|
|
|
54049
54075
|
resultCb: (payload) => payload.simpleInfo.uid === uid
|
|
54050
54076
|
});
|
|
54051
54077
|
}
|
|
54078
|
+
/** 无缓存时会从服务器拉取 */
|
|
54052
54079
|
async getUserSimpleInfo(uid, force = true) {
|
|
54053
54080
|
return (await this.ctx.pmhq.invoke("nodeIKernelProfileService/getUserSimpleInfo", [force, [uid]], {
|
|
54054
54081
|
resultCmd: ReceiveCmdS.USER_INFO,
|
|
54055
54082
|
resultCb: (payload) => payload.has(uid)
|
|
54056
54083
|
})).get(uid);
|
|
54057
54084
|
}
|
|
54085
|
+
/** 无缓存时会获取不到用户信息 */
|
|
54058
54086
|
async getCoreAndBaseInfo(uids) {
|
|
54059
54087
|
return await this.ctx.pmhq.invoke("nodeIKernelProfileService/getCoreAndBaseInfo", ["nodeStore", uids]);
|
|
54060
54088
|
}
|
|
@@ -54298,7 +54326,7 @@ var NTQQWebApi = class extends Service {
|
|
|
54298
54326
|
const iBatchID = Math.floor(Date.now() / 1e3);
|
|
54299
54327
|
for (let i = 0; i < filePathList.length; i++) {
|
|
54300
54328
|
const filePath = filePathList[i];
|
|
54301
|
-
const fileBuffer = await
|
|
54329
|
+
const fileBuffer = await fsp.readFile(filePath);
|
|
54302
54330
|
const fileSize = fileBuffer.length;
|
|
54303
54331
|
const fileType = await fileTypeFromBuffer(fileBuffer);
|
|
54304
54332
|
const timestamp = Math.floor(Date.now() / 1e3);
|
|
@@ -54483,7 +54511,7 @@ var NTQQWebApi = class extends Service {
|
|
|
54483
54511
|
}
|
|
54484
54512
|
if (sVid) {
|
|
54485
54513
|
const filePath = await createThumb(this.ctx, filePathList[i]);
|
|
54486
|
-
const fileBuffer = await
|
|
54514
|
+
const fileBuffer = await fsp.readFile(filePath);
|
|
54487
54515
|
const fileSize = fileBuffer.length;
|
|
54488
54516
|
const timestamp = Math.floor(Date.now() / 1e3);
|
|
54489
54517
|
const checksum = getMd5HexFromBuffer(fileBuffer);
|
|
@@ -55975,7 +56003,7 @@ var Config = class extends Service {
|
|
|
55975
56003
|
this.logger.info("配置文件位于", this.configPath);
|
|
55976
56004
|
this.config = this.get();
|
|
55977
56005
|
if (this.configPath) {
|
|
55978
|
-
fs$
|
|
56006
|
+
fs$1.watchFile(this.configPath, {
|
|
55979
56007
|
persistent: true,
|
|
55980
56008
|
interval: 1e3
|
|
55981
56009
|
}, () => {
|
|
@@ -55993,7 +56021,7 @@ var Config = class extends Service {
|
|
|
55993
56021
|
}
|
|
55994
56022
|
getDefaultConfig() {
|
|
55995
56023
|
const _defaultConfig = { ...defaultConfig };
|
|
55996
|
-
const defaultConfigFromFile = fs$
|
|
56024
|
+
const defaultConfigFromFile = fs$1.readFileSync(this.defaultConfigPath, "utf-8");
|
|
55997
56025
|
try {
|
|
55998
56026
|
const parsedDefaultConfig = import_dist.default.parse(defaultConfigFromFile);
|
|
55999
56027
|
Object.assign(_defaultConfig, parsedDefaultConfig);
|
|
@@ -56004,12 +56032,12 @@ var Config = class extends Service {
|
|
|
56004
56032
|
}
|
|
56005
56033
|
reloadConfig() {
|
|
56006
56034
|
if (!this.configPath) return this.getDefaultConfig();
|
|
56007
|
-
if (!fs$
|
|
56035
|
+
if (!fs$1.existsSync(this.configPath)) {
|
|
56008
56036
|
this.config = this.getDefaultConfig();
|
|
56009
56037
|
this.set(this.config);
|
|
56010
56038
|
return this.config;
|
|
56011
56039
|
} else {
|
|
56012
|
-
const data = fs$
|
|
56040
|
+
const data = fs$1.readFileSync(this.configPath, "utf-8");
|
|
56013
56041
|
let jsonData = defaultConfig;
|
|
56014
56042
|
try {
|
|
56015
56043
|
jsonData = import_dist.default.parse(data);
|
|
@@ -56035,7 +56063,7 @@ var Config = class extends Service {
|
|
|
56035
56063
|
writeConfig(config) {
|
|
56036
56064
|
if (!this.configPath) return;
|
|
56037
56065
|
this.watch = false;
|
|
56038
|
-
fs$
|
|
56066
|
+
fs$1.writeFileSync(this.configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
56039
56067
|
setTimeout(() => {
|
|
56040
56068
|
this.watch = true;
|
|
56041
56069
|
}, 1500);
|
|
@@ -56141,13 +56169,13 @@ var WebUITokenUtil = class {
|
|
|
56141
56169
|
}
|
|
56142
56170
|
getToken() {
|
|
56143
56171
|
if (!this.token) {
|
|
56144
|
-
if (fs$
|
|
56172
|
+
if (fs$1.existsSync(this.tokenPath)) this.token = fs$1.readFileSync(this.tokenPath, "utf-8").trim();
|
|
56145
56173
|
}
|
|
56146
56174
|
return this.token;
|
|
56147
56175
|
}
|
|
56148
56176
|
setToken(token) {
|
|
56149
56177
|
this.token = token.trim();
|
|
56150
|
-
fs$
|
|
56178
|
+
fs$1.writeFileSync(this.tokenPath, token, "utf-8");
|
|
56151
56179
|
}
|
|
56152
56180
|
};
|
|
56153
56181
|
var webuiTokenUtil = new WebUITokenUtil(path.join(DATA_DIR, "webui_token.txt"));
|
|
@@ -58422,7 +58450,7 @@ var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
58422
58450
|
var require_shared = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
58423
58451
|
var urllib$2 = __require("url");
|
|
58424
58452
|
var util$1 = __require("util");
|
|
58425
|
-
var fs$
|
|
58453
|
+
var fs$4 = __require("fs");
|
|
58426
58454
|
var nmfetch = require_fetch();
|
|
58427
58455
|
var dns$1 = __require("dns");
|
|
58428
58456
|
var net$4 = __require("net");
|
|
@@ -58758,7 +58786,7 @@ var require_shared = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
58758
58786
|
const parsedDataUri = module.exports.parseDataURI(content.path || content.href);
|
|
58759
58787
|
if (!parsedDataUri || !parsedDataUri.data) return callback(null, Buffer.from(0));
|
|
58760
58788
|
return callback(null, parsedDataUri.data);
|
|
58761
|
-
} else if (content.path) return resolveStream(fs$
|
|
58789
|
+
} else if (content.path) return resolveStream(fs$4.createReadStream(content.path), callback);
|
|
58762
58790
|
}
|
|
58763
58791
|
if (typeof data[key].content === "string" && ![
|
|
58764
58792
|
"utf8",
|
|
@@ -62698,7 +62726,7 @@ var require_le_unix = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
62698
62726
|
//#region node_modules/nodemailer/lib/mime-node/index.js
|
|
62699
62727
|
var require_mime_node = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
62700
62728
|
var crypto$8 = __require("crypto");
|
|
62701
|
-
var fs$
|
|
62729
|
+
var fs$3 = __require("fs");
|
|
62702
62730
|
var punycode = require_punycode();
|
|
62703
62731
|
var { PassThrough: PassThrough$2 } = __require("stream");
|
|
62704
62732
|
var shared = require_shared();
|
|
@@ -63407,7 +63435,7 @@ var require_mime_node = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
63407
63435
|
});
|
|
63408
63436
|
return contentStream;
|
|
63409
63437
|
}
|
|
63410
|
-
return fs$
|
|
63438
|
+
return fs$3.createReadStream(content.path);
|
|
63411
63439
|
}
|
|
63412
63440
|
if (content && typeof content.href === "string") {
|
|
63413
63441
|
if (this.disableUrlAccess) {
|
|
@@ -64246,7 +64274,7 @@ var require_dkim = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
64246
64274
|
var RelaxedBody = require_relaxed_body();
|
|
64247
64275
|
var sign = require_sign();
|
|
64248
64276
|
var { PassThrough: PassThrough$1 } = __require("stream");
|
|
64249
|
-
var fs$
|
|
64277
|
+
var fs$2 = __require("fs");
|
|
64250
64278
|
var path$2 = __require("path");
|
|
64251
64279
|
var crypto$5 = __require("crypto");
|
|
64252
64280
|
var DKIM_ALGO = "sha256";
|
|
@@ -64279,10 +64307,10 @@ var require_dkim = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
64279
64307
|
}
|
|
64280
64308
|
cleanup() {
|
|
64281
64309
|
if (!this.cache || !this.cachePath) return;
|
|
64282
|
-
fs$
|
|
64310
|
+
fs$2.unlink(this.cachePath, () => false);
|
|
64283
64311
|
}
|
|
64284
64312
|
createReadCache() {
|
|
64285
|
-
this.cache = fs$
|
|
64313
|
+
this.cache = fs$2.createReadStream(this.cachePath);
|
|
64286
64314
|
this.cache.once("error", (err) => {
|
|
64287
64315
|
this.cleanup();
|
|
64288
64316
|
this.output.emit("error", err);
|
|
@@ -64328,7 +64356,7 @@ var require_dkim = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
64328
64356
|
}
|
|
64329
64357
|
createWriteCache() {
|
|
64330
64358
|
this.output.usingCache = true;
|
|
64331
|
-
this.cache = fs$
|
|
64359
|
+
this.cache = fs$2.createWriteStream(this.cachePath);
|
|
64332
64360
|
this.cache.once("error", (err) => {
|
|
64333
64361
|
this.cleanup();
|
|
64334
64362
|
this.relaxedBody.unpipe(this.cache);
|
|
@@ -70336,12 +70364,15 @@ function UserMixin(Base) {
|
|
|
70336
70364
|
uin,
|
|
70337
70365
|
keys: [
|
|
70338
70366
|
{ key: 102 },
|
|
70367
|
+
{ key: 103 },
|
|
70339
70368
|
{ key: 104 },
|
|
70340
70369
|
{ key: 105 },
|
|
70370
|
+
{ key: 107 },
|
|
70341
70371
|
{ key: 20002 },
|
|
70342
70372
|
{ key: 20003 },
|
|
70343
70373
|
{ key: 20009 },
|
|
70344
70374
|
{ key: 20020 },
|
|
70375
|
+
{ key: 20021 },
|
|
70345
70376
|
{ key: 20026 },
|
|
70346
70377
|
{ key: 20031 },
|
|
70347
70378
|
{ key: 20037 },
|
|
@@ -70359,6 +70390,7 @@ function UserMixin(Base) {
|
|
|
70359
70390
|
const info = Oidb.FetchUserInfoResp.decode(oidbRespBody);
|
|
70360
70391
|
const numbers = Object.fromEntries(info.body.properties.numberProperties.map((p) => [p.key, p.value]));
|
|
70361
70392
|
const bytes = Object.fromEntries(info.body.properties.bytesProperties.map((p) => [p.key, p.value]));
|
|
70393
|
+
const vipInfo = (bytes[107] ? Misc.UserInfoBusiness.decode(bytes[107]) : void 0)?.body.lists.find((e) => e.type === 1);
|
|
70362
70394
|
return {
|
|
70363
70395
|
uin: info.body.uin,
|
|
70364
70396
|
nick: bytes[20002]?.toString() ?? "",
|
|
@@ -70373,7 +70405,12 @@ function UserMixin(Base) {
|
|
|
70373
70405
|
birthdayYear: bytes[20031]?.[0] << 8 | bytes[20031]?.[1],
|
|
70374
70406
|
birthdayMonth: bytes[20031]?.[2] ?? 0,
|
|
70375
70407
|
birthdayDay: bytes[20031]?.[3] ?? 0,
|
|
70376
|
-
labels: bytes[104] ? Misc.UserInfoLabel.decode(bytes[104]).labels.map((e) => e.content) : []
|
|
70408
|
+
labels: bytes[104] ? Misc.UserInfoLabel.decode(bytes[104]).labels.map((e) => e.content) : [],
|
|
70409
|
+
school: bytes[20021]?.toString() ?? "",
|
|
70410
|
+
remark: bytes[103]?.toString() ?? "",
|
|
70411
|
+
isVip: !!vipInfo,
|
|
70412
|
+
isYearsVip: !!vipInfo?.isYear,
|
|
70413
|
+
vipLevel: vipInfo?.level ?? 0
|
|
70377
70414
|
};
|
|
70378
70415
|
}
|
|
70379
70416
|
async fetchUserLoginDays(uin) {
|