@zhin.js/plugin-qrcode 0.0.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/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +47 -0
- package/lib/index.js.map +1 -0
- package/package.json +32 -0
- package/src/index.ts +58 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MessageCommand, ZhinTool, usePlugin } from 'zhin.js';
|
|
2
|
+
const { addCommand, addTool, logger } = usePlugin();
|
|
3
|
+
const QR_API_BASE = 'https://api.qrserver.com/v1';
|
|
4
|
+
// ====== 命令:二维码 <text> ======
|
|
5
|
+
addCommand(new MessageCommand('二维码 <text:text>')
|
|
6
|
+
.desc('根据文本或链接生成二维码图片')
|
|
7
|
+
.action(async (_message, result) => {
|
|
8
|
+
const text = result.params.text;
|
|
9
|
+
const qrUrl = `${QR_API_BASE}/create-qr-code/?size=300x300&data=${encodeURIComponent(text)}`;
|
|
10
|
+
logger.info(`生成二维码: ${text}`);
|
|
11
|
+
return [{ type: 'image', data: { url: qrUrl } }];
|
|
12
|
+
}));
|
|
13
|
+
// ====== 命令:扫码 <url> ======
|
|
14
|
+
addCommand(new MessageCommand('扫码 <url:text>')
|
|
15
|
+
.desc('识别图片中的二维码内容')
|
|
16
|
+
.action(async (_message, result) => {
|
|
17
|
+
const imageUrl = result.params.url;
|
|
18
|
+
const apiUrl = `${QR_API_BASE}/read-qr-code/?fileurl=${encodeURIComponent(imageUrl)}`;
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(apiUrl);
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
return '二维码识别服务请求失败';
|
|
23
|
+
}
|
|
24
|
+
const data = (await response.json());
|
|
25
|
+
const symbol = data?.[0]?.symbol?.[0];
|
|
26
|
+
if (!symbol || symbol.error || !symbol.data) {
|
|
27
|
+
return `未能识别二维码内容${symbol?.error ? `:${symbol.error}` : ''}`;
|
|
28
|
+
}
|
|
29
|
+
return `识别结果:${symbol.data}`;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
logger.warn('扫码失败', e);
|
|
33
|
+
return '二维码识别失败,请检查图片链接是否有效';
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
// ====== AI 工具:qrcode_generate ======
|
|
37
|
+
addTool(new ZhinTool('qrcode_generate')
|
|
38
|
+
.desc('根据文本或 URL 生成二维码图片')
|
|
39
|
+
.keyword('二维码', 'QR', 'qrcode')
|
|
40
|
+
.tag('qrcode', 'image')
|
|
41
|
+
.param('text', { type: 'string', description: '要编码到二维码中的文本或 URL' }, true)
|
|
42
|
+
.execute(async (args) => {
|
|
43
|
+
const qrUrl = `${QR_API_BASE}/create-qr-code/?size=300x300&data=${encodeURIComponent(args.text)}`;
|
|
44
|
+
return JSON.stringify([{ type: 'image', data: { url: qrUrl } }]);
|
|
45
|
+
})
|
|
46
|
+
.toTool());
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zhin.js/plugin-qrcode",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "QR code generator & reader plugin for Zhin.js",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./lib/index.js",
|
|
7
|
+
"types": "./lib/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
11
|
+
"development": "./src/index.ts",
|
|
12
|
+
"import": "./lib/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": ["src", "lib", "README.md"],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc --build",
|
|
19
|
+
"clean": "rimraf lib"
|
|
20
|
+
},
|
|
21
|
+
"keywords": ["zhin", "zhin.js", "bot", "plugin", "qrcode", "qr"],
|
|
22
|
+
"author": { "name": "lc-cn", "email": "admin@liucl.cn", "url": "https://github.com/lc-cn" },
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {},
|
|
25
|
+
"devDependencies": { "typescript": "^5.9.3", "zhin.js": "workspace:*" },
|
|
26
|
+
"peerDependencies": { "zhin.js": ">=1.0.60" },
|
|
27
|
+
"repository": { "type": "git", "url": "git+https://github.com/zhinjs/zhin.git", "directory": "plugins/utils/qrcode" },
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public",
|
|
30
|
+
"registry": "https://registry.npmjs.org"
|
|
31
|
+
}
|
|
32
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { MessageCommand, ZhinTool, usePlugin } from 'zhin.js'
|
|
2
|
+
|
|
3
|
+
const { addCommand, addTool, logger } = usePlugin()
|
|
4
|
+
|
|
5
|
+
const QR_API_BASE = 'https://api.qrserver.com/v1'
|
|
6
|
+
|
|
7
|
+
// ====== 命令:二维码 <text> ======
|
|
8
|
+
addCommand(
|
|
9
|
+
new MessageCommand('二维码 <text:text>')
|
|
10
|
+
.desc('根据文本或链接生成二维码图片')
|
|
11
|
+
.action(async (_message, result) => {
|
|
12
|
+
const text = result.params.text
|
|
13
|
+
const qrUrl = `${QR_API_BASE}/create-qr-code/?size=300x300&data=${encodeURIComponent(text)}`
|
|
14
|
+
logger.info(`生成二维码: ${text}`)
|
|
15
|
+
return [{ type: 'image' as const, data: { url: qrUrl } }]
|
|
16
|
+
}),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
// ====== 命令:扫码 <url> ======
|
|
20
|
+
addCommand(
|
|
21
|
+
new MessageCommand('扫码 <url:text>')
|
|
22
|
+
.desc('识别图片中的二维码内容')
|
|
23
|
+
.action(async (_message, result) => {
|
|
24
|
+
const imageUrl = result.params.url
|
|
25
|
+
const apiUrl = `${QR_API_BASE}/read-qr-code/?fileurl=${encodeURIComponent(imageUrl)}`
|
|
26
|
+
try {
|
|
27
|
+
const response = await fetch(apiUrl)
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
return '二维码识别服务请求失败'
|
|
30
|
+
}
|
|
31
|
+
const data = (await response.json()) as Array<{
|
|
32
|
+
symbol: Array<{ data: string | null; error: string | null }>
|
|
33
|
+
}>
|
|
34
|
+
const symbol = data?.[0]?.symbol?.[0]
|
|
35
|
+
if (!symbol || symbol.error || !symbol.data) {
|
|
36
|
+
return `未能识别二维码内容${symbol?.error ? `:${symbol.error}` : ''}`
|
|
37
|
+
}
|
|
38
|
+
return `识别结果:${symbol.data}`
|
|
39
|
+
} catch (e) {
|
|
40
|
+
logger.warn('扫码失败', e)
|
|
41
|
+
return '二维码识别失败,请检查图片链接是否有效'
|
|
42
|
+
}
|
|
43
|
+
}),
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
// ====== AI 工具:qrcode_generate ======
|
|
47
|
+
addTool(
|
|
48
|
+
new ZhinTool('qrcode_generate')
|
|
49
|
+
.desc('根据文本或 URL 生成二维码图片')
|
|
50
|
+
.keyword('二维码', 'QR', 'qrcode')
|
|
51
|
+
.tag('qrcode', 'image')
|
|
52
|
+
.param('text', { type: 'string', description: '要编码到二维码中的文本或 URL' }, true)
|
|
53
|
+
.execute(async (args) => {
|
|
54
|
+
const qrUrl = `${QR_API_BASE}/create-qr-code/?size=300x300&data=${encodeURIComponent(args.text)}`
|
|
55
|
+
return JSON.stringify([{ type: 'image', data: { url: qrUrl } }])
|
|
56
|
+
})
|
|
57
|
+
.toTool(),
|
|
58
|
+
)
|