koishi-plugin-chatluna-toolbox 0.0.18 → 0.0.19
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 +215 -61
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -421,6 +421,7 @@ __export(index_exports, {
|
|
|
421
421
|
createLogger: () => createLogger,
|
|
422
422
|
createPokeTool: () => createPokeTool,
|
|
423
423
|
createRandomProvider: () => createRandomProvider,
|
|
424
|
+
createSearchGroupMemberTool: () => createSearchGroupMemberTool,
|
|
424
425
|
createSetGroupBanTool: () => createSetGroupBanTool,
|
|
425
426
|
createSetGroupCardTool: () => createSetGroupCardTool,
|
|
426
427
|
createSetGroupSpecialTitleTool: () => createSetGroupSpecialTitleTool,
|
|
@@ -440,6 +441,7 @@ __export(index_exports, {
|
|
|
440
441
|
registerVariables: () => registerVariables,
|
|
441
442
|
registerXmlTools: () => registerXmlTools,
|
|
442
443
|
resolveOneBotProtocol: () => resolveOneBotProtocol,
|
|
444
|
+
searchGroupMember: () => searchGroupMember,
|
|
443
445
|
sendDeleteMessage: () => sendDeleteMessage,
|
|
444
446
|
sendGroupBan: () => sendGroupBan,
|
|
445
447
|
sendMsgEmoji: () => sendMsgEmoji,
|
|
@@ -472,6 +474,7 @@ var DEFAULT_POKE_TOOL_DESCRIPTION = "\u5BF9\u6307\u5B9A\u7528\u6237\u6267\u884C\
|
|
|
472
474
|
var DEFAULT_SET_SELF_PROFILE_TOOL_DESCRIPTION = "\u4FEE\u6539\u81EA\u5DF1\u7684 QQ \u8D44\u6599\uFF0C\u53EF\u8BBE\u7F6E\u6635\u79F0\u3001\u7B7E\u540D\u548C\u6027\u522B\u3002";
|
|
473
475
|
var DEFAULT_SET_QQ_AVATAR_TOOL_DESCRIPTION = "\u4FEE\u6539\u673A\u5668\u4EBA QQ \u5934\u50CF\u3002\u63D0\u4F9B imageUrl\uFF1BHTTP/HTTPS \u56FE\u7247\u4F1A\u5148\u7531 Koishi \u8BFB\u53D6\u5E76\u8F6C\u4E3A OneBot base64 \u6587\u4EF6\uFF0C\u907F\u514D\u4E34\u65F6 URL \u8FC7\u671F\u6216 OneBot \u7AEF\u65E0\u6CD5\u8BBF\u95EE\u3002";
|
|
474
476
|
var DEFAULT_SET_GROUP_CARD_TOOL_DESCRIPTION = "\u4FEE\u6539\u7FA4\u6210\u5458\u7684\u7FA4\u6635\u79F0\u3002";
|
|
477
|
+
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";
|
|
475
478
|
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";
|
|
476
479
|
var DEFAULT_SET_GROUP_SPECIAL_TITLE_TOOL_DESCRIPTION = "\u4FEE\u6539\u6216\u6E05\u9664\u7FA4\u6210\u5458\u7684 QQ \u7FA4\u4E13\u5C5E\u5934\u8854\u3002";
|
|
477
480
|
var DEFAULT_SET_MSG_EMOJI_TOOL_DESCRIPTION = "\u5BF9\u6307\u5B9A\u6D88\u606F\u6DFB\u52A0\u8868\u60C5\u56DE\u5E94\u3002";
|
|
@@ -484,6 +487,7 @@ var EnabledNativeToolsSchema = import_koishi2.Schema.array(
|
|
|
484
487
|
import_koishi2.Schema.const("setSelfProfile").description("\u4FEE\u6539\u81EA\u8EAB\u8D26\u6237\u4FE1\u606F"),
|
|
485
488
|
import_koishi2.Schema.const("setQQAvatar").description("\u4FEE\u6539 QQ \u5934\u50CF"),
|
|
486
489
|
import_koishi2.Schema.const("setGroupCard").description("\u4FEE\u6539\u7FA4\u6210\u5458\u6635\u79F0"),
|
|
490
|
+
import_koishi2.Schema.const("searchGroupMember").description("\u641C\u7D22\u7FA4\u6210\u5458"),
|
|
487
491
|
import_koishi2.Schema.const("setGroupBan").description("\u7981\u8A00\u7FA4\u6210\u5458"),
|
|
488
492
|
import_koishi2.Schema.const("setGroupSpecialTitle").description("\u4FEE\u6539\u7FA4\u6210\u5458\u4E13\u5C5E\u5934\u8854"),
|
|
489
493
|
import_koishi2.Schema.const("setMsgEmoji").description("\u6D88\u606F\u8868\u60C5"),
|
|
@@ -513,6 +517,11 @@ var NativeToolAdvancedSettingsSchema = import_koishi2.Schema.object({
|
|
|
513
517
|
toolName: import_koishi2.Schema.string().default("set_group_card").description("\u5DE5\u5177\u540D\u79F0"),
|
|
514
518
|
description: import_koishi2.Schema.string().default(DEFAULT_SET_GROUP_CARD_TOOL_DESCRIPTION).description("\u5DE5\u5177\u63CF\u8FF0")
|
|
515
519
|
}).description("\u4FEE\u6539\u7FA4\u6210\u5458\u6635\u79F0\u5DE5\u5177").collapse(),
|
|
520
|
+
searchGroupMember: import_koishi2.Schema.object({
|
|
521
|
+
enabled: import_koishi2.Schema.boolean().default(false).hidden(),
|
|
522
|
+
toolName: import_koishi2.Schema.string().default("search_group_member").description("\u5DE5\u5177\u540D\u79F0"),
|
|
523
|
+
description: import_koishi2.Schema.string().default(DEFAULT_SEARCH_GROUP_MEMBER_TOOL_DESCRIPTION).description("\u5DE5\u5177\u63CF\u8FF0")
|
|
524
|
+
}).description("\u641C\u7D22\u7FA4\u6210\u5458\u5DE5\u5177").collapse(),
|
|
516
525
|
setGroupBan: import_koishi2.Schema.object({
|
|
517
526
|
enabled: import_koishi2.Schema.boolean().default(false).hidden(),
|
|
518
527
|
toolName: import_koishi2.Schema.string().default("set_group_ban").description("\u5DE5\u5177\u540D\u79F0"),
|
|
@@ -904,10 +913,135 @@ function createPokeTool(deps) {
|
|
|
904
913
|
}();
|
|
905
914
|
}
|
|
906
915
|
|
|
907
|
-
// src/features/native-tools/tools/
|
|
916
|
+
// src/features/native-tools/tools/search-group-member.ts
|
|
908
917
|
var import_zod3 = require("zod");
|
|
909
918
|
var import_tools3 = require("@langchain/core/tools");
|
|
919
|
+
var MAX_RESULTS = 10;
|
|
920
|
+
function pickFirst(...values) {
|
|
921
|
+
for (const value of values) {
|
|
922
|
+
if (value === null || value === void 0) continue;
|
|
923
|
+
const text = String(value).trim();
|
|
924
|
+
if (text) return text;
|
|
925
|
+
}
|
|
926
|
+
return "";
|
|
927
|
+
}
|
|
910
928
|
function resolveGroupId(session, groupId) {
|
|
929
|
+
return groupId?.trim() || session.guildId?.trim() || (session.event?.guild?.id || "");
|
|
930
|
+
}
|
|
931
|
+
function normalizeId(value) {
|
|
932
|
+
return /^\d+$/.test(value) ? Number(value) : value;
|
|
933
|
+
}
|
|
934
|
+
function getUserId(member) {
|
|
935
|
+
return pickFirst(
|
|
936
|
+
member.user_id,
|
|
937
|
+
member.userId,
|
|
938
|
+
member.id,
|
|
939
|
+
member.qq,
|
|
940
|
+
member.uid
|
|
941
|
+
);
|
|
942
|
+
}
|
|
943
|
+
function getGroupCard(member) {
|
|
944
|
+
return pickFirst(member.card, member.remark, member.displayName);
|
|
945
|
+
}
|
|
946
|
+
function getNickname(member) {
|
|
947
|
+
return pickFirst(
|
|
948
|
+
member.nick,
|
|
949
|
+
member.nickname,
|
|
950
|
+
member.name,
|
|
951
|
+
member.user?.nickname,
|
|
952
|
+
member.user?.name
|
|
953
|
+
);
|
|
954
|
+
}
|
|
955
|
+
function matchByName(member, query) {
|
|
956
|
+
const keyword = query.toLowerCase();
|
|
957
|
+
return [getGroupCard(member), getNickname(member)].filter(Boolean).some((value) => value.toLowerCase().includes(keyword));
|
|
958
|
+
}
|
|
959
|
+
async function fetchGroupMembers(session, groupId) {
|
|
960
|
+
const internal = session.bot.internal;
|
|
961
|
+
if (!internal) return [];
|
|
962
|
+
if (typeof internal.getGroupMemberList === "function") {
|
|
963
|
+
const result = await internal.getGroupMemberList(normalizeId(groupId));
|
|
964
|
+
return Array.isArray(result) ? result : [];
|
|
965
|
+
}
|
|
966
|
+
if (typeof internal._request === "function") {
|
|
967
|
+
const result = await internal._request("get_group_member_list", {
|
|
968
|
+
group_id: normalizeId(groupId)
|
|
969
|
+
});
|
|
970
|
+
if (Array.isArray(result)) return result;
|
|
971
|
+
const data = result?.data;
|
|
972
|
+
return Array.isArray(data) ? data : [];
|
|
973
|
+
}
|
|
974
|
+
throw new Error("\u5F53\u524D OneBot \u9002\u914D\u5668\u4E0D\u652F\u6301 get_group_member_list \u63A5\u53E3\u3002");
|
|
975
|
+
}
|
|
976
|
+
function formatMember(index, member) {
|
|
977
|
+
const userId = getUserId(member) || "\u672A\u77E5";
|
|
978
|
+
const groupCard = getGroupCard(member) || "\u65E0";
|
|
979
|
+
const nickname = getNickname(member) || "\u65E0";
|
|
980
|
+
return `${index}. qqid\uFF1A${userId}\uFF0C\u7FA4\u6635\u79F0\uFF1A${groupCard}\uFF0CQQ\u6635\u79F0\uFF1A${nickname}`;
|
|
981
|
+
}
|
|
982
|
+
async function searchGroupMember(params) {
|
|
983
|
+
try {
|
|
984
|
+
const { session, query, groupId, log } = params;
|
|
985
|
+
const mode = params.mode || "auto";
|
|
986
|
+
if (!["auto", "byName", "byQQ"].includes(mode)) {
|
|
987
|
+
return "mode must be auto, byName, or byQQ.";
|
|
988
|
+
}
|
|
989
|
+
const queryText = query.trim();
|
|
990
|
+
if (!queryText) return "query is required.";
|
|
991
|
+
const {
|
|
992
|
+
error,
|
|
993
|
+
session: validatedSession
|
|
994
|
+
} = ensureOneBotSession(session);
|
|
995
|
+
if (error) return error;
|
|
996
|
+
const resolvedGroupId = resolveGroupId(validatedSession, groupId);
|
|
997
|
+
if (!resolvedGroupId) {
|
|
998
|
+
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
999
|
+
}
|
|
1000
|
+
const members = await fetchGroupMembers(validatedSession, resolvedGroupId);
|
|
1001
|
+
const shouldSearchQQ = mode === "byQQ" || mode === "auto" && /^\d+$/.test(queryText);
|
|
1002
|
+
const matches = members.filter(
|
|
1003
|
+
(member) => shouldSearchQQ ? getUserId(member) === queryText : matchByName(member, queryText)
|
|
1004
|
+
);
|
|
1005
|
+
if (matches.length === 0) return "\u672A\u627E\u5230\u5339\u914D\u7684\u7FA4\u6210\u5458\u3002";
|
|
1006
|
+
const visibleMatches = matches.slice(0, MAX_RESULTS);
|
|
1007
|
+
const header = matches.length > MAX_RESULTS ? `\u4EC5\u663E\u793A\u524D ${MAX_RESULTS} \u6761\uFF0C\u5171 ${matches.length} \u6761\u5339\u914D\uFF1A` : `\u627E\u5230 ${matches.length} \u4E2A\u5339\u914D\u6210\u5458\uFF1A`;
|
|
1008
|
+
const message = [
|
|
1009
|
+
header,
|
|
1010
|
+
...visibleMatches.map((member, index) => formatMember(index + 1, member))
|
|
1011
|
+
].join("\n");
|
|
1012
|
+
log?.("info", `\u7FA4 ${resolvedGroupId} \u6210\u5458\u641C\u7D22\u5B8C\u6210\uFF1A${matches.length} \u6761\u5339\u914D`);
|
|
1013
|
+
return message;
|
|
1014
|
+
} catch (error) {
|
|
1015
|
+
params.log?.("warn", "search_group_member failed", error);
|
|
1016
|
+
return `search_group_member failed: ${error.message}`;
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
function createSearchGroupMemberTool(deps) {
|
|
1020
|
+
const { toolName, description, log } = deps;
|
|
1021
|
+
return new class extends import_tools3.StructuredTool {
|
|
1022
|
+
name = toolName || "search_group_member";
|
|
1023
|
+
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.")
|
|
1028
|
+
});
|
|
1029
|
+
async _call(input, _manager, runnable) {
|
|
1030
|
+
return searchGroupMember({
|
|
1031
|
+
session: getSession(runnable),
|
|
1032
|
+
groupId: input.groupId,
|
|
1033
|
+
query: input.query,
|
|
1034
|
+
mode: input.mode,
|
|
1035
|
+
log
|
|
1036
|
+
});
|
|
1037
|
+
}
|
|
1038
|
+
}();
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
// 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) {
|
|
911
1045
|
return groupId?.trim() || (session.guildId || "").trim() || (session.channelId || "").trim() || (session.roomId || "").trim();
|
|
912
1046
|
}
|
|
913
1047
|
function parseDuration(duration) {
|
|
@@ -926,7 +1060,7 @@ async function sendGroupBan(params) {
|
|
|
926
1060
|
session: validatedSession
|
|
927
1061
|
} = ensureOneBotSession(session);
|
|
928
1062
|
if (error) return error;
|
|
929
|
-
const resolvedGroupId =
|
|
1063
|
+
const resolvedGroupId = resolveGroupId2(validatedSession, groupId);
|
|
930
1064
|
if (!resolvedGroupId) {
|
|
931
1065
|
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
932
1066
|
}
|
|
@@ -956,13 +1090,13 @@ async function sendGroupBan(params) {
|
|
|
956
1090
|
}
|
|
957
1091
|
function createSetGroupBanTool(deps) {
|
|
958
1092
|
const { toolName, description, protocol, log } = deps;
|
|
959
|
-
return new class extends
|
|
1093
|
+
return new class extends import_tools4.StructuredTool {
|
|
960
1094
|
name = toolName || "set_group_ban";
|
|
961
1095
|
description = description || DEFAULT_SET_GROUP_BAN_TOOL_DESCRIPTION;
|
|
962
|
-
schema =
|
|
963
|
-
groupId:
|
|
964
|
-
userId:
|
|
965
|
-
duration:
|
|
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.")
|
|
966
1100
|
});
|
|
967
1101
|
async _call(input, _manager, runnable) {
|
|
968
1102
|
const session = getSession(runnable);
|
|
@@ -979,8 +1113,8 @@ function createSetGroupBanTool(deps) {
|
|
|
979
1113
|
}
|
|
980
1114
|
|
|
981
1115
|
// src/features/native-tools/tools/set-group-card.ts
|
|
982
|
-
var
|
|
983
|
-
var
|
|
1116
|
+
var import_zod5 = require("zod");
|
|
1117
|
+
var import_tools5 = require("@langchain/core/tools");
|
|
984
1118
|
async function sendSetGroupCard(params) {
|
|
985
1119
|
try {
|
|
986
1120
|
const { session, userId, card, groupId, log } = params;
|
|
@@ -1011,13 +1145,13 @@ async function sendSetGroupCard(params) {
|
|
|
1011
1145
|
}
|
|
1012
1146
|
function createSetGroupCardTool(deps) {
|
|
1013
1147
|
const { toolName, description, log } = deps;
|
|
1014
|
-
return new class extends
|
|
1148
|
+
return new class extends import_tools5.StructuredTool {
|
|
1015
1149
|
name = toolName || "set_group_card";
|
|
1016
1150
|
description = description || DEFAULT_SET_GROUP_CARD_TOOL_DESCRIPTION;
|
|
1017
|
-
schema =
|
|
1018
|
-
groupId:
|
|
1019
|
-
userId:
|
|
1020
|
-
card:
|
|
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.")
|
|
1021
1155
|
});
|
|
1022
1156
|
async _call(input, _manager, runnable) {
|
|
1023
1157
|
return sendSetGroupCard({
|
|
@@ -1032,9 +1166,9 @@ function createSetGroupCardTool(deps) {
|
|
|
1032
1166
|
}
|
|
1033
1167
|
|
|
1034
1168
|
// src/features/native-tools/tools/set-group-special-title.ts
|
|
1035
|
-
var
|
|
1036
|
-
var
|
|
1037
|
-
function
|
|
1169
|
+
var import_zod6 = require("zod");
|
|
1170
|
+
var import_tools6 = require("@langchain/core/tools");
|
|
1171
|
+
function resolveGroupId3(session, groupId) {
|
|
1038
1172
|
return groupId?.trim() || (session.guildId || "").trim() || (session.channelId || "").trim() || (session.roomId || "").trim();
|
|
1039
1173
|
}
|
|
1040
1174
|
async function sendSetGroupSpecialTitle(params) {
|
|
@@ -1046,7 +1180,7 @@ async function sendSetGroupSpecialTitle(params) {
|
|
|
1046
1180
|
session: validatedSession
|
|
1047
1181
|
} = ensureOneBotSession(session);
|
|
1048
1182
|
if (error) return error;
|
|
1049
|
-
const resolvedGroupId =
|
|
1183
|
+
const resolvedGroupId = resolveGroupId3(validatedSession, groupId);
|
|
1050
1184
|
if (!resolvedGroupId) {
|
|
1051
1185
|
return "Missing groupId. Provide groupId explicitly or run inside a group session.";
|
|
1052
1186
|
}
|
|
@@ -1073,13 +1207,13 @@ async function sendSetGroupSpecialTitle(params) {
|
|
|
1073
1207
|
}
|
|
1074
1208
|
function createSetGroupSpecialTitleTool(deps) {
|
|
1075
1209
|
const { toolName, description, protocol, log } = deps;
|
|
1076
|
-
return new class extends
|
|
1210
|
+
return new class extends import_tools6.StructuredTool {
|
|
1077
1211
|
name = toolName || "set_group_special_title";
|
|
1078
1212
|
description = description || DEFAULT_SET_GROUP_SPECIAL_TITLE_TOOL_DESCRIPTION;
|
|
1079
|
-
schema =
|
|
1080
|
-
groupId:
|
|
1081
|
-
userId:
|
|
1082
|
-
title:
|
|
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.")
|
|
1083
1217
|
});
|
|
1084
1218
|
async _call(input, _manager, runnable) {
|
|
1085
1219
|
const session = getSession(runnable);
|
|
@@ -1096,8 +1230,8 @@ function createSetGroupSpecialTitleTool(deps) {
|
|
|
1096
1230
|
}
|
|
1097
1231
|
|
|
1098
1232
|
// src/features/native-tools/tools/set-msg-emoji.ts
|
|
1099
|
-
var
|
|
1100
|
-
var
|
|
1233
|
+
var import_zod7 = require("zod");
|
|
1234
|
+
var import_tools7 = require("@langchain/core/tools");
|
|
1101
1235
|
async function sendMsgEmoji(params) {
|
|
1102
1236
|
try {
|
|
1103
1237
|
const { session, messageId, emojiId, log, protocol } = params;
|
|
@@ -1128,12 +1262,12 @@ async function sendMsgEmoji(params) {
|
|
|
1128
1262
|
}
|
|
1129
1263
|
function createSetMsgEmojiTool(deps) {
|
|
1130
1264
|
const { toolName, description, log, protocol } = deps;
|
|
1131
|
-
return new class extends
|
|
1265
|
+
return new class extends import_tools7.StructuredTool {
|
|
1132
1266
|
name = toolName || "set_msg_emoji";
|
|
1133
1267
|
description = description || DEFAULT_SET_MSG_EMOJI_TOOL_DESCRIPTION;
|
|
1134
|
-
schema =
|
|
1135
|
-
messageId:
|
|
1136
|
-
emojiId:
|
|
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.")
|
|
1137
1271
|
});
|
|
1138
1272
|
async _call(input, _manager, runnable) {
|
|
1139
1273
|
const session = getSession(runnable);
|
|
@@ -1149,8 +1283,8 @@ function createSetMsgEmojiTool(deps) {
|
|
|
1149
1283
|
}
|
|
1150
1284
|
|
|
1151
1285
|
// src/features/native-tools/tools/profile.ts
|
|
1152
|
-
var
|
|
1153
|
-
var
|
|
1286
|
+
var import_zod8 = require("zod");
|
|
1287
|
+
var import_tools8 = require("@langchain/core/tools");
|
|
1154
1288
|
var genders = {
|
|
1155
1289
|
unknown: "0",
|
|
1156
1290
|
male: "1",
|
|
@@ -1177,13 +1311,13 @@ async function sendSetProfile(params) {
|
|
|
1177
1311
|
}
|
|
1178
1312
|
function createSetProfileTool(deps) {
|
|
1179
1313
|
const { toolName, description, log, protocol } = deps;
|
|
1180
|
-
return new class extends
|
|
1314
|
+
return new class extends import_tools8.StructuredTool {
|
|
1181
1315
|
name = toolName || "set_self_profile";
|
|
1182
1316
|
description = description || DEFAULT_SET_SELF_PROFILE_TOOL_DESCRIPTION;
|
|
1183
|
-
schema =
|
|
1184
|
-
nickname:
|
|
1185
|
-
signature:
|
|
1186
|
-
gender:
|
|
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.")
|
|
1187
1321
|
});
|
|
1188
1322
|
async _call(input, _manager, runnable) {
|
|
1189
1323
|
return sendSetProfile({
|
|
@@ -1199,8 +1333,8 @@ function createSetProfileTool(deps) {
|
|
|
1199
1333
|
}
|
|
1200
1334
|
|
|
1201
1335
|
// src/features/native-tools/tools/set-qq-avatar.ts
|
|
1202
|
-
var
|
|
1203
|
-
var
|
|
1336
|
+
var import_zod9 = require("zod");
|
|
1337
|
+
var import_tools9 = require("@langchain/core/tools");
|
|
1204
1338
|
function isHttpUrl(value) {
|
|
1205
1339
|
return /^https?:\/\//i.test(value);
|
|
1206
1340
|
}
|
|
@@ -1259,11 +1393,11 @@ async function sendSetQQAvatar(params) {
|
|
|
1259
1393
|
}
|
|
1260
1394
|
function createSetQQAvatarTool(deps) {
|
|
1261
1395
|
const { ctx, toolName, description, log } = deps;
|
|
1262
|
-
return new class extends
|
|
1396
|
+
return new class extends import_tools9.StructuredTool {
|
|
1263
1397
|
name = toolName || "set_qq_avatar";
|
|
1264
1398
|
description = description || DEFAULT_SET_QQ_AVATAR_TOOL_DESCRIPTION;
|
|
1265
|
-
schema =
|
|
1266
|
-
imageUrl:
|
|
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.")
|
|
1267
1401
|
});
|
|
1268
1402
|
async _call(input, _manager, runnable) {
|
|
1269
1403
|
return sendSetQQAvatar({
|
|
@@ -1379,6 +1513,24 @@ function registerNativeTools(deps) {
|
|
|
1379
1513
|
});
|
|
1380
1514
|
log?.("info", `\u7FA4\u6635\u79F0\u5DE5\u5177\u5DF2\u6CE8\u518C: ${toolName}`);
|
|
1381
1515
|
}
|
|
1516
|
+
if (isNativeToolEnabled(config, "searchGroupMember")) {
|
|
1517
|
+
const toolName = resolveToolName(
|
|
1518
|
+
config.searchGroupMember.toolName,
|
|
1519
|
+
"search_group_member"
|
|
1520
|
+
);
|
|
1521
|
+
const description = resolveToolDescription(
|
|
1522
|
+
config.searchGroupMember.description,
|
|
1523
|
+
DEFAULT_SEARCH_GROUP_MEMBER_TOOL_DESCRIPTION
|
|
1524
|
+
);
|
|
1525
|
+
plugin.registerTool(toolName, {
|
|
1526
|
+
selector: () => true,
|
|
1527
|
+
authorization: (session) => session?.platform === "onebot",
|
|
1528
|
+
description,
|
|
1529
|
+
createTool: () => createSearchGroupMemberTool({ toolName, description, log }),
|
|
1530
|
+
meta: createNativeToolMeta("onebot", ["group"])
|
|
1531
|
+
});
|
|
1532
|
+
log?.("info", `\u7FA4\u6210\u5458\u641C\u7D22\u5DE5\u5177\u5DF2\u6CE8\u518C: ${toolName}`);
|
|
1533
|
+
}
|
|
1382
1534
|
if (isNativeToolEnabled(config, "setGroupBan")) {
|
|
1383
1535
|
const toolName = resolveToolName(
|
|
1384
1536
|
config.setGroupBan.toolName,
|
|
@@ -1849,7 +2001,7 @@ function registerXmlTools(deps) {
|
|
|
1849
2001
|
}
|
|
1850
2002
|
|
|
1851
2003
|
// src/features/variables/providers/bot-info.ts
|
|
1852
|
-
function
|
|
2004
|
+
function pickFirst2(...values) {
|
|
1853
2005
|
for (const value of values) {
|
|
1854
2006
|
if (value === null || value === void 0) continue;
|
|
1855
2007
|
const text = String(value).trim();
|
|
@@ -1936,7 +2088,7 @@ function renderBotInfo(session, member, items) {
|
|
|
1936
2088
|
switch (item) {
|
|
1937
2089
|
case "nickname": {
|
|
1938
2090
|
const name2 = String(
|
|
1939
|
-
|
|
2091
|
+
pickFirst2(
|
|
1940
2092
|
member?.card,
|
|
1941
2093
|
member?.remark,
|
|
1942
2094
|
member?.displayName,
|
|
@@ -1954,7 +2106,7 @@ function renderBotInfo(session, member, items) {
|
|
|
1954
2106
|
break;
|
|
1955
2107
|
case "role": {
|
|
1956
2108
|
const role = normalizeRole(
|
|
1957
|
-
|
|
2109
|
+
pickFirst2(
|
|
1958
2110
|
member?.role,
|
|
1959
2111
|
member?.roleName,
|
|
1960
2112
|
member?.permission,
|
|
@@ -1965,7 +2117,7 @@ function renderBotInfo(session, member, items) {
|
|
|
1965
2117
|
break;
|
|
1966
2118
|
}
|
|
1967
2119
|
case "level": {
|
|
1968
|
-
const level =
|
|
2120
|
+
const level = pickFirst2(
|
|
1969
2121
|
member?.level,
|
|
1970
2122
|
member?.levelName,
|
|
1971
2123
|
member?.level_name,
|
|
@@ -1975,7 +2127,7 @@ function renderBotInfo(session, member, items) {
|
|
|
1975
2127
|
break;
|
|
1976
2128
|
}
|
|
1977
2129
|
case "title": {
|
|
1978
|
-
const title =
|
|
2130
|
+
const title = pickFirst2(
|
|
1979
2131
|
member?.title,
|
|
1980
2132
|
member?.specialTitle,
|
|
1981
2133
|
member?.special_title
|
|
@@ -1994,14 +2146,14 @@ function renderBotInfo(session, member, items) {
|
|
|
1994
2146
|
break;
|
|
1995
2147
|
}
|
|
1996
2148
|
case "area": {
|
|
1997
|
-
const area =
|
|
2149
|
+
const area = pickFirst2(member?.area, member?.region, member?.location);
|
|
1998
2150
|
if (area !== null) values.push(`\u5730\u533A:${area}`);
|
|
1999
2151
|
break;
|
|
2000
2152
|
}
|
|
2001
2153
|
case "joinTime": {
|
|
2002
2154
|
const joinTime = formatDateOnly(
|
|
2003
2155
|
normalizeTimestamp(
|
|
2004
|
-
|
|
2156
|
+
pickFirst2(
|
|
2005
2157
|
member?.join_time,
|
|
2006
2158
|
member?.joined_at,
|
|
2007
2159
|
member?.joinTime,
|
|
@@ -2015,7 +2167,7 @@ function renderBotInfo(session, member, items) {
|
|
|
2015
2167
|
case "lastSentTime": {
|
|
2016
2168
|
const lastSentTime = formatDateTime(
|
|
2017
2169
|
normalizeTimestamp(
|
|
2018
|
-
|
|
2170
|
+
pickFirst2(
|
|
2019
2171
|
member?.last_sent_time,
|
|
2020
2172
|
member?.lastSentTime,
|
|
2021
2173
|
member?.lastSpeakTimestamp
|
|
@@ -2212,7 +2364,7 @@ function formatDateTime2(value) {
|
|
|
2212
2364
|
if (Number.isNaN(date.valueOf())) return "\u672A\u77E5";
|
|
2213
2365
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} ${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
|
|
2214
2366
|
}
|
|
2215
|
-
function
|
|
2367
|
+
function pickFirst3(...values) {
|
|
2216
2368
|
for (const value of values) {
|
|
2217
2369
|
if (value === null || value === void 0) continue;
|
|
2218
2370
|
const text = String(value).trim();
|
|
@@ -2221,12 +2373,12 @@ function pickFirst2(...values) {
|
|
|
2221
2373
|
return "";
|
|
2222
2374
|
}
|
|
2223
2375
|
function normalizeShutItem(item) {
|
|
2224
|
-
const userId =
|
|
2376
|
+
const userId = pickFirst3(
|
|
2225
2377
|
item.uin,
|
|
2226
2378
|
item.user_id
|
|
2227
2379
|
);
|
|
2228
2380
|
if (!userId) return null;
|
|
2229
|
-
const cardName =
|
|
2381
|
+
const cardName = pickFirst3(
|
|
2230
2382
|
item.cardName,
|
|
2231
2383
|
item.remark,
|
|
2232
2384
|
item.nick,
|
|
@@ -2235,7 +2387,7 @@ function normalizeShutItem(item) {
|
|
|
2235
2387
|
);
|
|
2236
2388
|
const shutUpTimeText = formatDateTime2(
|
|
2237
2389
|
normalizeTimestamp2(
|
|
2238
|
-
|
|
2390
|
+
pickFirst3(
|
|
2239
2391
|
item.shutUpTime,
|
|
2240
2392
|
item.shut_up_time
|
|
2241
2393
|
)
|
|
@@ -2564,7 +2716,7 @@ function formatDateTime3(value) {
|
|
|
2564
2716
|
if (Number.isNaN(date.valueOf())) return "";
|
|
2565
2717
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} ${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
|
|
2566
2718
|
}
|
|
2567
|
-
function
|
|
2719
|
+
function pickFirst4(...values) {
|
|
2568
2720
|
for (const value of values) {
|
|
2569
2721
|
if (value === null || value === void 0) continue;
|
|
2570
2722
|
const text = String(value).trim();
|
|
@@ -2622,7 +2774,7 @@ function renderUserInfo(session, member, items) {
|
|
|
2622
2774
|
switch (item) {
|
|
2623
2775
|
case "nickname": {
|
|
2624
2776
|
const name2 = String(
|
|
2625
|
-
|
|
2777
|
+
pickFirst4(
|
|
2626
2778
|
member?.card,
|
|
2627
2779
|
member?.remark,
|
|
2628
2780
|
member?.displayName,
|
|
@@ -2641,7 +2793,7 @@ function renderUserInfo(session, member, items) {
|
|
|
2641
2793
|
break;
|
|
2642
2794
|
case "role": {
|
|
2643
2795
|
const role = normalizeRole2(
|
|
2644
|
-
|
|
2796
|
+
pickFirst4(
|
|
2645
2797
|
member?.role,
|
|
2646
2798
|
member?.roleName,
|
|
2647
2799
|
member?.permission,
|
|
@@ -2652,7 +2804,7 @@ function renderUserInfo(session, member, items) {
|
|
|
2652
2804
|
break;
|
|
2653
2805
|
}
|
|
2654
2806
|
case "level": {
|
|
2655
|
-
const level =
|
|
2807
|
+
const level = pickFirst4(
|
|
2656
2808
|
member?.level,
|
|
2657
2809
|
member?.levelName,
|
|
2658
2810
|
member?.level_name,
|
|
@@ -2662,7 +2814,7 @@ function renderUserInfo(session, member, items) {
|
|
|
2662
2814
|
break;
|
|
2663
2815
|
}
|
|
2664
2816
|
case "title": {
|
|
2665
|
-
const title =
|
|
2817
|
+
const title = pickFirst4(
|
|
2666
2818
|
member?.title,
|
|
2667
2819
|
member?.specialTitle,
|
|
2668
2820
|
member?.special_title
|
|
@@ -2681,14 +2833,14 @@ function renderUserInfo(session, member, items) {
|
|
|
2681
2833
|
break;
|
|
2682
2834
|
}
|
|
2683
2835
|
case "area": {
|
|
2684
|
-
const area =
|
|
2836
|
+
const area = pickFirst4(member?.area, member?.region, member?.location);
|
|
2685
2837
|
if (area !== null) values.push(`\u5730\u533A:${area}`);
|
|
2686
2838
|
break;
|
|
2687
2839
|
}
|
|
2688
2840
|
case "joinTime": {
|
|
2689
2841
|
const joinTime = formatDateOnly3(
|
|
2690
2842
|
normalizeTimestamp3(
|
|
2691
|
-
|
|
2843
|
+
pickFirst4(
|
|
2692
2844
|
member?.join_time,
|
|
2693
2845
|
member?.joined_at,
|
|
2694
2846
|
member?.joinTime,
|
|
@@ -2702,7 +2854,7 @@ function renderUserInfo(session, member, items) {
|
|
|
2702
2854
|
case "lastSentTime": {
|
|
2703
2855
|
const lastSentTime = formatDateTime3(
|
|
2704
2856
|
normalizeTimestamp3(
|
|
2705
|
-
|
|
2857
|
+
pickFirst4(
|
|
2706
2858
|
member?.last_sent_time,
|
|
2707
2859
|
member?.lastSentTime,
|
|
2708
2860
|
member?.lastSpeakTimestamp
|
|
@@ -2875,6 +3027,7 @@ Character XML \u5DE5\u5177\u4EC5\u4F9B [koishi-plugin-chatluna-character](https:
|
|
|
2875
3027
|
createLogger,
|
|
2876
3028
|
createPokeTool,
|
|
2877
3029
|
createRandomProvider,
|
|
3030
|
+
createSearchGroupMemberTool,
|
|
2878
3031
|
createSetGroupBanTool,
|
|
2879
3032
|
createSetGroupCardTool,
|
|
2880
3033
|
createSetGroupSpecialTitleTool,
|
|
@@ -2894,6 +3047,7 @@ Character XML \u5DE5\u5177\u4EC5\u4F9B [koishi-plugin-chatluna-character](https:
|
|
|
2894
3047
|
registerVariables,
|
|
2895
3048
|
registerXmlTools,
|
|
2896
3049
|
resolveOneBotProtocol,
|
|
3050
|
+
searchGroupMember,
|
|
2897
3051
|
sendDeleteMessage,
|
|
2898
3052
|
sendGroupBan,
|
|
2899
3053
|
sendMsgEmoji,
|