koishi-plugin-jryspro-fast 2.2.2 → 2.2.3
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/CHANGELOG.md +12 -0
- package/README.md +5 -5
- package/assets/template.html +8 -2
- package/assets/template2.html +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +38 -25
- package/package.json +7 -8
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -18,10 +18,10 @@ jrys plugin for bella
|
|
|
18
18
|
* -i 渲染图模式输出,这个是默认的
|
|
19
19
|
|
|
20
20
|
> 如果你无法使用此插件,请检查
|
|
21
|
-
> - 1. (使用命令时无反应,报错等)请检查指令是否有冲突或者是否正确安装
|
|
21
|
+
> - 1. (使用命令时无反应,报错等)请检查指令是否有冲突或者是否正确安装to-image-service
|
|
22
22
|
> - 2. 提示“发生未知错误”可能是没有获取到群友的uid,需要在数据库内刷新一下
|
|
23
23
|
> - 3. “数据出错”之类的提示不是本插件的提示,可能你装了其他插件
|
|
24
|
-
> - 4. 启用不了插件。请检查koishi版本,
|
|
24
|
+
> - 4. 启用不了插件。请检查koishi版本,to-image-service版本等是否再兼容范围内,或重启koishi,删除此插件依赖再尝试重装
|
|
25
25
|
|
|
26
26
|
随机文件夹内图片时请注意路径\`C:user/path/to/\`不要把后面的/忘了
|
|
27
27
|
|
|
@@ -35,7 +35,7 @@ jrys plugin for bella
|
|
|
35
35
|
| `imgApi` |(v1.3.0可用本地文件夹绝对路径)| 图片api地址,仅支持返回图片的api,不支持json等。由于我只制作了竖屏图片适配,建议使用竖屏的图片。在填写时不要把`http(s)://`忘了哦。 |
|
|
36
36
|
| `waitting` | | 是否开启等待提示,默认开启 |
|
|
37
37
|
| `defaultMode` | | 默认输出模式,非以下参数默认为`0` |
|
|
38
|
-
| | `0` |
|
|
38
|
+
| | `0` | 渲染输出to-image-service渲染输出 |
|
|
39
39
|
| | `1` | 纯文本输出,仅输出文本 |
|
|
40
40
|
| | `2` | (默认)新版竖屏模式输出 |
|
|
41
41
|
| | `3` | 图文输出,文字+图片的输出方式 |
|
|
@@ -56,6 +56,6 @@ jrys plugin for bella
|
|
|
56
56
|
imgApi与subimgApi支持本地文件夹绝对路径和http(s)等网络api
|
|
57
57
|
|
|
58
58
|
# TIP
|
|
59
|
-
如果没有图片输出可以看看log时不时
|
|
60
|
-
确定
|
|
59
|
+
如果没有图片输出可以看看log时不时to-image-service有问题
|
|
60
|
+
确定to-image-service没问题那就是api寄了或者本地路径没填对,别把最后面的/省了
|
|
61
61
|
有问题就github开issues吧
|
package/assets/template.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>114514</title>
|
|
6
|
-
<style
|
|
6
|
+
<style>
|
|
7
7
|
* {
|
|
8
8
|
box-sizing: border-box;
|
|
9
9
|
}
|
|
@@ -96,6 +96,7 @@
|
|
|
96
96
|
<div
|
|
97
97
|
style="
|
|
98
98
|
display: flex;
|
|
99
|
+
flex-direction: column;
|
|
99
100
|
font-size: 32px;
|
|
100
101
|
background-color: rgba(206, 168, 134, 0.5);
|
|
101
102
|
border: 1px solid #161616;
|
|
@@ -103,7 +104,12 @@
|
|
|
103
104
|
padding: 16px;
|
|
104
105
|
"
|
|
105
106
|
>
|
|
106
|
-
|
|
107
|
+
<div>
|
|
108
|
+
你是半个签名啊啊啊啊啊啊啊啊啊啊啊啊
|
|
109
|
+
</div>
|
|
110
|
+
<div>
|
|
111
|
+
你是另外半个签名啊啊啊啊啊啊啊啊啊啊啊啊
|
|
112
|
+
</div>
|
|
107
113
|
</div>
|
|
108
114
|
<div
|
|
109
115
|
style="
|
package/assets/template2.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>114514</title>
|
|
6
|
-
<style
|
|
6
|
+
<style>
|
|
7
7
|
* {
|
|
8
8
|
box-sizing: border-box;
|
|
9
9
|
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
>
|
|
23
23
|
<div
|
|
24
24
|
style="
|
|
25
|
-
width:
|
|
25
|
+
width: 370px;
|
|
26
26
|
height: 100%;
|
|
27
27
|
padding: 0 20px;
|
|
28
28
|
display: flex;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Schema } from "koishi";
|
|
2
2
|
export declare const name = "jryspro-fast";
|
|
3
|
-
export declare const usage = "\n## \u66F4\u65B0\u63D2\u4EF6\u524D\u8BF7\u505C\u6B62\u8FD0\u884C\u63D2\u4EF6\n\u63D2\u4EF6\u914D\u7F6E\u9879\u53EF\u80FD\u4F1A\u6709\u6539\u52A8\uFF0C\u4E0D\u505C\u6B62\u63D2\u4EF6\u76F4\u63A5\u66F4\u65B0\u53EF\u80FD\u4F1A\u5BFC\u81F4koishi\u70B8\u6389\n\n## \u4F7F\u7528\u8BF4\u660E\n\n> \u5982\u679C\u4F60\u65E0\u6CD5\u4F7F\u7528\u6B64\u63D2\u4EF6\uFF0C\u8BF7\u68C0\u67E5\n> - 1. (\u4F7F\u7528\u547D\u4EE4\u65F6\u65E0\u53CD\u5E94\uFF0C\u62A5\u9519\u7B49)\u8BF7\u68C0\u67E5\u6307\u4EE4\u662F\u5426\u6709\u51B2\u7A81\u6216\u8005\u662F\u5426\u6B63\u786E\u5B89\
|
|
3
|
+
export declare const usage = "\n## \u66F4\u65B0\u63D2\u4EF6\u524D\u8BF7\u505C\u6B62\u8FD0\u884C\u63D2\u4EF6\n\u63D2\u4EF6\u914D\u7F6E\u9879\u53EF\u80FD\u4F1A\u6709\u6539\u52A8\uFF0C\u4E0D\u505C\u6B62\u63D2\u4EF6\u76F4\u63A5\u66F4\u65B0\u53EF\u80FD\u4F1A\u5BFC\u81F4koishi\u70B8\u6389\n\n## \u4F7F\u7528\u8BF4\u660E\n\n> \u5982\u679C\u4F60\u65E0\u6CD5\u4F7F\u7528\u6B64\u63D2\u4EF6\uFF0C\u8BF7\u68C0\u67E5\n> - 1. (\u4F7F\u7528\u547D\u4EE4\u65F6\u65E0\u53CD\u5E94\uFF0C\u62A5\u9519\u7B49)\u8BF7\u68C0\u67E5\u6307\u4EE4\u662F\u5426\u6709\u51B2\u7A81\u6216\u8005\u662F\u5426\u6B63\u786E\u5B89\u88C5to-image-service\n> - 2. \u63D0\u793A\u201C\u53D1\u751F\u672A\u77E5\u9519\u8BEF\u201D\u53EF\u80FD\u662F\u6CA1\u6709\u83B7\u53D6\u5230\u7FA4\u53CB\u7684uid\uFF0C\u9700\u8981\u5728\u6570\u636E\u5E93\u5185\u5237\u65B0\u4E00\u4E0B\n> - 3. \u201C\u6570\u636E\u51FA\u9519\u201D\u4E4B\u7C7B\u7684\u63D0\u793A\u4E0D\u662F\u672C\u63D2\u4EF6\u7684\u63D0\u793A\uFF0C\u53EF\u80FD\u4F60\u88C5\u4E86\u5176\u4ED6\u63D2\u4EF6\n> - 4. \u542F\u7528\u4E0D\u4E86\u63D2\u4EF6\u3002\u8BF7\u68C0\u67E5koishi\u7248\u672C\uFF0Cto-image-service\u7248\u672C\u7B49\u662F\u5426\u518D\u517C\u5BB9\u8303\u56F4\u5185\uFF0C\u6216\u91CD\u542Fkoishi\uFF0C\u5220\u9664\u6B64\u63D2\u4EF6\u4F9D\u8D56\u518D\u5C1D\u8BD5\u91CD\u88C5\n\n\u968F\u673A\u6587\u4EF6\u5939\u5185\u56FE\u7247\u65F6\u8BF7\u6CE8\u610F\u8DEF\u5F84`C:/user/path/to/`\u4E0D\u8981\u628A\u540E\u9762\u7684/\u5FD8\u4E86\n\n## api\u8BF4\u660E\n* api url\u4EE5 #e# \u7ED3\u5C3E\u53EF\u4EE5\u5728\u672B\u5C3E\u6DFB\u52A0\u66F4\u65B0\u65F6\u95F4\u6233(\u4F8B\u5B50\u540E\u9762\u7B49\u4EF7\u7684\u6570\u5B57\u4E3A\u5F53\u524D\u65F6\u95F4\u6233)\n* \u4F8B: https://api.example.com/img?#e# ==\u7B49\u4EF7\u4E8E== https://api.example.com/img?271878\n* \u4F8B: https://api.example.com/img?type=acc&v=#e# ==\u7B49\u4EF7\u4E8E== https://api.example.com/img?type=acc&v=271878\n\nimgApi\u4E0EsubimgApi\u652F\u6301\u672C\u5730\u6587\u4EF6\u5939\u7EDD\u5BF9\u8DEF\u5F84\u548Chttp(s)\u7B49\u7F51\u7EDCapi\n";
|
|
4
4
|
export interface Config {
|
|
5
5
|
interval: number;
|
|
6
6
|
nightauto: boolean;
|
package/lib/index.js
CHANGED
|
@@ -40,7 +40,6 @@ module.exports = __toCommonJS(src_exports);
|
|
|
40
40
|
var import_node_fs = __toESM(require("node:fs"));
|
|
41
41
|
var import_node_path = __toESM(require("node:path"));
|
|
42
42
|
var import_node_crypto = __toESM(require("node:crypto"));
|
|
43
|
-
var import_wasm_vips = __toESM(require("wasm-vips"));
|
|
44
43
|
var import_koishi = require("koishi");
|
|
45
44
|
var name = "jryspro-fast";
|
|
46
45
|
var logger = new import_koishi.Logger(name);
|
|
@@ -51,10 +50,10 @@ var usage = `
|
|
|
51
50
|
## 使用说明
|
|
52
51
|
|
|
53
52
|
> 如果你无法使用此插件,请检查
|
|
54
|
-
> - 1. (使用命令时无反应,报错等)请检查指令是否有冲突或者是否正确安装
|
|
53
|
+
> - 1. (使用命令时无反应,报错等)请检查指令是否有冲突或者是否正确安装to-image-service
|
|
55
54
|
> - 2. 提示“发生未知错误”可能是没有获取到群友的uid,需要在数据库内刷新一下
|
|
56
55
|
> - 3. “数据出错”之类的提示不是本插件的提示,可能你装了其他插件
|
|
57
|
-
> - 4. 启用不了插件。请检查koishi版本,
|
|
56
|
+
> - 4. 启用不了插件。请检查koishi版本,to-image-service版本等是否再兼容范围内,或重启koishi,删除此插件依赖再尝试重装
|
|
58
57
|
|
|
59
58
|
随机文件夹内图片时请注意路径\`C:/user/path/to/\`不要把后面的/忘了
|
|
60
59
|
|
|
@@ -77,7 +76,7 @@ var schema = import_koishi.Schema.object({
|
|
|
77
76
|
imgApi: import_koishi.Schema.string().role("link").required().description(
|
|
78
77
|
"[必填]渲染模式美图的api或文件夹(推荐纯竖屏),仅支持返回图片的api,不要忘记http(s)://"
|
|
79
78
|
),
|
|
80
|
-
imgQuality: import_koishi.Schema.
|
|
79
|
+
imgQuality: import_koishi.Schema.number().role("slider").min(1).max(100).step(1).default(75).description("渲染图输出质量"),
|
|
81
80
|
waiting: import_koishi.Schema.boolean().default(true).description("是否开启发送消息等待提示"),
|
|
82
81
|
callme: import_koishi.Schema.boolean().default(false).description("是否开启callme功能"),
|
|
83
82
|
defaultMode: import_koishi.Schema.union([0, 1, 2, 3]).default(2).description(
|
|
@@ -88,10 +87,9 @@ var schema = import_koishi.Schema.object({
|
|
|
88
87
|
),
|
|
89
88
|
avatarUrl: import_koishi.Schema.string().role("link").description("默认头像URL(https?://或者file:///)")
|
|
90
89
|
});
|
|
91
|
-
var inject = ["
|
|
90
|
+
var inject = ["toImageService", "database"];
|
|
92
91
|
async function apply(ctx, config) {
|
|
93
92
|
let fileType = await import("file-type");
|
|
94
|
-
const vips = await (0, import_wasm_vips.default)();
|
|
95
93
|
const template = import_node_fs.default.readFileSync(import_node_path.default.join(__dirname, "../assets/template.html"), "utf8").replace(/[\s\S]*<body[^>]*>([\s\S]*)<\/body>[\s\S]*/, "$1").trim();
|
|
96
94
|
const template2 = import_node_fs.default.readFileSync(import_node_path.default.join(__dirname, "../assets/template2.html"), "utf8").replace(/[\s\S]*<body[^>]*>([\s\S]*)<\/body>[\s\S]*/, "$1").trim();
|
|
97
95
|
const defaultAvatar = `data:image/png;base64,` + Buffer.from(
|
|
@@ -181,6 +179,7 @@ async function apply(ctx, config) {
|
|
|
181
179
|
const avatar = await downloadUrl({
|
|
182
180
|
url: avatarUrl
|
|
183
181
|
});
|
|
182
|
+
const signTexts = dJson.signText.split(",");
|
|
184
183
|
const replacedContent = template.replace(
|
|
185
184
|
"https://dummyimage.com/389x399/6e2d6e/c2c5ed.png",
|
|
186
185
|
background.base64
|
|
@@ -194,17 +193,14 @@ async function apply(ctx, config) {
|
|
|
194
193
|
"你是一个一个幸运星啊啊啊啊啊啊啊啊啊啊啊啊",
|
|
195
194
|
`${dJson.fortuneSummary.toString().length > 8 ? dJson.fortuneSummary.toString().substring(0, 8) : dJson.fortuneSummary} ${dJson.luckyStar}`
|
|
196
195
|
).replace(
|
|
197
|
-
"
|
|
198
|
-
`${
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
{
|
|
203
|
-
width,
|
|
204
|
-
height
|
|
205
|
-
}
|
|
196
|
+
"你是半个签名啊啊啊啊啊啊啊啊啊啊啊啊",
|
|
197
|
+
`${signTexts[0]},${signTexts[1]}`
|
|
198
|
+
).replace(
|
|
199
|
+
"你是另外半个签名啊啊啊啊啊啊啊啊啊啊啊啊",
|
|
200
|
+
`${signTexts[1]},${signTexts[2]}`
|
|
206
201
|
);
|
|
207
|
-
|
|
202
|
+
const png = await htmlToImg(replacedContent, width, height);
|
|
203
|
+
return [import_koishi.h.image(png, "image/png")];
|
|
208
204
|
} catch (err) {
|
|
209
205
|
logger.error(err);
|
|
210
206
|
return "渲染失败,不知道发生了啥";
|
|
@@ -212,7 +208,7 @@ async function apply(ctx, config) {
|
|
|
212
208
|
} else if (options.img || config.defaultMode === 0 && !options.out && !options.txtimg && !options.new) {
|
|
213
209
|
if (config.waiting) session.send("请稍等,正在查询……").then();
|
|
214
210
|
try {
|
|
215
|
-
let width =
|
|
211
|
+
let width = 370 + 7;
|
|
216
212
|
const height = 1040;
|
|
217
213
|
const background = await downloadUrl({
|
|
218
214
|
url: backgroundUrl,
|
|
@@ -243,14 +239,8 @@ async function apply(ctx, config) {
|
|
|
243
239
|
/<!--解签开始-->[\s\S]*<!--解签结束-->/,
|
|
244
240
|
dJson.unsignText.split("").map((s) => `<div>${s}</div>`).join("")
|
|
245
241
|
);
|
|
246
|
-
const png = await
|
|
247
|
-
|
|
248
|
-
{
|
|
249
|
-
width,
|
|
250
|
-
height
|
|
251
|
-
}
|
|
252
|
-
);
|
|
253
|
-
return [import_koishi.h.image((await png.toArray())[0], "image/png")];
|
|
242
|
+
const png = await htmlToImg(replacedContent, width, height);
|
|
243
|
+
return [import_koishi.h.image(png, "image/png")];
|
|
254
244
|
} catch (err) {
|
|
255
245
|
logger.error(err);
|
|
256
246
|
return "渲染失败,不知道发生了啥";
|
|
@@ -279,6 +269,28 @@ async function apply(ctx, config) {
|
|
|
279
269
|
}
|
|
280
270
|
}
|
|
281
271
|
});
|
|
272
|
+
async function htmlToImg(html, width, height) {
|
|
273
|
+
const reactElement = ctx.toImageService.toReactElement.htmlToReactElement(html);
|
|
274
|
+
const svg = await ctx.toImageService.reactElementToSvg.satori(
|
|
275
|
+
reactElement,
|
|
276
|
+
{
|
|
277
|
+
width,
|
|
278
|
+
height
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
if (config.imgQuality === 100) {
|
|
282
|
+
return await ctx.toImageService.svgToImage.vips(svg, {
|
|
283
|
+
format: "png"
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return await ctx.toImageService.svgToImage.vips(svg, {
|
|
287
|
+
format: "jpeg",
|
|
288
|
+
options: {
|
|
289
|
+
Q: config.imgQuality
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
__name(htmlToImg, "htmlToImg");
|
|
282
294
|
function getUserKey(session) {
|
|
283
295
|
let etime = (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0);
|
|
284
296
|
let userId;
|
|
@@ -323,6 +335,7 @@ async function apply(ctx, config) {
|
|
|
323
335
|
throw "渲染失败,不知道发生了啥";
|
|
324
336
|
}
|
|
325
337
|
const imgType = await fileType.fileTypeFromBuffer(imgData);
|
|
338
|
+
const vips = ctx.toImageService.toImageBase.getVips();
|
|
326
339
|
let img;
|
|
327
340
|
let metaData;
|
|
328
341
|
const touchImg = /* @__PURE__ */ __name(() => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-jryspro-fast",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"typings": "lib/index.d.ts",
|
|
6
6
|
"homepage": "https://github.com/pgnqukezrdxmhjso/koishi-plugin-jryspro-fast",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"service": {
|
|
34
34
|
"required": [
|
|
35
35
|
"http",
|
|
36
|
-
"
|
|
36
|
+
"toImageService"
|
|
37
37
|
],
|
|
38
38
|
"optional": [
|
|
39
39
|
"database"
|
|
@@ -49,13 +49,12 @@
|
|
|
49
49
|
"今日运势"
|
|
50
50
|
],
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"koishi": "^4.
|
|
53
|
-
},
|
|
54
|
-
"devDependencies": {
|
|
55
|
-
"koishi-plugin-vercel-satori-png-service": "^0.1.7"
|
|
52
|
+
"koishi": "^4.18.10"
|
|
56
53
|
},
|
|
57
54
|
"dependencies": {
|
|
58
|
-
"file-type": "^21.
|
|
59
|
-
|
|
55
|
+
"file-type": "^21.3.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"koishi-plugin-to-image-service": "^0.1.0"
|
|
60
59
|
}
|
|
61
60
|
}
|