koishi-plugin-chatluna-toolbox 0.0.19 → 0.0.20
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/README.md +2 -0
- package/lib/index.js +221 -57
- package/package.json +2 -3
- package/client/ToolboxDetailsLoader.vue +0 -20
- package/client/constants.ts +0 -19
- package/client/index.ts +0 -15
package/README.md
CHANGED
package/lib/index.js
CHANGED
|
@@ -418,12 +418,14 @@ __export(index_exports, {
|
|
|
418
418
|
createDeleteMessageTool: () => createDeleteMessageTool,
|
|
419
419
|
createGroupInfoProvider: () => createGroupInfoProvider,
|
|
420
420
|
createGroupShutListProvider: () => createGroupShutListProvider,
|
|
421
|
+
createLeaveGroupTool: () => createLeaveGroupTool,
|
|
421
422
|
createLogger: () => createLogger,
|
|
422
423
|
createPokeTool: () => createPokeTool,
|
|
423
424
|
createRandomProvider: () => createRandomProvider,
|
|
424
425
|
createSearchGroupMemberTool: () => createSearchGroupMemberTool,
|
|
425
426
|
createSetGroupBanTool: () => createSetGroupBanTool,
|
|
426
427
|
createSetGroupCardTool: () => createSetGroupCardTool,
|
|
428
|
+
createSetGroupKickTool: () => createSetGroupKickTool,
|
|
427
429
|
createSetGroupSpecialTitleTool: () => createSetGroupSpecialTitleTool,
|
|
428
430
|
createSetMsgEmojiTool: () => createSetMsgEmojiTool,
|
|
429
431
|
createSetProfileTool: () => createSetProfileTool,
|
|
@@ -444,6 +446,8 @@ __export(index_exports, {
|
|
|
444
446
|
searchGroupMember: () => searchGroupMember,
|
|
445
447
|
sendDeleteMessage: () => sendDeleteMessage,
|
|
446
448
|
sendGroupBan: () => sendGroupBan,
|
|
449
|
+
sendGroupKick: () => sendGroupKick,
|
|
450
|
+
sendLeaveGroup: () => sendLeaveGroup,
|
|
447
451
|
sendMsgEmoji: () => sendMsgEmoji,
|
|
448
452
|
sendPoke: () => sendPoke,
|
|
449
453
|
sendSetGroupCard: () => sendSetGroupCard,
|
|
@@ -476,6 +480,8 @@ var DEFAULT_SET_QQ_AVATAR_TOOL_DESCRIPTION = "\u4FEE\u6539\u673A\u5668\u4EBA QQ
|
|
|
476
480
|
var DEFAULT_SET_GROUP_CARD_TOOL_DESCRIPTION = "\u4FEE\u6539\u7FA4\u6210\u5458\u7684\u7FA4\u6635\u79F0\u3002";
|
|
477
481
|
var DEFAULT_SEARCH_GROUP_MEMBER_TOOL_DESCRIPTION = "\u6839\u636E qqid \u7CBE\u786E\u67E5\u8BE2\u7FA4\u6210\u5458\u7684\u7FA4\u6635\u79F0\u4E0E QQ \u6635\u79F0\uFF0C\u6216\u6839\u636E\u7FA4\u6635\u79F0/QQ \u6635\u79F0\u641C\u7D22 qqid\u3002\u9ED8\u8BA4\u67E5\u8BE2\u5F53\u524D\u7FA4\u804A\uFF0C\u53EF\u901A\u8FC7 groupId \u67E5\u8BE2\u6307\u5B9A\u7FA4\u3002";
|
|
478
482
|
var DEFAULT_SET_GROUP_BAN_TOOL_DESCRIPTION = "\u7528\u4E8E\u7BA1\u7406\u7FA4\u6210\u5458\u7981\u8A00\u72B6\u6001\uFF0C\u53EF\u8BBE\u7F6E\u7981\u8A00\u65F6\u957F\u6216\u89E3\u9664\u7981\u8A00\u3002";
|
|
483
|
+
var DEFAULT_LEAVE_GROUP_TOOL_DESCRIPTION = "\u8BA9\u673A\u5668\u4EBA\u9000\u51FA\u5F53\u524D\u7FA4\u804A\u3002";
|
|
484
|
+
var DEFAULT_SET_GROUP_KICK_TOOL_DESCRIPTION = "\u5C06\u6307\u5B9A\u6210\u5458\u8E22\u51FA\u7FA4\u804A\u3002";
|
|
479
485
|
var DEFAULT_SET_GROUP_SPECIAL_TITLE_TOOL_DESCRIPTION = "\u4FEE\u6539\u6216\u6E05\u9664\u7FA4\u6210\u5458\u7684 QQ \u7FA4\u4E13\u5C5E\u5934\u8854\u3002";
|
|
480
486
|
var DEFAULT_SET_MSG_EMOJI_TOOL_DESCRIPTION = "\u5BF9\u6307\u5B9A\u6D88\u606F\u6DFB\u52A0\u8868\u60C5\u56DE\u5E94\u3002";
|
|
481
487
|
var DEFAULT_DELETE_MESSAGE_TOOL_DESCRIPTION = "\u6839\u636E\u6D88\u606F ID \u64A4\u56DE\u6307\u5B9A\u6D88\u606F\u3002";
|
|
@@ -489,6 +495,8 @@ var EnabledNativeToolsSchema = import_koishi2.Schema.array(
|
|
|
489
495
|
import_koishi2.Schema.const("setGroupCard").description("\u4FEE\u6539\u7FA4\u6210\u5458\u6635\u79F0"),
|
|
490
496
|
import_koishi2.Schema.const("searchGroupMember").description("\u641C\u7D22\u7FA4\u6210\u5458"),
|
|
491
497
|
import_koishi2.Schema.const("setGroupBan").description("\u7981\u8A00\u7FA4\u6210\u5458"),
|
|
498
|
+
import_koishi2.Schema.const("leaveGroup").description("\u9000\u7FA4"),
|
|
499
|
+
import_koishi2.Schema.const("setGroupKick").description("\u8E22\u51FA\u7FA4\u6210\u5458"),
|
|
492
500
|
import_koishi2.Schema.const("setGroupSpecialTitle").description("\u4FEE\u6539\u7FA4\u6210\u5458\u4E13\u5C5E\u5934\u8854"),
|
|
493
501
|
import_koishi2.Schema.const("setMsgEmoji").description("\u6D88\u606F\u8868\u60C5"),
|
|
494
502
|
import_koishi2.Schema.const("deleteMessage").description("\u64A4\u56DE\u6D88\u606F")
|
|
@@ -527,6 +535,16 @@ var NativeToolAdvancedSettingsSchema = import_koishi2.Schema.object({
|
|
|
527
535
|
toolName: import_koishi2.Schema.string().default("set_group_ban").description("\u5DE5\u5177\u540D\u79F0"),
|
|
528
536
|
description: import_koishi2.Schema.string().default(DEFAULT_SET_GROUP_BAN_TOOL_DESCRIPTION).description("\u5DE5\u5177\u63CF\u8FF0")
|
|
529
537
|
}).description("\u7981\u8A00\u5DE5\u5177").collapse(),
|
|
538
|
+
leaveGroup: import_koishi2.Schema.object({
|
|
539
|
+
enabled: import_koishi2.Schema.boolean().default(false).hidden(),
|
|
540
|
+
toolName: import_koishi2.Schema.string().default("set_group_leave").description("\u5DE5\u5177\u540D\u79F0"),
|
|
541
|
+
description: import_koishi2.Schema.string().default(DEFAULT_LEAVE_GROUP_TOOL_DESCRIPTION).description("\u5DE5\u5177\u63CF\u8FF0")
|
|
542
|
+
}).description("\u9000\u7FA4\u5DE5\u5177").collapse(),
|
|
543
|
+
setGroupKick: import_koishi2.Schema.object({
|
|
544
|
+
enabled: import_koishi2.Schema.boolean().default(false).hidden(),
|
|
545
|
+
toolName: import_koishi2.Schema.string().default("set_group_kick").description("\u5DE5\u5177\u540D\u79F0"),
|
|
546
|
+
description: import_koishi2.Schema.string().default(DEFAULT_SET_GROUP_KICK_TOOL_DESCRIPTION).description("\u5DE5\u5177\u63CF\u8FF0")
|
|
547
|
+
}).description("\u8E22\u51FA\u7FA4\u6210\u5458\u5DE5\u5177").collapse(),
|
|
530
548
|
setGroupSpecialTitle: import_koishi2.Schema.object({
|
|
531
549
|
enabled: import_koishi2.Schema.boolean().default(false).hidden(),
|
|
532
550
|
toolName: import_koishi2.Schema.string().default("set_group_special_title").description("\u5DE5\u5177\u540D\u79F0"),
|
|
@@ -844,9 +862,60 @@ function createDeleteMessageTool(deps) {
|
|
|
844
862
|
}();
|
|
845
863
|
}
|
|
846
864
|
|
|
847
|
-
// src/features/native-tools/tools/
|
|
865
|
+
// src/features/native-tools/tools/leave-group.ts
|
|
848
866
|
var import_zod2 = require("zod");
|
|
849
867
|
var import_tools2 = require("@langchain/core/tools");
|
|
868
|
+
function resolveGroupId(session, groupId) {
|
|
869
|
+
return groupId?.trim() || (session.guildId ? String(session.guildId).trim() : "") || (session.channelId ? String(session.channelId).trim() : "");
|
|
870
|
+
}
|
|
871
|
+
async function sendLeaveGroup(params) {
|
|
872
|
+
try {
|
|
873
|
+
const { session, groupId, log } = params;
|
|
874
|
+
const {
|
|
875
|
+
error,
|
|
876
|
+
internal,
|
|
877
|
+
session: validatedSession
|
|
878
|
+
} = ensureOneBotSession(session);
|
|
879
|
+
if (error) return error;
|
|
880
|
+
const resolvedGroupId = resolveGroupId(validatedSession, groupId);
|
|
881
|
+
if (!resolvedGroupId) {
|
|
882
|
+
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
883
|
+
}
|
|
884
|
+
await callOneBotAPI(
|
|
885
|
+
internal,
|
|
886
|
+
"set_group_leave",
|
|
887
|
+
{ group_id: resolvedGroupId },
|
|
888
|
+
["setGroupLeave"]
|
|
889
|
+
);
|
|
890
|
+
const message = `\u5DF2\u9000\u51FA\u7FA4 ${resolvedGroupId}\u3002`;
|
|
891
|
+
log?.("info", message);
|
|
892
|
+
return message;
|
|
893
|
+
} catch (error) {
|
|
894
|
+
params.log?.("warn", "set_group_leave failed", error);
|
|
895
|
+
return `set_group_leave failed: ${error.message}`;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
function createLeaveGroupTool(deps) {
|
|
899
|
+
const { toolName, description, log } = deps;
|
|
900
|
+
return new class extends import_tools2.StructuredTool {
|
|
901
|
+
name = toolName || "set_group_leave";
|
|
902
|
+
description = description || DEFAULT_LEAVE_GROUP_TOOL_DESCRIPTION;
|
|
903
|
+
schema = import_zod2.z.object({
|
|
904
|
+
groupId: import_zod2.z.string().optional().describe("Target group ID. Defaults to current session group.")
|
|
905
|
+
});
|
|
906
|
+
async _call(input, _manager, runnable) {
|
|
907
|
+
return sendLeaveGroup({
|
|
908
|
+
session: getSession(runnable),
|
|
909
|
+
groupId: input.groupId,
|
|
910
|
+
log
|
|
911
|
+
});
|
|
912
|
+
}
|
|
913
|
+
}();
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
// src/features/native-tools/tools/poke.ts
|
|
917
|
+
var import_zod3 = require("zod");
|
|
918
|
+
var import_tools3 = require("@langchain/core/tools");
|
|
850
919
|
async function sendPoke(params) {
|
|
851
920
|
try {
|
|
852
921
|
const { session, userId, groupId, log, protocol } = params;
|
|
@@ -893,12 +962,12 @@ async function sendPoke(params) {
|
|
|
893
962
|
}
|
|
894
963
|
function createPokeTool(deps) {
|
|
895
964
|
const { toolName, description, log, protocol } = deps;
|
|
896
|
-
return new class extends
|
|
965
|
+
return new class extends import_tools3.StructuredTool {
|
|
897
966
|
name = toolName || "poke_user";
|
|
898
967
|
description = description || DEFAULT_POKE_TOOL_DESCRIPTION;
|
|
899
|
-
schema =
|
|
900
|
-
userId:
|
|
901
|
-
groupId:
|
|
968
|
+
schema = import_zod3.z.object({
|
|
969
|
+
userId: import_zod3.z.string().min(1, "userId is required").describe("The user ID to poke."),
|
|
970
|
+
groupId: import_zod3.z.string().optional().describe("Optional: specify a different group ID.")
|
|
902
971
|
});
|
|
903
972
|
async _call(input, _manager, runnable) {
|
|
904
973
|
const session = getSession(runnable);
|
|
@@ -914,8 +983,8 @@ function createPokeTool(deps) {
|
|
|
914
983
|
}
|
|
915
984
|
|
|
916
985
|
// src/features/native-tools/tools/search-group-member.ts
|
|
917
|
-
var
|
|
918
|
-
var
|
|
986
|
+
var import_zod4 = require("zod");
|
|
987
|
+
var import_tools4 = require("@langchain/core/tools");
|
|
919
988
|
var MAX_RESULTS = 10;
|
|
920
989
|
function pickFirst(...values) {
|
|
921
990
|
for (const value of values) {
|
|
@@ -925,7 +994,7 @@ function pickFirst(...values) {
|
|
|
925
994
|
}
|
|
926
995
|
return "";
|
|
927
996
|
}
|
|
928
|
-
function
|
|
997
|
+
function resolveGroupId2(session, groupId) {
|
|
929
998
|
return groupId?.trim() || session.guildId?.trim() || (session.event?.guild?.id || "");
|
|
930
999
|
}
|
|
931
1000
|
function normalizeId(value) {
|
|
@@ -993,7 +1062,7 @@ async function searchGroupMember(params) {
|
|
|
993
1062
|
session: validatedSession
|
|
994
1063
|
} = ensureOneBotSession(session);
|
|
995
1064
|
if (error) return error;
|
|
996
|
-
const resolvedGroupId =
|
|
1065
|
+
const resolvedGroupId = resolveGroupId2(validatedSession, groupId);
|
|
997
1066
|
if (!resolvedGroupId) {
|
|
998
1067
|
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
999
1068
|
}
|
|
@@ -1018,13 +1087,13 @@ async function searchGroupMember(params) {
|
|
|
1018
1087
|
}
|
|
1019
1088
|
function createSearchGroupMemberTool(deps) {
|
|
1020
1089
|
const { toolName, description, log } = deps;
|
|
1021
|
-
return new class extends
|
|
1090
|
+
return new class extends import_tools4.StructuredTool {
|
|
1022
1091
|
name = toolName || "search_group_member";
|
|
1023
1092
|
description = description || DEFAULT_SEARCH_GROUP_MEMBER_TOOL_DESCRIPTION;
|
|
1024
|
-
schema =
|
|
1025
|
-
groupId:
|
|
1026
|
-
query:
|
|
1027
|
-
mode:
|
|
1093
|
+
schema = import_zod4.z.object({
|
|
1094
|
+
groupId: import_zod4.z.string().optional().describe("Target group ID. Defaults to current session group."),
|
|
1095
|
+
query: import_zod4.z.string().min(1, "query is required").describe("qqid, group card, or QQ nickname to search."),
|
|
1096
|
+
mode: import_zod4.z.enum(["auto", "byName", "byQQ"]).optional().describe("Search mode. Defaults to auto.")
|
|
1028
1097
|
});
|
|
1029
1098
|
async _call(input, _manager, runnable) {
|
|
1030
1099
|
return searchGroupMember({
|
|
@@ -1039,9 +1108,9 @@ function createSearchGroupMemberTool(deps) {
|
|
|
1039
1108
|
}
|
|
1040
1109
|
|
|
1041
1110
|
// src/features/native-tools/tools/set-group-ban.ts
|
|
1042
|
-
var
|
|
1043
|
-
var
|
|
1044
|
-
function
|
|
1111
|
+
var import_zod5 = require("zod");
|
|
1112
|
+
var import_tools5 = require("@langchain/core/tools");
|
|
1113
|
+
function resolveGroupId3(session, groupId) {
|
|
1045
1114
|
return groupId?.trim() || (session.guildId || "").trim() || (session.channelId || "").trim() || (session.roomId || "").trim();
|
|
1046
1115
|
}
|
|
1047
1116
|
function parseDuration(duration) {
|
|
@@ -1060,7 +1129,7 @@ async function sendGroupBan(params) {
|
|
|
1060
1129
|
session: validatedSession
|
|
1061
1130
|
} = ensureOneBotSession(session);
|
|
1062
1131
|
if (error) return error;
|
|
1063
|
-
const resolvedGroupId =
|
|
1132
|
+
const resolvedGroupId = resolveGroupId3(validatedSession, groupId);
|
|
1064
1133
|
if (!resolvedGroupId) {
|
|
1065
1134
|
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
1066
1135
|
}
|
|
@@ -1090,13 +1159,13 @@ async function sendGroupBan(params) {
|
|
|
1090
1159
|
}
|
|
1091
1160
|
function createSetGroupBanTool(deps) {
|
|
1092
1161
|
const { toolName, description, protocol, log } = deps;
|
|
1093
|
-
return new class extends
|
|
1162
|
+
return new class extends import_tools5.StructuredTool {
|
|
1094
1163
|
name = toolName || "set_group_ban";
|
|
1095
1164
|
description = description || DEFAULT_SET_GROUP_BAN_TOOL_DESCRIPTION;
|
|
1096
|
-
schema =
|
|
1097
|
-
groupId:
|
|
1098
|
-
userId:
|
|
1099
|
-
duration:
|
|
1165
|
+
schema = import_zod5.z.object({
|
|
1166
|
+
groupId: import_zod5.z.string().optional().describe("Target group ID. Defaults to current session group."),
|
|
1167
|
+
userId: import_zod5.z.string().min(1, "userId is required").describe("Target member user ID."),
|
|
1168
|
+
duration: import_zod5.z.union([import_zod5.z.string(), import_zod5.z.number().int().min(0)]).describe("Mute duration in seconds. Use 0 to unmute.")
|
|
1100
1169
|
});
|
|
1101
1170
|
async _call(input, _manager, runnable) {
|
|
1102
1171
|
const session = getSession(runnable);
|
|
@@ -1113,8 +1182,8 @@ function createSetGroupBanTool(deps) {
|
|
|
1113
1182
|
}
|
|
1114
1183
|
|
|
1115
1184
|
// src/features/native-tools/tools/set-group-card.ts
|
|
1116
|
-
var
|
|
1117
|
-
var
|
|
1185
|
+
var import_zod6 = require("zod");
|
|
1186
|
+
var import_tools6 = require("@langchain/core/tools");
|
|
1118
1187
|
async function sendSetGroupCard(params) {
|
|
1119
1188
|
try {
|
|
1120
1189
|
const { session, userId, card, groupId, log } = params;
|
|
@@ -1145,13 +1214,13 @@ async function sendSetGroupCard(params) {
|
|
|
1145
1214
|
}
|
|
1146
1215
|
function createSetGroupCardTool(deps) {
|
|
1147
1216
|
const { toolName, description, log } = deps;
|
|
1148
|
-
return new class extends
|
|
1217
|
+
return new class extends import_tools6.StructuredTool {
|
|
1149
1218
|
name = toolName || "set_group_card";
|
|
1150
1219
|
description = description || DEFAULT_SET_GROUP_CARD_TOOL_DESCRIPTION;
|
|
1151
|
-
schema =
|
|
1152
|
-
groupId:
|
|
1153
|
-
userId:
|
|
1154
|
-
card:
|
|
1220
|
+
schema = import_zod6.z.object({
|
|
1221
|
+
groupId: import_zod6.z.string().optional().describe("Target group ID. Defaults to current session group."),
|
|
1222
|
+
userId: import_zod6.z.string().min(1, "userId is required").describe("Target member user ID."),
|
|
1223
|
+
card: import_zod6.z.string().min(1, "card is required").describe("New group card for the member.")
|
|
1155
1224
|
});
|
|
1156
1225
|
async _call(input, _manager, runnable) {
|
|
1157
1226
|
return sendSetGroupCard({
|
|
@@ -1165,10 +1234,65 @@ function createSetGroupCardTool(deps) {
|
|
|
1165
1234
|
}();
|
|
1166
1235
|
}
|
|
1167
1236
|
|
|
1237
|
+
// src/features/native-tools/tools/set-group-kick.ts
|
|
1238
|
+
var import_zod7 = require("zod");
|
|
1239
|
+
var import_tools7 = require("@langchain/core/tools");
|
|
1240
|
+
function resolveGroupId4(session, groupId) {
|
|
1241
|
+
return groupId?.trim() || (session.guildId ? String(session.guildId).trim() : "") || (session.channelId ? String(session.channelId).trim() : "");
|
|
1242
|
+
}
|
|
1243
|
+
async function sendGroupKick(params) {
|
|
1244
|
+
try {
|
|
1245
|
+
const { session, userId, groupId, log } = params;
|
|
1246
|
+
const {
|
|
1247
|
+
error,
|
|
1248
|
+
internal,
|
|
1249
|
+
session: validatedSession
|
|
1250
|
+
} = ensureOneBotSession(session);
|
|
1251
|
+
if (error) return error;
|
|
1252
|
+
const resolvedGroupId = resolveGroupId4(validatedSession, groupId);
|
|
1253
|
+
if (!resolvedGroupId) {
|
|
1254
|
+
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
1255
|
+
}
|
|
1256
|
+
const userIdRaw = userId.trim();
|
|
1257
|
+
if (!userIdRaw) return "userId is required.";
|
|
1258
|
+
await callOneBotAPI(
|
|
1259
|
+
internal,
|
|
1260
|
+
"set_group_kick",
|
|
1261
|
+
{ group_id: resolvedGroupId, user_id: userIdRaw },
|
|
1262
|
+
["setGroupKick"]
|
|
1263
|
+
);
|
|
1264
|
+
const message = `\u5DF2\u5C06\u7528\u6237 ${userIdRaw} \u79FB\u51FA\u7FA4 ${resolvedGroupId}\u3002`;
|
|
1265
|
+
log?.("info", message);
|
|
1266
|
+
return message;
|
|
1267
|
+
} catch (error) {
|
|
1268
|
+
params.log?.("warn", "set_group_kick failed", error);
|
|
1269
|
+
return `set_group_kick failed: ${error.message}`;
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
function createSetGroupKickTool(deps) {
|
|
1273
|
+
const { toolName, description, log } = deps;
|
|
1274
|
+
return new class extends import_tools7.StructuredTool {
|
|
1275
|
+
name = toolName || "set_group_kick";
|
|
1276
|
+
description = description || DEFAULT_SET_GROUP_KICK_TOOL_DESCRIPTION;
|
|
1277
|
+
schema = import_zod7.z.object({
|
|
1278
|
+
groupId: import_zod7.z.string().optional().describe("Target group ID. Defaults to current session group."),
|
|
1279
|
+
userId: import_zod7.z.string().min(1, "userId is required").describe("Target member user ID.")
|
|
1280
|
+
});
|
|
1281
|
+
async _call(input, _manager, runnable) {
|
|
1282
|
+
return sendGroupKick({
|
|
1283
|
+
session: getSession(runnable),
|
|
1284
|
+
groupId: input.groupId,
|
|
1285
|
+
userId: input.userId,
|
|
1286
|
+
log
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
}();
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1168
1292
|
// src/features/native-tools/tools/set-group-special-title.ts
|
|
1169
|
-
var
|
|
1170
|
-
var
|
|
1171
|
-
function
|
|
1293
|
+
var import_zod8 = require("zod");
|
|
1294
|
+
var import_tools8 = require("@langchain/core/tools");
|
|
1295
|
+
function resolveGroupId5(session, groupId) {
|
|
1172
1296
|
return groupId?.trim() || (session.guildId || "").trim() || (session.channelId || "").trim() || (session.roomId || "").trim();
|
|
1173
1297
|
}
|
|
1174
1298
|
async function sendSetGroupSpecialTitle(params) {
|
|
@@ -1180,7 +1304,7 @@ async function sendSetGroupSpecialTitle(params) {
|
|
|
1180
1304
|
session: validatedSession
|
|
1181
1305
|
} = ensureOneBotSession(session);
|
|
1182
1306
|
if (error) return error;
|
|
1183
|
-
const resolvedGroupId =
|
|
1307
|
+
const resolvedGroupId = resolveGroupId5(validatedSession, groupId);
|
|
1184
1308
|
if (!resolvedGroupId) {
|
|
1185
1309
|
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
1186
1310
|
}
|
|
@@ -1207,13 +1331,13 @@ async function sendSetGroupSpecialTitle(params) {
|
|
|
1207
1331
|
}
|
|
1208
1332
|
function createSetGroupSpecialTitleTool(deps) {
|
|
1209
1333
|
const { toolName, description, protocol, log } = deps;
|
|
1210
|
-
return new class extends
|
|
1334
|
+
return new class extends import_tools8.StructuredTool {
|
|
1211
1335
|
name = toolName || "set_group_special_title";
|
|
1212
1336
|
description = description || DEFAULT_SET_GROUP_SPECIAL_TITLE_TOOL_DESCRIPTION;
|
|
1213
|
-
schema =
|
|
1214
|
-
groupId:
|
|
1215
|
-
userId:
|
|
1216
|
-
title:
|
|
1337
|
+
schema = import_zod8.z.object({
|
|
1338
|
+
groupId: import_zod8.z.string().optional().describe("Target group ID. Defaults to current session group."),
|
|
1339
|
+
userId: import_zod8.z.string().min(1, "userId is required").describe("Target member user ID."),
|
|
1340
|
+
title: import_zod8.z.string().describe("New special title. Use an empty string to clear it.")
|
|
1217
1341
|
});
|
|
1218
1342
|
async _call(input, _manager, runnable) {
|
|
1219
1343
|
const session = getSession(runnable);
|
|
@@ -1230,8 +1354,8 @@ function createSetGroupSpecialTitleTool(deps) {
|
|
|
1230
1354
|
}
|
|
1231
1355
|
|
|
1232
1356
|
// src/features/native-tools/tools/set-msg-emoji.ts
|
|
1233
|
-
var
|
|
1234
|
-
var
|
|
1357
|
+
var import_zod9 = require("zod");
|
|
1358
|
+
var import_tools9 = require("@langchain/core/tools");
|
|
1235
1359
|
async function sendMsgEmoji(params) {
|
|
1236
1360
|
try {
|
|
1237
1361
|
const { session, messageId, emojiId, log, protocol } = params;
|
|
@@ -1262,12 +1386,12 @@ async function sendMsgEmoji(params) {
|
|
|
1262
1386
|
}
|
|
1263
1387
|
function createSetMsgEmojiTool(deps) {
|
|
1264
1388
|
const { toolName, description, log, protocol } = deps;
|
|
1265
|
-
return new class extends
|
|
1389
|
+
return new class extends import_tools9.StructuredTool {
|
|
1266
1390
|
name = toolName || "set_msg_emoji";
|
|
1267
1391
|
description = description || DEFAULT_SET_MSG_EMOJI_TOOL_DESCRIPTION;
|
|
1268
|
-
schema =
|
|
1269
|
-
messageId:
|
|
1270
|
-
emojiId:
|
|
1392
|
+
schema = import_zod9.z.object({
|
|
1393
|
+
messageId: import_zod9.z.string().min(1, "message_id is required").describe("Target message ID."),
|
|
1394
|
+
emojiId: import_zod9.z.string().min(1, "emoji_id is required").describe("Emoji ID to send.")
|
|
1271
1395
|
});
|
|
1272
1396
|
async _call(input, _manager, runnable) {
|
|
1273
1397
|
const session = getSession(runnable);
|
|
@@ -1283,8 +1407,8 @@ function createSetMsgEmojiTool(deps) {
|
|
|
1283
1407
|
}
|
|
1284
1408
|
|
|
1285
1409
|
// src/features/native-tools/tools/profile.ts
|
|
1286
|
-
var
|
|
1287
|
-
var
|
|
1410
|
+
var import_zod10 = require("zod");
|
|
1411
|
+
var import_tools10 = require("@langchain/core/tools");
|
|
1288
1412
|
var genders = {
|
|
1289
1413
|
unknown: "0",
|
|
1290
1414
|
male: "1",
|
|
@@ -1311,13 +1435,13 @@ async function sendSetProfile(params) {
|
|
|
1311
1435
|
}
|
|
1312
1436
|
function createSetProfileTool(deps) {
|
|
1313
1437
|
const { toolName, description, log, protocol } = deps;
|
|
1314
|
-
return new class extends
|
|
1438
|
+
return new class extends import_tools10.StructuredTool {
|
|
1315
1439
|
name = toolName || "set_self_profile";
|
|
1316
1440
|
description = description || DEFAULT_SET_SELF_PROFILE_TOOL_DESCRIPTION;
|
|
1317
|
-
schema =
|
|
1318
|
-
nickname:
|
|
1319
|
-
signature:
|
|
1320
|
-
gender:
|
|
1441
|
+
schema = import_zod10.z.object({
|
|
1442
|
+
nickname: import_zod10.z.string().min(1, "nickname is required").describe("The new nickname for the bot."),
|
|
1443
|
+
signature: import_zod10.z.string().optional().describe("Optional: the new personal signature."),
|
|
1444
|
+
gender: import_zod10.z.enum(["unknown", "male", "female"]).optional().describe("Optional: the new gender.")
|
|
1321
1445
|
});
|
|
1322
1446
|
async _call(input, _manager, runnable) {
|
|
1323
1447
|
return sendSetProfile({
|
|
@@ -1333,8 +1457,8 @@ function createSetProfileTool(deps) {
|
|
|
1333
1457
|
}
|
|
1334
1458
|
|
|
1335
1459
|
// src/features/native-tools/tools/set-qq-avatar.ts
|
|
1336
|
-
var
|
|
1337
|
-
var
|
|
1460
|
+
var import_zod11 = require("zod");
|
|
1461
|
+
var import_tools11 = require("@langchain/core/tools");
|
|
1338
1462
|
function isHttpUrl(value) {
|
|
1339
1463
|
return /^https?:\/\//i.test(value);
|
|
1340
1464
|
}
|
|
@@ -1393,11 +1517,11 @@ async function sendSetQQAvatar(params) {
|
|
|
1393
1517
|
}
|
|
1394
1518
|
function createSetQQAvatarTool(deps) {
|
|
1395
1519
|
const { ctx, toolName, description, log } = deps;
|
|
1396
|
-
return new class extends
|
|
1520
|
+
return new class extends import_tools11.StructuredTool {
|
|
1397
1521
|
name = toolName || "set_qq_avatar";
|
|
1398
1522
|
description = description || DEFAULT_SET_QQ_AVATAR_TOOL_DESCRIPTION;
|
|
1399
|
-
schema =
|
|
1400
|
-
imageUrl:
|
|
1523
|
+
schema = import_zod11.z.object({
|
|
1524
|
+
imageUrl: import_zod11.z.string().min(1, "imageUrl is required").describe("Image URL or local file path readable by the OneBot side.")
|
|
1401
1525
|
});
|
|
1402
1526
|
async _call(input, _manager, runnable) {
|
|
1403
1527
|
return sendSetQQAvatar({
|
|
@@ -1549,6 +1673,42 @@ function registerNativeTools(deps) {
|
|
|
1549
1673
|
});
|
|
1550
1674
|
log?.("info", `\u7FA4\u6210\u5458\u7981\u8A00\u5DE5\u5177\u5DF2\u6CE8\u518C: ${toolName}`);
|
|
1551
1675
|
}
|
|
1676
|
+
if (isNativeToolEnabled(config, "leaveGroup")) {
|
|
1677
|
+
const toolName = resolveToolName(
|
|
1678
|
+
config.leaveGroup.toolName,
|
|
1679
|
+
"set_group_leave"
|
|
1680
|
+
);
|
|
1681
|
+
const description = resolveToolDescription(
|
|
1682
|
+
config.leaveGroup.description,
|
|
1683
|
+
DEFAULT_LEAVE_GROUP_TOOL_DESCRIPTION
|
|
1684
|
+
);
|
|
1685
|
+
plugin.registerTool(toolName, {
|
|
1686
|
+
selector: () => true,
|
|
1687
|
+
authorization: (session) => session?.platform === "onebot",
|
|
1688
|
+
description,
|
|
1689
|
+
createTool: () => createLeaveGroupTool({ toolName, description, log }),
|
|
1690
|
+
meta: createNativeToolMeta("onebot", ["group"])
|
|
1691
|
+
});
|
|
1692
|
+
log?.("info", `\u9000\u7FA4\u5DE5\u5177\u5DF2\u6CE8\u518C: ${toolName}`);
|
|
1693
|
+
}
|
|
1694
|
+
if (isNativeToolEnabled(config, "setGroupKick")) {
|
|
1695
|
+
const toolName = resolveToolName(
|
|
1696
|
+
config.setGroupKick.toolName,
|
|
1697
|
+
"set_group_kick"
|
|
1698
|
+
);
|
|
1699
|
+
const description = resolveToolDescription(
|
|
1700
|
+
config.setGroupKick.description,
|
|
1701
|
+
DEFAULT_SET_GROUP_KICK_TOOL_DESCRIPTION
|
|
1702
|
+
);
|
|
1703
|
+
plugin.registerTool(toolName, {
|
|
1704
|
+
selector: () => true,
|
|
1705
|
+
authorization: (session) => session?.platform === "onebot",
|
|
1706
|
+
description,
|
|
1707
|
+
createTool: () => createSetGroupKickTool({ toolName, description, log }),
|
|
1708
|
+
meta: createNativeToolMeta("onebot", ["group"])
|
|
1709
|
+
});
|
|
1710
|
+
log?.("info", `\u8E22\u51FA\u7FA4\u6210\u5458\u5DE5\u5177\u5DF2\u6CE8\u518C: ${toolName}`);
|
|
1711
|
+
}
|
|
1552
1712
|
if (isNativeToolEnabled(config, "setGroupSpecialTitle")) {
|
|
1553
1713
|
const toolName = resolveToolName(
|
|
1554
1714
|
config.setGroupSpecialTitle.toolName,
|
|
@@ -3024,12 +3184,14 @@ Character XML \u5DE5\u5177\u4EC5\u4F9B [koishi-plugin-chatluna-character](https:
|
|
|
3024
3184
|
createDeleteMessageTool,
|
|
3025
3185
|
createGroupInfoProvider,
|
|
3026
3186
|
createGroupShutListProvider,
|
|
3187
|
+
createLeaveGroupTool,
|
|
3027
3188
|
createLogger,
|
|
3028
3189
|
createPokeTool,
|
|
3029
3190
|
createRandomProvider,
|
|
3030
3191
|
createSearchGroupMemberTool,
|
|
3031
3192
|
createSetGroupBanTool,
|
|
3032
3193
|
createSetGroupCardTool,
|
|
3194
|
+
createSetGroupKickTool,
|
|
3033
3195
|
createSetGroupSpecialTitleTool,
|
|
3034
3196
|
createSetMsgEmojiTool,
|
|
3035
3197
|
createSetProfileTool,
|
|
@@ -3050,6 +3212,8 @@ Character XML \u5DE5\u5177\u4EC5\u4F9B [koishi-plugin-chatluna-character](https:
|
|
|
3050
3212
|
searchGroupMember,
|
|
3051
3213
|
sendDeleteMessage,
|
|
3052
3214
|
sendGroupBan,
|
|
3215
|
+
sendGroupKick,
|
|
3216
|
+
sendLeaveGroup,
|
|
3053
3217
|
sendMsgEmoji,
|
|
3054
3218
|
sendPoke,
|
|
3055
3219
|
sendSetGroupCard,
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-chatluna-toolbox",
|
|
3
3
|
"description": "为 ChatLuna 提供更多原生工具、Character XML 工具与变量,仅支持 onebot 平台。",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.20",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"lib",
|
|
9
|
-
"dist"
|
|
10
|
-
"client"
|
|
9
|
+
"dist"
|
|
11
10
|
],
|
|
12
11
|
"license": "MIT",
|
|
13
12
|
"homepage": "https://github.com/Sor85/AAAAACAT-chatluna-plugins",
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Toolbox 详情加载器
|
|
3
|
-
根据当前插件名称决定是否显示共享导航组件
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<SharedNav v-if="isOwn" :sections="navSections" />
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
|
-
<script setup lang="ts">
|
|
10
|
-
import { ComputedRef, computed, inject } from "vue";
|
|
11
|
-
import { SharedNav } from "shared-nav";
|
|
12
|
-
import { NAV_SECTIONS, PLUGIN_CANDIDATE_NAMES } from "./constants";
|
|
13
|
-
|
|
14
|
-
const pluginName = inject<ComputedRef<string>>("plugin:name");
|
|
15
|
-
const navSections = NAV_SECTIONS;
|
|
16
|
-
const isOwn = computed(() => {
|
|
17
|
-
const name = pluginName?.value || "";
|
|
18
|
-
return PLUGIN_CANDIDATE_NAMES.includes(name);
|
|
19
|
-
});
|
|
20
|
-
</script>
|
package/client/constants.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 前端常量定义
|
|
3
|
-
* 包含导航分组和插件候选名称
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { SharedNavSection } from "shared-nav";
|
|
7
|
-
|
|
8
|
-
export const NAV_SECTIONS: SharedNavSection[] = [
|
|
9
|
-
{ title: "基础设置", key: "basic" },
|
|
10
|
-
{ title: "原生工具", key: "nativeTools" },
|
|
11
|
-
{ title: "Character XML 工具", key: "xmlTools" },
|
|
12
|
-
{ title: "变量", key: "variables" },
|
|
13
|
-
{ title: "其他设置", key: "other" },
|
|
14
|
-
];
|
|
15
|
-
|
|
16
|
-
export const PLUGIN_CANDIDATE_NAMES = [
|
|
17
|
-
"chatluna-toolbox",
|
|
18
|
-
"koishi-plugin-chatluna-toolbox",
|
|
19
|
-
];
|
package/client/index.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 前端入口
|
|
3
|
-
* 注册 Koishi 控制台插件详情扩展
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { Context } from "@koishijs/client";
|
|
7
|
-
import ToolboxDetailsLoader from "./ToolboxDetailsLoader.vue";
|
|
8
|
-
|
|
9
|
-
export default (ctx: Context) => {
|
|
10
|
-
ctx.slot({
|
|
11
|
-
type: "plugin-details",
|
|
12
|
-
component: ToolboxDetailsLoader,
|
|
13
|
-
order: -999,
|
|
14
|
-
});
|
|
15
|
-
};
|