@zhin.js/plugin-music 1.0.0 → 1.0.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/lib/index.js +2 -46
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
- package/src/index.tsx +2 -61
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "zhin.js/jsx-runtime";
|
|
2
|
-
import { usePlugin, defineComponent,
|
|
2
|
+
import { usePlugin, defineComponent, ZhinTool } from "zhin.js";
|
|
3
3
|
import { musicServices } from "./sources/index.js";
|
|
4
4
|
import { sourceConfigMap } from "./config.js";
|
|
5
5
|
const plugin = usePlugin();
|
|
@@ -66,44 +66,7 @@ const searchMusicTool = new ZhinTool('music_search')
|
|
|
66
66
|
total: allMusic.length,
|
|
67
67
|
};
|
|
68
68
|
})
|
|
69
|
-
.platform('icqq') // 限制为 icqq 平台
|
|
70
|
-
.action(async (message, result) => {
|
|
71
|
-
const keyword = result.params.keyword;
|
|
72
|
-
const sourcesParam = result.params.sources || [];
|
|
73
|
-
// 解析音乐源
|
|
74
|
-
const sources = [];
|
|
75
|
-
for (const source of sourcesParam) {
|
|
76
|
-
const normalized = source.toLowerCase();
|
|
77
|
-
if (["qq", "netease"].includes(normalized)) {
|
|
78
|
-
sources.push(normalized);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// 如果没有指定音乐源,默认搜索 QQ 和网易云
|
|
82
|
-
const searchSources = sources.length > 0 ? sources : ["qq", "netease"];
|
|
83
|
-
logger.info(`搜索音乐: ${keyword}, 来源: ${searchSources.join(", ")}`);
|
|
84
|
-
// 并行搜索多个音乐源
|
|
85
|
-
const searchPromises = searchSources.map((source) => musicServices[source].search(keyword, 5));
|
|
86
|
-
const searchResults = await Promise.all(searchPromises);
|
|
87
|
-
const allMusic = searchResults.flat().filter(Boolean);
|
|
88
|
-
if (allMusic.length === 0) {
|
|
89
|
-
await message.$reply("没有找到结果");
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// 使用 Prompt 让用户选择
|
|
93
|
-
const prompt = new Prompt(plugin, message);
|
|
94
|
-
const musicUrl = await prompt.pick("请选择搜索结果", {
|
|
95
|
-
type: "text",
|
|
96
|
-
options: allMusic.map((music) => ({
|
|
97
|
-
label: `${music.title} [${music.source.toUpperCase()}]`,
|
|
98
|
-
value: music.url,
|
|
99
|
-
})),
|
|
100
|
-
});
|
|
101
|
-
if (!musicUrl)
|
|
102
|
-
return;
|
|
103
|
-
const music = allMusic.find((m) => m.url === musicUrl);
|
|
104
|
-
// 现在支持直接使用 JSX 语法,异步组件会自动 await
|
|
105
|
-
return _jsx(ShareMusic, { platform: music.source, musicId: music.id });
|
|
106
|
-
});
|
|
69
|
+
.platform('icqq'); // 限制为 icqq 平台
|
|
107
70
|
// 分享音乐工具(直接分享指定音乐)
|
|
108
71
|
const shareMusicTool = new ZhinTool('music_share')
|
|
109
72
|
.desc('分享指定的音乐')
|
|
@@ -135,13 +98,6 @@ const shareMusicTool = new ZhinTool('music_share')
|
|
|
135
98
|
catch (error) {
|
|
136
99
|
return { success: false, error: error instanceof Error ? error.message : String(error) };
|
|
137
100
|
}
|
|
138
|
-
})
|
|
139
|
-
.action(async (message, result) => {
|
|
140
|
-
const { id, source } = result.params;
|
|
141
|
-
if (!musicServices[source]) {
|
|
142
|
-
return `❌ 不支持的音乐源: ${source}`;
|
|
143
|
-
}
|
|
144
|
-
return _jsx(ShareMusic, { platform: source, musicId: id });
|
|
145
101
|
});
|
|
146
102
|
// 注册工具
|
|
147
103
|
useContext('tool', (toolService) => {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/plugin-music",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Music search and sharing plugin for Zhin.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"dependencies": {},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"typescript": "^5.
|
|
44
|
-
"zhin.js": "1.0.
|
|
45
|
-
"@zhin.js/adapter-icqq": "2.0.
|
|
43
|
+
"typescript": "^5.9.3",
|
|
44
|
+
"zhin.js": "1.0.61",
|
|
45
|
+
"@zhin.js/adapter-icqq": "2.0.3"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@zhin.js/adapter-icqq": "2.0.
|
|
49
|
-
"zhin.js": "1.0.
|
|
48
|
+
"@zhin.js/adapter-icqq": "2.0.3",
|
|
49
|
+
"zhin.js": "1.0.61"
|
|
50
50
|
},
|
|
51
51
|
"peerDependenciesMeta": {
|
|
52
52
|
"@zhin.js/adapter-icqq": {
|
package/src/index.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { usePlugin, defineComponent,
|
|
2
|
-
import type {} from '@zhin.js/adapter-icqq'
|
|
1
|
+
import { usePlugin, defineComponent, ZhinTool } from "zhin.js";
|
|
3
2
|
import { musicServices } from "./sources/index.js";
|
|
4
3
|
import { sourceConfigMap } from "./config.js";
|
|
5
4
|
import type { MusicSource } from "./types.js";
|
|
@@ -81,56 +80,7 @@ const searchMusicTool = new ZhinTool('music_search')
|
|
|
81
80
|
total: allMusic.length,
|
|
82
81
|
};
|
|
83
82
|
})
|
|
84
|
-
.platform('icqq') // 限制为 icqq 平台
|
|
85
|
-
.action(async (message: Message, result: any) => {
|
|
86
|
-
const keyword = result.params.keyword;
|
|
87
|
-
const sourcesParam = result.params.sources || [];
|
|
88
|
-
|
|
89
|
-
// 解析音乐源
|
|
90
|
-
const sources: MusicSource[] = [];
|
|
91
|
-
for (const source of sourcesParam) {
|
|
92
|
-
const normalized = source.toLowerCase();
|
|
93
|
-
if (["qq", "netease"].includes(normalized)) {
|
|
94
|
-
sources.push(normalized as MusicSource);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// 如果没有指定音乐源,默认搜索 QQ 和网易云
|
|
99
|
-
const searchSources: MusicSource[] =
|
|
100
|
-
sources.length > 0 ? sources : ["qq", "netease"];
|
|
101
|
-
|
|
102
|
-
logger.info(`搜索音乐: ${keyword}, 来源: ${searchSources.join(", ")}`);
|
|
103
|
-
|
|
104
|
-
// 并行搜索多个音乐源
|
|
105
|
-
const searchPromises = searchSources.map((source) =>
|
|
106
|
-
musicServices[source].search(keyword, 5)
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
const searchResults = await Promise.all(searchPromises);
|
|
110
|
-
const allMusic = searchResults.flat().filter(Boolean);
|
|
111
|
-
|
|
112
|
-
if (allMusic.length === 0) {
|
|
113
|
-
await message.$reply("没有找到结果");
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// 使用 Prompt 让用户选择
|
|
118
|
-
const prompt = new Prompt(plugin, message);
|
|
119
|
-
const musicUrl = await prompt.pick("请选择搜索结果", {
|
|
120
|
-
type: "text",
|
|
121
|
-
options: allMusic.map((music) => ({
|
|
122
|
-
label: `${music.title} [${music.source.toUpperCase()}]`,
|
|
123
|
-
value: music.url,
|
|
124
|
-
})),
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
if (!musicUrl) return;
|
|
128
|
-
|
|
129
|
-
const music = allMusic.find((m) => m.url === musicUrl)!;
|
|
130
|
-
|
|
131
|
-
// 现在支持直接使用 JSX 语法,异步组件会自动 await
|
|
132
|
-
return <ShareMusic platform={music.source} musicId={music.id} />
|
|
133
|
-
});
|
|
83
|
+
.platform('icqq'); // 限制为 icqq 平台
|
|
134
84
|
|
|
135
85
|
// 分享音乐工具(直接分享指定音乐)
|
|
136
86
|
const shareMusicTool = new ZhinTool('music_share')
|
|
@@ -163,15 +113,6 @@ const shareMusicTool = new ZhinTool('music_share')
|
|
|
163
113
|
} catch (error) {
|
|
164
114
|
return { success: false, error: error instanceof Error ? error.message : String(error) };
|
|
165
115
|
}
|
|
166
|
-
})
|
|
167
|
-
.action(async (message: Message, result: any) => {
|
|
168
|
-
const { id, source } = result.params;
|
|
169
|
-
|
|
170
|
-
if (!musicServices[source as MusicSource]) {
|
|
171
|
-
return `❌ 不支持的音乐源: ${source}`;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return <ShareMusic platform={source as MusicSource} musicId={id} />;
|
|
175
116
|
});
|
|
176
117
|
|
|
177
118
|
// 注册工具
|