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 CHANGED
@@ -15,6 +15,8 @@
15
15
  - 设置自身资料
16
16
  - 设置 QQ 头像
17
17
  - 设置群名片
18
+ - 退出群聊
19
+ - 踢出群成员
18
20
  - 设置群成员专属头衔
19
21
  - 给消息添加表情
20
22
  - 撤回消息
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/poke.ts
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 import_tools2.StructuredTool {
965
+ return new class extends import_tools3.StructuredTool {
897
966
  name = toolName || "poke_user";
898
967
  description = description || DEFAULT_POKE_TOOL_DESCRIPTION;
899
- schema = import_zod2.z.object({
900
- userId: import_zod2.z.string().min(1, "userId is required").describe("The user ID to poke."),
901
- groupId: import_zod2.z.string().optional().describe("Optional: specify a different group ID.")
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 import_zod3 = require("zod");
918
- var import_tools3 = require("@langchain/core/tools");
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 resolveGroupId(session, groupId) {
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 = resolveGroupId(validatedSession, groupId);
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 import_tools3.StructuredTool {
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 = import_zod3.z.object({
1025
- groupId: import_zod3.z.string().optional().describe("Target group ID. Defaults to current session group."),
1026
- query: import_zod3.z.string().min(1, "query is required").describe("qqid, group card, or QQ nickname to search."),
1027
- mode: import_zod3.z.enum(["auto", "byName", "byQQ"]).optional().describe("Search mode. Defaults to auto.")
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 import_zod4 = require("zod");
1043
- var import_tools4 = require("@langchain/core/tools");
1044
- function resolveGroupId2(session, groupId) {
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 = resolveGroupId2(validatedSession, groupId);
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 import_tools4.StructuredTool {
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 = import_zod4.z.object({
1097
- groupId: import_zod4.z.string().optional().describe("Target group ID. Defaults to current session group."),
1098
- userId: import_zod4.z.string().min(1, "userId is required").describe("Target member user ID."),
1099
- duration: import_zod4.z.union([import_zod4.z.string(), import_zod4.z.number().int().min(0)]).describe("Mute duration in seconds. Use 0 to unmute.")
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 import_zod5 = require("zod");
1117
- var import_tools5 = require("@langchain/core/tools");
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 import_tools5.StructuredTool {
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 = import_zod5.z.object({
1152
- groupId: import_zod5.z.string().optional().describe("Target group ID. Defaults to current session group."),
1153
- userId: import_zod5.z.string().min(1, "userId is required").describe("Target member user ID."),
1154
- card: import_zod5.z.string().min(1, "card is required").describe("New group card for the member.")
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 import_zod6 = require("zod");
1170
- var import_tools6 = require("@langchain/core/tools");
1171
- function resolveGroupId3(session, groupId) {
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 = resolveGroupId3(validatedSession, groupId);
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 import_tools6.StructuredTool {
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 = import_zod6.z.object({
1214
- groupId: import_zod6.z.string().optional().describe("Target group ID. Defaults to current session group."),
1215
- userId: import_zod6.z.string().min(1, "userId is required").describe("Target member user ID."),
1216
- title: import_zod6.z.string().describe("New special title. Use an empty string to clear it.")
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 import_zod7 = require("zod");
1234
- var import_tools7 = require("@langchain/core/tools");
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 import_tools7.StructuredTool {
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 = import_zod7.z.object({
1269
- messageId: import_zod7.z.string().min(1, "message_id is required").describe("Target message ID."),
1270
- emojiId: import_zod7.z.string().min(1, "emoji_id is required").describe("Emoji ID to send.")
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 import_zod8 = require("zod");
1287
- var import_tools8 = require("@langchain/core/tools");
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 import_tools8.StructuredTool {
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 = import_zod8.z.object({
1318
- nickname: import_zod8.z.string().min(1, "nickname is required").describe("The new nickname for the bot."),
1319
- signature: import_zod8.z.string().optional().describe("Optional: the new personal signature."),
1320
- gender: import_zod8.z.enum(["unknown", "male", "female"]).optional().describe("Optional: the new 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 import_zod9 = require("zod");
1337
- var import_tools9 = require("@langchain/core/tools");
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 import_tools9.StructuredTool {
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 = import_zod9.z.object({
1400
- imageUrl: import_zod9.z.string().min(1, "imageUrl is required").describe("Image URL or local file path readable by the OneBot side.")
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.19",
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>
@@ -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
- };