koishi-plugin-chatluna-affinity 0.3.0-beta.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -313,6 +313,7 @@ declare const ConfigSchema: Schema<{
313
313
  characterPromptTemplate?: string | null | undefined;
314
314
  } & {
315
315
  affinityVariableName?: string | null | undefined;
316
+ showChatCountInAffinityVariable?: boolean | null | undefined;
316
317
  affinityDisplayRange?: number | null | undefined;
317
318
  relationshipLevelVariableName?: string | null | undefined;
318
319
  blacklistListVariableName?: string | null | undefined;
@@ -395,6 +396,7 @@ declare const ConfigSchema: Schema<{
395
396
  characterPromptTemplate: string;
396
397
  } & {
397
398
  affinityVariableName: string;
399
+ showChatCountInAffinityVariable: boolean;
398
400
  affinityDisplayRange: number;
399
401
  relationshipLevelVariableName: string;
400
402
  blacklistListVariableName: string;
@@ -714,6 +716,7 @@ interface ManualRelationship {
714
716
  }
715
717
  interface VariableSettings {
716
718
  affinityVariableName: string;
719
+ showChatCountInAffinityVariable: boolean;
717
720
  relationshipLevelVariableName: string;
718
721
  blacklistListVariableName: string;
719
722
  }
@@ -1805,6 +1808,6 @@ declare function callOneBotAPI(internal: OneBotInternal, action: string, params:
1805
1808
  * 导出插件元信息和 apply 函数
1806
1809
  */
1807
1810
 
1808
- declare const usage = "\n## \u66F4\u65B0\u65E5\u5FD7\n\n0.3.0-beta\n\n### \u91CD\u6784\n- \u5F15\u5165 `scopeId` \u4F5C\u4E3A\u65B0\u7684\u6838\u5FC3\u4F5C\u7528\u57DF\u8BED\u4E49\uFF1B\u6570\u636E\u9694\u79BB\u4ECE\u65E7\u7248\u6309 bot / \u65E7\u4E3B\u952E\u5207\u6362\u4E3A\u6309 `scopeId` \u9694\u79BB\u3002\n- \u5355\u4E2A\u5B9E\u4F8B\u5185\u7684\u591A\u4E2A bot \u73B0\u5728\u5171\u4EAB\u540C\u4E00\u4EFD `scopeId` \u6570\u636E\uFF1B\u5171\u4EAB\u8303\u56F4\u8986\u76D6\u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u3001\u7279\u6B8A\u5173\u7CFB\u4E0E\u6635\u79F0\u3002\n- \u6570\u636E\u5E93\u6A21\u578B\u5347\u7EA7\u4E3A v2\uFF1A\n - `chatluna_affinity` -> `chatluna_affinity_v2`\n - `chatluna_blacklist` -> `chatluna_blacklist_v2`\n - `chatluna_user_alias` -> `chatluna_user_alias_v2`\n- \u65B0\u589E\u6570\u636E\u5E93\u8FC1\u79FB\u670D\u52A1\u4E0E\u8FC1\u79FB\u8BB0\u5F55\u8868\uFF0C\u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u5C06\u65E7\u8868\u8FC1\u79FB\u5230 v2 \u7ED3\u6784\u3002\n- \u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u4E0E\u6A21\u578B\u54CD\u5E94\u5904\u7406\u94FE\u8DEF\u91CD\u6784\u4E3A\u66F4\u6E05\u6670\u7684\u670D\u52A1\u5316\u7ED3\u6784\u3002\n\n### \u65B0\u589E\n- \u65B0\u589E `scopeId` \u914D\u7F6E\uFF1B\u5F53\u524D\u7248\u672C\u6309 `scopeId` \u533A\u5206\u6570\u636E\uFF0C\u4E0D\u540C\u5B9E\u4F8B\u4E4B\u95F4\u5B8C\u5168\u9694\u79BB\u3002\n- \u65B0\u589E `botSelfIds` \u914D\u7F6E\uFF0C\u7528\u4E8E\u58F0\u660E\u54EA\u4E9B bot \u5F52\u5C5E\u5F53\u524D `scopeId`\uFF1B\u540C\u4E00 `scopeId` \u4E0B\u591A\u4E2A bot \u5171\u4EAB\u6570\u636E\uFF0C\u7528\u4E8E\u9996\u6B21\u4E92\u52A8\u521D\u59CB\u5316\u597D\u611F\u5EA6\u3002\n- \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u547D\u4EE4\u524D\u7F00\uFF0C\u547D\u4EE4\u7531\u56FA\u5B9A `affinity.*` \u6539\u4E3A `${scopeId}.*`\u3002\n- \u65B0\u589E\u6C38\u4E45\u9ED1\u540D\u5355\u89E3\u9664\u540E\u7684\u597D\u611F\u5EA6\u91CD\u7F6E\u903B\u8F91\uFF1B\u89E3\u9664\u540E\u4F1A\u540C\u65F6\u91CD\u7F6E\u597D\u611F\u5EA6\u76F8\u5173\u72B6\u6001\u3002\n- \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u53D8\u91CF\u8C03\u7528\u8981\u6C42\uFF0C\u53D8\u91CF\u73B0\u5728\u9700\u8981\u663E\u5F0F\u4F20\u5165 `scopeId`\u3002\n\n### \u4FEE\u6539\n- \u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u3001\u6635\u79F0\u6570\u636E\u7684\u5199\u5165\u4E0E\u8BFB\u53D6\u4E3B\u952E\u8BED\u4E49\u6539\u4E3A\u4EE5 `scopeId` \u4E3A\u6838\u5FC3\uFF1A\n - \u597D\u611F\u5EA6\uFF1A`scopeId + userId`\n - \u9ED1\u540D\u5355\uFF1A`scopeId + userId + mode`\n - \u7528\u6237\u6635\u79F0\uFF1A`scopeId + userId`\n- \u591A bot \u5171\u4EAB\u65B9\u6848\u4ECE\u65E7\u7248\u5206\u7EC4\u914D\u7F6E\u6539\u4E3A\u7EDF\u4E00\u7684 `scopeId` \u8BED\u4E49\u3002\n- \u597D\u611F\u5EA6\u521D\u59CB\u5316\u65F6\u673A\u6539\u4E3A\u201C\u4E0E bot \u9996\u6B21\u6709\u6548\u4EA4\u4E92\u65F6\u5165\u5E93\u201D\uFF0C\u4E0D\u518D\u5728\u6536\u5230\u6D88\u606F\u65F6\u63D0\u524D\u521D\u59CB\u5316\u3002\n- \u968F\u673A\u521D\u59CB\u597D\u611F\u5EA6\u6539\u4E3A\u56FA\u5B9A\u521D\u59CB\u597D\u611F\u5EA6\uFF0C\u9ED8\u8BA4\u503C\u4E3A `30`\u3002\n- `userAlias` \u7684\u6635\u79F0\u4FE1\u606F\u5DF2\u878D\u5165 `affinity` \u53D8\u91CF\u8F93\u51FA\uFF1B\u5F53\u524D\u8F93\u51FA\u5F62\u6001\u4E3A `id name nickname affinity relationship`\u3002\n- \u5BF9\u4E8E\u5C1A\u672A\u4E0E bot \u4EA7\u751F\u6709\u6548\u4E92\u52A8\u7684\u7528\u6237\uFF0C`affinity` \u53D8\u91CF\u73B0\u5728\u4F1A\u76F4\u63A5\u663E\u793A\u9ED8\u8BA4\u597D\u611F\u5EA6\uFF0C\u4EE5\u53CA\u8BE5\u9ED8\u8BA4\u503C\u5BF9\u5E94\u7684\u5173\u7CFB\u3002\n- \u5173\u7CFB\u533A\u95F4\u53D8\u91CF\u540D\u7531 `relationshipAffinityLevel` \u7B80\u5316\u4E3A `relationshipLevel`\u3002\n- \u6240\u6709\u53D8\u91CF\u73B0\u5728\u90FD\u9700\u8981\u663E\u5F0F\u4F20\u5165 `scopeId`\uFF0C\u4F8B\u5982\uFF1A\n - `relationshipLevel(scopeId)`\n - `affinity(scopeId)`\n - `blacklistList(scopeId)`\n- XML \u5DE5\u5177\u8C03\u7528\u53C2\u6570\u6539\u4E3A\u663E\u5F0F\u4F5C\u7528\u57DF\u98CE\u683C\uFF0C\u6838\u5FC3\u5B57\u6BB5\u7EDF\u4E00\u4E3A `scopeId + userId`\u3002\n- `scopeId` \u4F1A\u76F4\u63A5\u4F5C\u4E3A\u6307\u4EE4\u524D\u7F00\uFF1B\u4E0D\u8981\u4F7F\u7528\u4E0E bot \u540D\u79F0\u76F8\u540C\u7684 `scopeId`\uFF0C\u5EFA\u8BAE\u4F18\u5148\u4F7F\u7528\u82F1\u6587\u3002\n- \u65E5\u7A0B\u3001\u5929\u6C14\u80FD\u529B\u62C6\u5206\u81F3 `koishi-plugin-chatluna-schedule`\u3002\n- \u66F4\u591A\u53D8\u91CF\u4E0E XML \u5DE5\u5177\u80FD\u529B\u62C6\u5206\u81F3 `koishi-plugin-chatluna-toolbox`\u3002\n\n### \u5220\u9664\n- \u5220\u9664 ChatLuna \u539F\u751F\u5DE5\u5177\u6CE8\u518C\u80FD\u529B\uFF0C\u5F53\u524D\u7248\u672C\u4E0D\u518D\u63D0\u4F9B\u539F\u751F\u5DE5\u5177\u3002\n- \u5220\u9664\u65E7\u7248 `affinityGroups` \u5171\u4EAB\u5206\u7EC4\u914D\u7F6E\u3002\n- \u5220\u9664\u56FA\u5B9A\u547D\u4EE4\u524D\u7F00 `affinity.*` \u7684\u547D\u540D\u65B9\u5F0F\u3002\n- \u5220\u9664 `relationshipAffinityLevel` \u65E7\u547D\u540D\u3002\n- \u5220\u9664\u4EE5\u4E0B\u52A8\u6001\u914D\u7F6E\u9879\uFF1A\n - \u5355\u6B21\u589E\u52A0\u7684\u77ED\u671F\u597D\u611F\u6700\u5927\u5E45\u5EA6\n - \u5355\u6B21\u51CF\u5C11\u7684\u77ED\u671F\u597D\u611F\u6700\u5927\u5E45\u5EA6\n - \u5141\u8BB8\u989D\u5916\u589E\u51CF\u7A81\u7834\u5355\u6B21\u4E0A\u9650\n- `userAlias` \u4E0D\u518D\u4F5C\u4E3A\u72EC\u7ACB\u53D8\u91CF\u66B4\u9732\uFF1B\u6635\u79F0\u80FD\u529B\u4FDD\u7559\u5728 XML \u4E0E `affinity` \u53D8\u91CF\u8F93\u51FA\u4E2D\u3002\n\n### \u517C\u5BB9\u6027\u63D0\u9192\n- \u8FD9\u662F\u4E00\u6B21\u5E26\u6709\u7834\u574F\u6027\u517C\u5BB9\u53D8\u66F4\u7684\u91CD\u6784\u5347\u7EA7\uFF1B\u65E7\u547D\u4EE4\u3001\u65E7 XML \u53C2\u6570\u548C\u65E7\u53D8\u91CF\u8C03\u7528\u65B9\u5F0F\u90FD\u9700\u8981\u540C\u6B65\u8C03\u6574\u3002\n- \u8FC1\u79FB\u4F1A\u628A\u65E7\u6570\u636E\u6574\u4F53\u5F52\u5165\u5F53\u524D\u5B9E\u4F8B\u7684 `scopeId`\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u62C6\u5206\u4E3A\u591A\u4E2A\u4F5C\u7528\u57DF\u3002\n";
1811
+ declare const usage = "\n## \u66F4\u65B0\u65E5\u5FD7\n\n0.3.0\n\n### \u91CD\u6784\n- \u5F15\u5165 `scopeId` \u4F5C\u4E3A\u65B0\u7684\u6838\u5FC3\u4F5C\u7528\u57DF\u8BED\u4E49\uFF1B\u6570\u636E\u9694\u79BB\u4ECE\u65E7\u7248\u6309 bot / \u65E7\u4E3B\u952E\u5207\u6362\u4E3A\u6309 `scopeId` \u9694\u79BB\u3002\n- \u5355\u4E2A\u5B9E\u4F8B\u5185\u7684\u591A\u4E2A bot \u73B0\u5728\u5171\u4EAB\u540C\u4E00\u4EFD `scopeId` \u6570\u636E\uFF1B\u5171\u4EAB\u8303\u56F4\u8986\u76D6\u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u3001\u7279\u6B8A\u5173\u7CFB\u4E0E\u6635\u79F0\u3002\n- \u6570\u636E\u5E93\u6A21\u578B\u5347\u7EA7\u4E3A v2\uFF1A\n - `chatluna_affinity` -> `chatluna_affinity_v2`\n - `chatluna_blacklist` -> `chatluna_blacklist_v2`\n - `chatluna_user_alias` -> `chatluna_user_alias_v2`\n- \u65B0\u589E\u6570\u636E\u5E93\u8FC1\u79FB\u670D\u52A1\u4E0E\u8FC1\u79FB\u8BB0\u5F55\u8868\uFF0C\u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u5C06\u65E7\u8868\u8FC1\u79FB\u5230 v2 \u7ED3\u6784\u3002\n- \u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u4E0E\u6A21\u578B\u54CD\u5E94\u5904\u7406\u94FE\u8DEF\u91CD\u6784\u4E3A\u66F4\u6E05\u6670\u7684\u670D\u52A1\u5316\u7ED3\u6784\u3002\n\n### \u65B0\u589E\n- \u65B0\u589E `scopeId` \u914D\u7F6E\uFF1B\u5F53\u524D\u7248\u672C\u6309 `scopeId` \u533A\u5206\u6570\u636E\uFF0C\u4E0D\u540C\u5B9E\u4F8B\u4E4B\u95F4\u5B8C\u5168\u9694\u79BB\u3002\n- \u65B0\u589E `botSelfIds` \u914D\u7F6E\uFF0C\u7528\u4E8E\u58F0\u660E\u54EA\u4E9B bot \u5F52\u5C5E\u5F53\u524D `scopeId`\uFF1B\u540C\u4E00 `scopeId` \u4E0B\u591A\u4E2A bot \u5171\u4EAB\u6570\u636E\uFF0C\u7528\u4E8E\u9996\u6B21\u4E92\u52A8\u521D\u59CB\u5316\u597D\u611F\u5EA6\u3002\n- \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u547D\u4EE4\u524D\u7F00\uFF0C\u547D\u4EE4\u7531\u56FA\u5B9A `affinity.*` \u6539\u4E3A `${scopeId}.*`\u3002\n- \u65B0\u589E\u6C38\u4E45\u9ED1\u540D\u5355\u89E3\u9664\u540E\u7684\u597D\u611F\u5EA6\u91CD\u7F6E\u903B\u8F91\uFF1B\u89E3\u9664\u540E\u4F1A\u540C\u65F6\u91CD\u7F6E\u597D\u611F\u5EA6\u76F8\u5173\u72B6\u6001\u3002\n- \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u53D8\u91CF\u8C03\u7528\u8981\u6C42\uFF0C\u53D8\u91CF\u73B0\u5728\u9700\u8981\u663E\u5F0F\u4F20\u5165 `scopeId`\u3002\n- \u65B0\u589E `affinity` \u53D8\u91CF\u7684 `chatcount` \u8F93\u51FA\uFF0C\u9ED8\u8BA4\u663E\u793A\u7528\u6237\u5BF9\u8BDD\u6B21\u6570\uFF0C\u53EF\u5728\u53D8\u91CF\u8BBE\u7F6E\u4E2D\u5173\u95ED\u3002\n- \u65B0\u589E `injectXmlToolAsReplyTool` \u9009\u9879\uFF0C\u53EF\u5C06 XML \u5DE5\u5177\u6CE8\u5165\u5230 ChatLuna Character \u7684\u5B9E\u9A8C\u6027\u5DE5\u5177\u8C03\u7528\u56DE\u590D\u53C2\u6570\u4E2D\u3002\n\n### \u4FEE\u6539\n- \u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u3001\u6635\u79F0\u6570\u636E\u7684\u5199\u5165\u4E0E\u8BFB\u53D6\u4E3B\u952E\u8BED\u4E49\u6539\u4E3A\u4EE5 `scopeId` \u4E3A\u6838\u5FC3\uFF1A\n - \u597D\u611F\u5EA6\uFF1A`scopeId + userId`\n - \u9ED1\u540D\u5355\uFF1A`scopeId + userId + mode`\n - \u7528\u6237\u6635\u79F0\uFF1A`scopeId + userId`\n- \u591A bot \u5171\u4EAB\u65B9\u6848\u4ECE\u65E7\u7248\u5206\u7EC4\u914D\u7F6E\u6539\u4E3A\u7EDF\u4E00\u7684 `scopeId` \u8BED\u4E49\u3002\n- \u597D\u611F\u5EA6\u521D\u59CB\u5316\u65F6\u673A\u6539\u4E3A\u201C\u4E0E bot \u9996\u6B21\u6709\u6548\u4EA4\u4E92\u65F6\u5165\u5E93\u201D\uFF0C\u4E0D\u518D\u5728\u6536\u5230\u6D88\u606F\u65F6\u63D0\u524D\u521D\u59CB\u5316\u3002\n- \u968F\u673A\u521D\u59CB\u597D\u611F\u5EA6\u6539\u4E3A\u56FA\u5B9A\u521D\u59CB\u597D\u611F\u5EA6\uFF0C\u9ED8\u8BA4\u503C\u4E3A `30`\u3002\n- `userAlias` \u7684\u6635\u79F0\u4FE1\u606F\u5DF2\u878D\u5165 `affinity` \u53D8\u91CF\u8F93\u51FA\uFF1B\u5F53\u524D\u8F93\u51FA\u5F62\u6001\u4E3A `id name nickname affinity relationship chatcount`\u3002\n- \u5BF9\u4E8E\u5C1A\u672A\u4E0E bot \u4EA7\u751F\u6709\u6548\u4E92\u52A8\u7684\u7528\u6237\uFF0C`affinity` \u53D8\u91CF\u73B0\u5728\u4F1A\u76F4\u63A5\u663E\u793A\u9ED8\u8BA4\u597D\u611F\u5EA6\uFF0C\u4EE5\u53CA\u8BE5\u9ED8\u8BA4\u503C\u5BF9\u5E94\u7684\u5173\u7CFB\u3002\n- \u5173\u7CFB\u533A\u95F4\u53D8\u91CF\u540D\u7531 `relationshipAffinityLevel` \u7B80\u5316\u4E3A `relationshipLevel`\u3002\n- \u6240\u6709\u53D8\u91CF\u73B0\u5728\u90FD\u9700\u8981\u663E\u5F0F\u4F20\u5165 `scopeId`\uFF0C\u4F8B\u5982\uFF1A\n - `relationshipLevel(scopeId)`\n - `affinity(scopeId)`\n - `blacklistList(scopeId)`\n- XML \u5DE5\u5177\u8C03\u7528\u53C2\u6570\u6539\u4E3A\u663E\u5F0F\u4F5C\u7528\u57DF\u98CE\u683C\uFF0C\u6838\u5FC3\u5B57\u6BB5\u7EDF\u4E00\u4E3A `scopeId + userId`\u3002\n- `scopeId` \u4F1A\u76F4\u63A5\u4F5C\u4E3A\u6307\u4EE4\u524D\u7F00\uFF1B\u4E0D\u8981\u4F7F\u7528\u4E0E bot \u540D\u79F0\u76F8\u540C\u7684 `scopeId`\uFF0C\u5EFA\u8BAE\u4F18\u5148\u4F7F\u7528\u82F1\u6587\u3002\n- \u65E5\u7A0B\u3001\u5929\u6C14\u80FD\u529B\u62C6\u5206\u81F3 `koishi-plugin-chatluna-schedule`\u3002\n- \u66F4\u591A\u53D8\u91CF\u4E0E XML \u5DE5\u5177\u80FD\u529B\u62C6\u5206\u81F3 `koishi-plugin-chatluna-toolbox`\u3002\n\n### \u5220\u9664\n- \u5220\u9664 ChatLuna \u539F\u751F\u5DE5\u5177\u6CE8\u518C\u80FD\u529B\uFF0C\u5F53\u524D\u7248\u672C\u4E0D\u518D\u63D0\u4F9B\u539F\u751F\u5DE5\u5177\u3002\n- \u5220\u9664\u65E7\u7248 `affinityGroups` \u5171\u4EAB\u5206\u7EC4\u914D\u7F6E\u3002\n- \u5220\u9664\u56FA\u5B9A\u547D\u4EE4\u524D\u7F00 `affinity.*` \u7684\u547D\u540D\u65B9\u5F0F\u3002\n- \u5220\u9664 `relationshipAffinityLevel` \u65E7\u547D\u540D\u3002\n- \u5220\u9664\u4EE5\u4E0B\u52A8\u6001\u914D\u7F6E\u9879\uFF1A\n - \u5355\u6B21\u589E\u52A0\u7684\u77ED\u671F\u597D\u611F\u6700\u5927\u5E45\u5EA6\n - \u5355\u6B21\u51CF\u5C11\u7684\u77ED\u671F\u597D\u611F\u6700\u5927\u5E45\u5EA6\n - \u5141\u8BB8\u989D\u5916\u589E\u51CF\u7A81\u7834\u5355\u6B21\u4E0A\u9650\n- `userAlias` \u4E0D\u518D\u4F5C\u4E3A\u72EC\u7ACB\u53D8\u91CF\u66B4\u9732\uFF1B\u6635\u79F0\u80FD\u529B\u4FDD\u7559\u5728 XML \u4E0E `affinity` \u53D8\u91CF\u8F93\u51FA\u4E2D\u3002\n\n### \u517C\u5BB9\u6027\u63D0\u9192\n- \u8FD9\u662F\u4E00\u6B21\u5E26\u6709\u7834\u574F\u6027\u517C\u5BB9\u53D8\u66F4\u7684\u91CD\u6784\u5347\u7EA7\uFF1B\u65E7\u547D\u4EE4\u3001\u65E7 XML \u53C2\u6570\u548C\u65E7\u53D8\u91CF\u8C03\u7528\u65B9\u5F0F\u90FD\u9700\u8981\u540C\u6B65\u8C03\u6574\u3002\n- \u8FC1\u79FB\u4F1A\u628A\u65E7\u6570\u636E\u6574\u4F53\u5F52\u5165\u5F53\u524D\u5B9E\u4F8B\u7684 `scopeId`\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u62C6\u5206\u4E3A\u591A\u4E2A\u4F5C\u7528\u57DF\u3002\n";
1809
1812
 
1810
1813
  export { ACTION_WINDOW_DEFAULTS, AFFINITY_DEFAULTS, AFFINITY_DYNAMICS_DEFAULTS, ALL_MEMBER_INFO_ITEMS, type ActionCounts, type ActionEntry, type ActionStats, type ActionType, type ActionWindowConfig, type AffinityCache, type AffinityDynamicsConfig, type AffinityProvider, type AffinityProviderDeps, type AffinityRecord, AffinitySchema, type AffinityState, type AffinityStore, type AffinityStoreOptions, type ApplyAffinityDeltaParams, type ApplyAffinityDeltaResult, BASE_AFFINITY_DEFAULTS, BLACKLIST_MODEL_NAME, BLACKLIST_MODEL_NAME_V2, BLACKLIST_REPLY_TEMPLATE, type BlacklistCommandDeps, type BlacklistDetail, type BlacklistEnrichedItem, type BlacklistEntry, type BlacklistGuard, type BlacklistGuardOptions, type BlacklistItem, type BlacklistListProvider, type BlacklistListProviderDeps, type BlacklistMode, type BlacklistRecord, type BlacklistRenderer, BlacklistSchema, type BlacklistService, type BlacklistServiceOptions, type BlockCommandDeps, CLOUD_TYPES, COEFFICIENT_DEFAULTS, COMMON_STYLE, type CharacterTempModelResponseRuntime, type CharacterTempModelResponseRuntimeParams, type ClampFn, type CoefficientConfig, type CoefficientResult, type CoefficientState, type CombinedState, type CommandDependencies, ConfigSchema as Config, ConfigSchema, DEFAULT_MEMBER_INFO_ITEMS, type Element, FETCH_CONSTANTS, type HistoryEntry, type InMemoryTemporaryEntry, type InitialRange, type InspectData, type InspectRenderer, type LegacyAffinityRecord, type LegacyBlacklistRecord, type LegacyUserAliasRecord, type LevelResolver, type LogFn, type LogLevel, MIGRATION_MODEL_NAME, MODEL_NAME, MODEL_NAME_V2, type ManualConfigOptions, type ManualRelationship, type ManualRelationshipManager, type MemberInfo, type MemberInfoField, type MessageHistory, type MessageHistoryOptions, type MessageStore, type MessageStoreOptions, type MigrationOptions, type MigrationRecord, type ModelResponseContext, type ModelResponseProcessorParams, type OneBotInternal, type OneBotProtocol, OtherSettingsSchema, type Page, type Puppeteer, RENDER_CONSTANTS, ROLE_MAPPING, type RankItem, type RankLineItem, type RankListRenderer, type RelationshipLevel, type RelationshipLevelProvider, type RelationshipLevelProviderDeps, RelationshipSchema, type RenderMemberInfoOptions, type RenderOptions, type RenderService, type RenderServiceOptions, type ResolvedActionWindowConfig, type ResolvedCoefficientConfig, type ResolvedShortTermConfig, type RoleMapping, type RoleTranslation, SHORT_TERM_DEFAULTS, type SaveExtra, type SessionSeed, type ShortTermConfig, type StoredMessage, type SummarizedActions, THRESHOLDS, TIME_CONSTANTS, TIMING_CONSTANTS, type TableRenderOptions, type TableRenderer, type TempBlockCommandDeps, type TemporaryBlacklistEntry, USER_ALIAS_MODEL_NAME, USER_ALIAS_MODEL_NAME_V2, type UnblockPermanentDeps, type UnblockPermanentInput, type UnblockPermanentResult, type UserAliasRecord, type UserAliasService, type UserAliasServiceOptions, type VariableSettings, type XmlToolSettings, appendActionEntry, apply, applyAffinityDelta, assertScopeId, buildScopedCommandName, callOneBotAPI, clamp, clampFloat, collectNicknameCandidates, collectRoleCandidates, composeState, computeCoefficientValue, computeDailyStreak, computeShortTermReset, createAffinityCache, createAffinityProvider, createAffinityStore, createBlacklistGuard, createBlacklistListProvider, createBlacklistRenderer, createBlacklistService, createCharacterTempModelResponseRuntime, createInspectRenderer, createLevelResolver, createLogger, createManualRelationshipManager, createMessageHistory, createMessageStore, createMigrationService, createModelResponseProcessor, createPermanentUnblockHandler, createRankListRenderer, createRelationshipLevelProvider, createRenderService, createTableRenderer, createUserAliasService, dayNumber, ensureOneBotSession, escapeHtml, escapeHtmlForRender, extendAffinityModel, extendBlacklistModel, extendMigrationModel, extendUserAliasModel, fetchGroupMemberIds, fetchMember, findMemberByName, formatActionCounts, formatBeijingTimestamp, formatDateOnly, formatDateTime, formatTimestamp, getChannelId, getDateString, getGuildId, getPlatform, getPuppeteer, getRoleDisplay, getSelfId, getTimeString, getUserId, hasReplyToolsEnabled, inject, isFiniteNumber, isValidScopeId, makeUserKey, name, normalizeScopeId, normalizeTimestamp, pickFirst, registerAdjustCommand, registerBlacklistCommand, registerBlockCommand, registerCharacterReplyTools, registerClearAllCommand, registerInspectCommand, registerModels, registerRankCommand, registerTempBlockCommand, renderHtml, renderInfoField, renderMemberInfo, renderTemplate, resolveActionWindowConfig, resolveBotInfo, resolveCoefficientConfig, resolveGroupId, resolveRoleLabel, resolveScopedVariableArgs, resolveShortTermConfig, resolveUserIdentity, resolveUserInfo, resolveXmlScopeId, roundTo, sanitizeChannel, stripAtPrefix, summarizeActionEntries, toDate, translateGender, translateRole, truncate, usage };
package/lib/index.js CHANGED
@@ -201,6 +201,10 @@ var require_lib = __commonJS({
201
201
  writable: true
202
202
  });
203
203
  }
204
+ function createMessageFingerprint(message, response) {
205
+ const type = String(message.type ?? message.role ?? "").trim().toLowerCase();
206
+ return `${type}:${response}`;
207
+ }
204
208
  function restoreDispatcher(key, dispatcher) {
205
209
  if (dispatcher.messages.push === dispatcher.patchedPush) {
206
210
  dispatcher.messages.push = dispatcher.originalPush;
@@ -212,17 +216,22 @@ var require_lib = __commonJS({
212
216
  let dispatcher = getDispatcher(messages, key);
213
217
  if (!dispatcher) {
214
218
  const listeners = /* @__PURE__ */ new Set();
215
- const processedMessages = /* @__PURE__ */ new WeakSet();
219
+ const processedMessages = /* @__PURE__ */ new WeakMap();
216
220
  const originalPush = messages.push;
217
221
  const patchedPush = function patchedPush2(...items) {
218
222
  const result = originalPush.apply(this, items);
219
223
  for (const item of items) {
220
224
  if (!item || typeof item !== "object") continue;
221
- if (processedMessages.has(item)) continue;
222
- processedMessages.add(item);
223
225
  const message = item;
224
226
  const response = extractAssistantText(message);
225
227
  if (!response) continue;
228
+ const fingerprint = createMessageFingerprint(
229
+ item,
230
+ response
231
+ );
232
+ const previousFingerprint = processedMessages.get(item);
233
+ if (previousFingerprint === fingerprint) continue;
234
+ processedMessages.set(item, fingerprint);
226
235
  for (const listener2 of Array.from(listeners)) {
227
236
  try {
228
237
  listener2(message);
@@ -839,8 +848,9 @@ var XmlToolSettingsSchema = import_koishi4.Schema.object({
839
848
  }).description("XML \u5DE5\u5177\u8BBE\u7F6E");
840
849
  var VariableSettingsSchema = import_koishi4.Schema.object({
841
850
  affinityVariableName: import_koishi4.Schema.string().default("affinity").description(
842
- '\u597D\u611F\u5EA6\u53D8\u91CF\u540D\u79F0\uFF0C\u8C03\u7528\u793A\u4F8B\uFF1A{affinity("scopeId")}\uFF0C\u8BF7\u5C06 scopeId \u66FF\u6362\u4E3A\u4F60\u8BBE\u5B9A\u7684\u5B9E\u9645 scopeId\u3002\u8FD4\u56DE\u683C\u5F0F\u4E3A\u6587\u672C\u884C\uFF0C\u5305\u542B id\u3001name\u3001nickname\u3001affinity\u3001relationship\uFF1B\u5F53\u5C55\u793A\u8303\u56F4\u5927\u4E8E 1 \u65F6\u4F1A\u8FD4\u56DE\u591A\u884C\u3002'
851
+ '\u597D\u611F\u5EA6\u53D8\u91CF\u540D\u79F0\uFF0C\u8C03\u7528\u793A\u4F8B\uFF1A{affinity("scopeId")}\uFF0C\u8BF7\u5C06 scopeId \u66FF\u6362\u4E3A\u4F60\u8BBE\u5B9A\u7684\u5B9E\u9645 scopeId\u3002\u8FD4\u56DE\u683C\u5F0F\u4E3A\u6587\u672C\u884C\uFF0C\u5305\u542B id\u3001name\u3001nickname\u3001affinity\u3001relationship\u3001chatcount\uFF1B\u5F53\u5C55\u793A\u8303\u56F4\u5927\u4E8E 1 \u65F6\u4F1A\u8FD4\u56DE\u591A\u884C\u3002'
843
852
  ),
853
+ showChatCountInAffinityVariable: import_koishi4.Schema.boolean().default(true).description("\u5728\u597D\u611F\u5EA6\u53D8\u91CF\u4E2D\u663E\u793A\u5BF9\u8BDD\u6B21\u6570 chatcount"),
844
854
  affinityDisplayRange: import_koishi4.Schema.number().default(1).min(1).step(1).description("\u663E\u793A\u5F53\u524D\u4E0A\u4E0B\u6587\u4E2D\u591A\u5C11\u4F4D\u7528\u6237\u7684\u597D\u611F\u5EA6\u4FE1\u606F"),
845
855
  relationshipLevelVariableName: import_koishi4.Schema.string().default("relationshipLevel").description(
846
856
  '\u597D\u611F\u5EA6\u533A\u95F4\u53D8\u91CF\u540D\u79F0\uFF0C\u8C03\u7528\u793A\u4F8B\uFF1A{relationshipLevel("scopeId")}\uFF0C\u8BF7\u5C06 scopeId \u66FF\u6362\u4E3A\u4F60\u8BBE\u5B9A\u7684\u5B9E\u9645 scopeId\u3002\u8FD4\u56DE\u683C\u5F0F\u4E3A\u6587\u672C\u884C\uFF0C\u5217\u51FA\u5F53\u524D\u914D\u7F6E\u4E2D\u7684\u6240\u6709\u533A\u95F4\uFF0C\u5305\u542B min\u3001max\u3001relationship\u3001note\u3002'
@@ -4500,7 +4510,8 @@ function createAffinityProvider(deps) {
4500
4510
  `name:${row.name}`,
4501
4511
  row.nickname ? `nickname:${row.nickname}` : "",
4502
4512
  `affinity:${row.affinity}`,
4503
- `relationship:${row.relationship}`
4513
+ `relationship:${row.relationship}`,
4514
+ config.variableSettings.showChatCountInAffinityVariable ? `chatcount:${row.chatCount}` : ""
4504
4515
  ].filter(Boolean);
4505
4516
  return parts.join(" ");
4506
4517
  };
@@ -4515,7 +4526,7 @@ function createAffinityProvider(deps) {
4515
4526
  const platform = session.platform;
4516
4527
  const targetUserId = resolved?.targetUserId || session.userId;
4517
4528
  const cached = cache.get(scopeId, targetUserId);
4518
- if (cached !== null && (config.affinityDisplayRange ?? 1) <= 1) {
4529
+ if (cached !== null && (config.affinityDisplayRange ?? 1) <= 1 && !config.variableSettings.showChatCountInAffinityVariable) {
4519
4530
  const cachedNickname = await resolveNickname(
4520
4531
  scopeId,
4521
4532
  platform,
@@ -4526,7 +4537,8 @@ function createAffinityProvider(deps) {
4526
4537
  name: targetUserId,
4527
4538
  nickname: cachedNickname,
4528
4539
  affinity: cached,
4529
- relationship: resolveRelationByAffinity(cached)
4540
+ relationship: resolveRelationByAffinity(cached),
4541
+ chatCount: 0
4530
4542
  });
4531
4543
  }
4532
4544
  const currentRecord = await store.load(scopeId, targetUserId);
@@ -4549,7 +4561,8 @@ function createAffinityProvider(deps) {
4549
4561
  name: currentName,
4550
4562
  nickname: currentNickname,
4551
4563
  affinity: currentAffinity,
4552
- relationship: currentRelation
4564
+ relationship: currentRelation,
4565
+ chatCount: currentRecord?.chatCount || 0
4553
4566
  });
4554
4567
  }
4555
4568
  if (typeof fetchEntries !== "function") {
@@ -4558,7 +4571,8 @@ function createAffinityProvider(deps) {
4558
4571
  name: currentName,
4559
4572
  nickname: currentNickname,
4560
4573
  affinity: currentAffinity,
4561
- relationship: currentRelation
4574
+ relationship: currentRelation,
4575
+ chatCount: currentRecord?.chatCount || 0
4562
4576
  });
4563
4577
  }
4564
4578
  const entries = await fetchEntries(session, Math.max(1, displayRange * 10));
@@ -4582,7 +4596,8 @@ function createAffinityProvider(deps) {
4582
4596
  name: currentName,
4583
4597
  nickname: currentNickname,
4584
4598
  affinity: currentAffinity,
4585
- relationship: currentRelation
4599
+ relationship: currentRelation,
4600
+ chatCount: currentRecord?.chatCount || 0
4586
4601
  })
4587
4602
  );
4588
4603
  if (!orderedUsers.length) return rows.join("\n");
@@ -4598,7 +4613,8 @@ function createAffinityProvider(deps) {
4598
4613
  name: name2,
4599
4614
  nickname,
4600
4615
  affinity,
4601
- relationship: relation
4616
+ relationship: relation,
4617
+ chatCount: record?.chatCount || 0
4602
4618
  });
4603
4619
  })
4604
4620
  );
@@ -5273,6 +5289,7 @@ function normalizeToolSettings(config) {
5273
5289
  };
5274
5290
  const variableSettings = {
5275
5291
  affinityVariableName: config.variableSettings?.affinityVariableName || config.affinityVariableName || "affinity",
5292
+ showChatCountInAffinityVariable: config.variableSettings?.showChatCountInAffinityVariable ?? config.showChatCountInAffinityVariable ?? true,
5276
5293
  relationshipLevelVariableName: config.variableSettings?.relationshipLevelVariableName || config.relationshipLevelVariableName || "relationshipLevel",
5277
5294
  blacklistListVariableName: config.variableSettings?.blacklistListVariableName || config.blacklistListVariableName || "blacklistList"
5278
5295
  };
@@ -5699,7 +5716,7 @@ async function callOneBotAPI(internal, action, params, fallbacks = []) {
5699
5716
  var usage = `
5700
5717
  ## \u66F4\u65B0\u65E5\u5FD7
5701
5718
 
5702
- 0.3.0-beta
5719
+ 0.3.0
5703
5720
 
5704
5721
  ### \u91CD\u6784
5705
5722
  - \u5F15\u5165 \`scopeId\` \u4F5C\u4E3A\u65B0\u7684\u6838\u5FC3\u4F5C\u7528\u57DF\u8BED\u4E49\uFF1B\u6570\u636E\u9694\u79BB\u4ECE\u65E7\u7248\u6309 bot / \u65E7\u4E3B\u952E\u5207\u6362\u4E3A\u6309 \`scopeId\` \u9694\u79BB\u3002
@@ -5717,6 +5734,8 @@ var usage = `
5717
5734
  - \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u547D\u4EE4\u524D\u7F00\uFF0C\u547D\u4EE4\u7531\u56FA\u5B9A \`affinity.*\` \u6539\u4E3A \`\${scopeId}.*\`\u3002
5718
5735
  - \u65B0\u589E\u6C38\u4E45\u9ED1\u540D\u5355\u89E3\u9664\u540E\u7684\u597D\u611F\u5EA6\u91CD\u7F6E\u903B\u8F91\uFF1B\u89E3\u9664\u540E\u4F1A\u540C\u65F6\u91CD\u7F6E\u597D\u611F\u5EA6\u76F8\u5173\u72B6\u6001\u3002
5719
5736
  - \u65B0\u589E\u4F5C\u7528\u57DF\u5316\u53D8\u91CF\u8C03\u7528\u8981\u6C42\uFF0C\u53D8\u91CF\u73B0\u5728\u9700\u8981\u663E\u5F0F\u4F20\u5165 \`scopeId\`\u3002
5737
+ - \u65B0\u589E \`affinity\` \u53D8\u91CF\u7684 \`chatcount\` \u8F93\u51FA\uFF0C\u9ED8\u8BA4\u663E\u793A\u7528\u6237\u5BF9\u8BDD\u6B21\u6570\uFF0C\u53EF\u5728\u53D8\u91CF\u8BBE\u7F6E\u4E2D\u5173\u95ED\u3002
5738
+ - \u65B0\u589E \`injectXmlToolAsReplyTool\` \u9009\u9879\uFF0C\u53EF\u5C06 XML \u5DE5\u5177\u6CE8\u5165\u5230 ChatLuna Character \u7684\u5B9E\u9A8C\u6027\u5DE5\u5177\u8C03\u7528\u56DE\u590D\u53C2\u6570\u4E2D\u3002
5720
5739
 
5721
5740
  ### \u4FEE\u6539
5722
5741
  - \u597D\u611F\u5EA6\u3001\u9ED1\u540D\u5355\u3001\u6635\u79F0\u6570\u636E\u7684\u5199\u5165\u4E0E\u8BFB\u53D6\u4E3B\u952E\u8BED\u4E49\u6539\u4E3A\u4EE5 \`scopeId\` \u4E3A\u6838\u5FC3\uFF1A
@@ -5726,7 +5745,7 @@ var usage = `
5726
5745
  - \u591A bot \u5171\u4EAB\u65B9\u6848\u4ECE\u65E7\u7248\u5206\u7EC4\u914D\u7F6E\u6539\u4E3A\u7EDF\u4E00\u7684 \`scopeId\` \u8BED\u4E49\u3002
5727
5746
  - \u597D\u611F\u5EA6\u521D\u59CB\u5316\u65F6\u673A\u6539\u4E3A\u201C\u4E0E bot \u9996\u6B21\u6709\u6548\u4EA4\u4E92\u65F6\u5165\u5E93\u201D\uFF0C\u4E0D\u518D\u5728\u6536\u5230\u6D88\u606F\u65F6\u63D0\u524D\u521D\u59CB\u5316\u3002
5728
5747
  - \u968F\u673A\u521D\u59CB\u597D\u611F\u5EA6\u6539\u4E3A\u56FA\u5B9A\u521D\u59CB\u597D\u611F\u5EA6\uFF0C\u9ED8\u8BA4\u503C\u4E3A \`30\`\u3002
5729
- - \`userAlias\` \u7684\u6635\u79F0\u4FE1\u606F\u5DF2\u878D\u5165 \`affinity\` \u53D8\u91CF\u8F93\u51FA\uFF1B\u5F53\u524D\u8F93\u51FA\u5F62\u6001\u4E3A \`id name nickname affinity relationship\`\u3002
5748
+ - \`userAlias\` \u7684\u6635\u79F0\u4FE1\u606F\u5DF2\u878D\u5165 \`affinity\` \u53D8\u91CF\u8F93\u51FA\uFF1B\u5F53\u524D\u8F93\u51FA\u5F62\u6001\u4E3A \`id name nickname affinity relationship chatcount\`\u3002
5730
5749
  - \u5BF9\u4E8E\u5C1A\u672A\u4E0E bot \u4EA7\u751F\u6709\u6548\u4E92\u52A8\u7684\u7528\u6237\uFF0C\`affinity\` \u53D8\u91CF\u73B0\u5728\u4F1A\u76F4\u63A5\u663E\u793A\u9ED8\u8BA4\u597D\u611F\u5EA6\uFF0C\u4EE5\u53CA\u8BE5\u9ED8\u8BA4\u503C\u5BF9\u5E94\u7684\u5173\u7CFB\u3002
5731
5750
  - \u5173\u7CFB\u533A\u95F4\u53D8\u91CF\u540D\u7531 \`relationshipAffinityLevel\` \u7B80\u5316\u4E3A \`relationshipLevel\`\u3002
5732
5751
  - \u6240\u6709\u53D8\u91CF\u73B0\u5728\u90FD\u9700\u8981\u663E\u5F0F\u4F20\u5165 \`scopeId\`\uFF0C\u4F8B\u5982\uFF1A
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-chatluna-affinity",
3
3
  "description": "ChatLuna Character 好感度系统,提供 {好感度}、{关系}、{黑名单} 变量与工具,并支持 XML 工具调用,仅支持 onebot 平台。",
4
- "version": "0.3.0-beta.4",
4
+ "version": "0.3.0",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
7
  "files": [
@@ -15,10 +15,10 @@
15
15
  "koishi",
16
16
  "plugin"
17
17
  ],
18
- "homepage": "https://github.com/Sor85/koishi-plugins",
18
+ "homepage": "https://github.com/Sor85/AAAAACAT-chatluna-plugins",
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "https://github.com/Sor85/koishi-plugins.git"
21
+ "url": "https://github.com/Sor85/AAAAACAT-chatluna-plugins.git"
22
22
  },
23
23
  "dependencies": {},
24
24
  "peerDependencies": {
@@ -51,6 +51,7 @@
51
51
  "tsup": "^8.0.0",
52
52
  "typescript": "^5.7.2",
53
53
  "vite": "^6.0.0",
54
+ "tsx": "^4.20.6",
54
55
  "shared-chatluna-xmltools": "0.0.1",
55
56
  "shared-nav": "0.0.1"
56
57
  },
@@ -58,6 +59,6 @@
58
59
  "build": "tsup && vite build",
59
60
  "watch": "tsup --watch",
60
61
  "clean": "rimraf lib dist",
61
- "test": "node --test --test-name-pattern='.*' test/*.test.js"
62
+ "test": "node --import tsx --test --test-name-pattern='.*' $(find src -name '*.test.ts' -print)"
62
63
  }
63
64
  }
package/readme.md CHANGED
@@ -80,6 +80,8 @@ npm install koishi-plugin-chatluna-affinity
80
80
  - 模板里放 `{affinity("你的scopeId")}`
81
81
  - 提示词里允许模型输出 `<affinity .../>`、`<relationship .../>`、`<blacklist .../>`、`<userAlias .../>`
82
82
 
83
+ 如果开启 `injectXmlToolAsReplyTool`(界面显示为“将 XML 工具改为注入实验性‘工具调用回复’的参数中”),就不需要把完整 XML 参考提示词塞进角色提示词里;只需要告诉模型当前 `scopeId`,插件会把可用 XML 工具注入到 ChatLuna Character 的工具调用回复参数中。
84
+
83
85
  ## 变量
84
86
 
85
87
  默认变量名如下:
@@ -107,12 +109,13 @@ npm install koishi-plugin-chatluna-affinity
107
109
  输出示例:
108
110
 
109
111
  ```text
110
- id:123456 name:xxx nickname:xxx姐姐 affinity:20 relationship:熟悉
112
+ id:123456 name:xxx nickname:xxx姐姐 affinity:20 relationship:熟悉 chatcount:12
111
113
  ```
112
114
 
113
115
  说明:
114
116
 
115
117
  - `nickname` 只有在用户设置了自定义昵称时才会出现
118
+ - `chatcount` 为该用户的对话次数,默认显示,可在变量设置中关闭
116
119
  - 当未显式传入 `userId` 时,默认取当前上下文用户
117
120
  - `scopeId` 必须显式传入,不传就返回空字符串
118
121
 
@@ -124,16 +127,14 @@ id:123456 name:xxx nickname:xxx姐姐 affinity:20 relationship:熟悉
124
127
 
125
128
  返回当前上下文可见范围内的黑名单信息。
126
129
 
127
- 这里要分清楚:
130
+ 说明:
128
131
 
129
132
  - 黑名单的实际生效范围是当前 `scopeId`
130
- - 群聊里的展示会按当前群成员做过滤
131
-
132
- 别把展示过滤当成存储隔离,这是两回事。
133
+ - 群聊里的列表展示会按当前群成员过滤
133
134
 
134
135
  ### 变量调用注意事项
135
136
 
136
- `scopeId` 建议始终写成字符串字面量。
137
+ 变量调用时,`scopeId` 必须写在引号里。
137
138
 
138
139
  正确:
139
140
 
@@ -158,6 +159,15 @@ id:123456 name:xxx nickname:xxx姐姐 affinity:20 relationship:熟悉
158
159
 
159
160
  这些能力分别受对应配置开关控制。
160
161
 
162
+ ### 实验性工具调用回复注入
163
+
164
+ `injectXmlToolAsReplyTool` 对应控制台选项“将 XML 工具改为注入实验性‘工具调用回复’的参数中”,默认关闭。
165
+
166
+ - 关闭时:插件按传统方式从模型原始输出中解析 XML 标签,角色提示词中需要包含 XML 格式说明。
167
+ - 开启时:插件会把已启用的 XML 工具作为 ChatLuna Character 的工具调用回复参数注入,角色提示词中只需要提供当前 `scopeId`。
168
+ - 这个模式仍然遵守 `enableAffinityXmlToolCall`、`enableBlacklistXmlToolCall`、`enableRelationshipXmlToolCall`、`enableUserAliasXmlToolCall` 等开关。
169
+ - 这是实验性能力。如果模型无法稳定触发工具调用回复,保持关闭并继续使用原始 XML 输出方式。
170
+
161
171
  ### XML 规则
162
172
 
163
173
  所有 XML 工具都遵守下面这几条:
@@ -243,7 +253,7 @@ scopeId.指令名
243
253
  - 黑名单设置:默认列表、临时拉黑处罚、解除永久拉黑后的初始值等
244
254
  - 关系设置:区间关系与特殊关系
245
255
  - 变量设置:变量名重命名
246
- - XML 工具设置:是否启用各类 XML 与参考提示词
256
+ - XML 工具设置:是否启用各类 XML、是否注入实验性工具调用回复,以及参考提示词
247
257
  - 其他设置:图片渲染、调试日志、详情显示印象等
248
258
 
249
259
  如果你只是正常使用,优先关注这几个配置:
@@ -255,9 +265,12 @@ scopeId.指令名
255
265
  - `rankDefaultLimit`
256
266
  - `unblockPermanentInitialAffinity`
257
267
  - `debugLogging`
268
+ - `injectXmlToolAsReplyTool`
258
269
  - `characterPromptTemplate`
259
270
 
260
- `characterPromptTemplate` 里出现的 `{scopeId}` 不会自动替换。那只是参考占位符,你要自己手动替换成真实值。
271
+ `injectXmlToolAsReplyTool` 默认关闭。只有当你想让插件把 XML 工具注入到 ChatLuna Character 的实验性工具调用回复参数中时,才需要开启它。
272
+
273
+ `characterPromptTemplate` 里出现的 `{scopeId}` 不会自动替换,它只是参考占位符,使用时需要手动替换成真实值。
261
274
 
262
275
 
263
276
  ## 调试建议
@@ -280,140 +293,4 @@ scopeId.指令名
280
293
 
281
294
  ## 许可证
282
295
 
283
- MIT © 2024-present chatluna-affinity contributors
284
-
285
- ## 更新日志
286
-
287
- > 以下为历史版本记录,当前可用能力请以本文上方「变量与模板占位符 / 指令 / 工具」章节为准。
288
-
289
- 0.3.0-alpha.1
290
-
291
- ### 重构
292
- - 引入 `scopeId` 作为新的核心作用域语义;数据隔离从旧版按 bot / 旧主键切换为按 `scopeId` 隔离。
293
- - 单个实例内的多个 bot 现在共享同一份 `scopeId` 数据;共享范围覆盖好感度、黑名单、特殊关系与昵称。
294
- - 数据库模型升级为 v2:
295
- - `chatluna_affinity` -> `chatluna_affinity_v2`
296
- - `chatluna_blacklist` -> `chatluna_blacklist_v2`
297
- - `chatluna_user_alias` -> `chatluna_user_alias_v2`
298
- - 新增数据库迁移服务与迁移记录表,启动时会自动将旧表迁移到 v2 结构。
299
- - 好感度、黑名单与模型响应处理链路重构为更清晰的服务化结构。
300
-
301
- ### 新增
302
- - 新增 `scopeId` 配置;当前版本按 `scopeId` 区分数据,不同实例之间完全隔离。
303
- - 新增 `botSelfIds` 配置,用于声明哪些 bot 归属当前 `scopeId`;同一 `scopeId` 下多个 bot 共享数据,用于首次互动初始化好感度。
304
- - 新增作用域化命令前缀,命令由固定 `affinity.*` 改为 `${scopeId}.*`。
305
- - 新增永久黑名单解除后的好感度重置逻辑;解除后会同时重置好感度相关状态。
306
- - 新增作用域化变量调用要求,变量现在需要显式传入 `scopeId`。
307
-
308
- ### 修改
309
- - 好感度、黑名单、昵称数据的写入与读取主键语义改为以 `scopeId` 为核心:
310
- - 好感度:`scopeId + userId`
311
- - 黑名单:`scopeId + userId + mode`
312
- - 用户昵称:`scopeId + userId`
313
- - 多 bot 共享方案从旧版分组配置改为统一的 `scopeId` 语义。
314
- - 好感度初始化时机改为“与 bot 首次有效交互时入库”,不再在收到消息时提前初始化。
315
- - 随机初始好感度改为固定初始好感度,默认值为 `30`。
316
- - `userAlias` 的昵称信息已融入 `affinity` 变量输出;当前输出形态为 `id name nickname affinity relationship`。
317
- - 对于尚未与 bot 产生有效互动的用户,`affinity` 变量现在会直接显示默认好感度,以及该默认值对应的关系。
318
- - 关系区间变量名由 `relationshipAffinityLevel` 简化为 `relationshipLevel`。
319
- - 所有变量现在都需要显式传入 `scopeId`,例如:
320
- - `relationshipLevel(scopeId)`
321
- - `affinity(scopeId)`
322
- - `blacklistList(scopeId)`
323
- - XML 工具调用参数改为显式作用域风格,核心字段统一为 `scopeId + userId`;
324
- - `scopeId` 会直接作为指令前缀;不要使用与 bot 名称相同的 `scopeId`,建议优先使用英文。
325
-
326
- ### 删除
327
- - 删除 ChatLuna 原生工具注册能力,当前版本不再提供原生工具。
328
- - 删除旧版 `affinityGroups` 共享分组配置。
329
- - 删除固定命令前缀 `affinity.*` 的命名方式。
330
- - 删除 `relationshipAffinityLevel` 旧命名。
331
- - 删除以下动态配置项:
332
- - 单次增加的短期好感最大幅度
333
- - 单次减少的短期好感最大幅度
334
- - 允许额外增减突破单次上限
335
- - `userAlias` 不再作为独立变量暴露;昵称能力保留在 XML 与 `affinity` 变量输出中。
336
-
337
- ### 兼容性提醒
338
- - 这是一次带有破坏性兼容变更的重构升级;旧命令、旧 XML 参数和旧变量调用方式都需要同步调整。
339
- - 迁移会把旧数据整体归入当前实例的 `scopeId`,不会自动拆分为多个作用域。
340
-
341
- 0.2.6
342
-
343
- ### 新增
344
- - 黑名单、关系调整 XML 工具调用。
345
- - 黑名单临时拉黑能力(XML)。
346
- - `blacklistList` 变量(当前群黑名单信息)。
347
- - 用户自定义昵称能力:`userAlias` XML 工具,昵称会融入 `affinity` 变量输出,数据持久化到数据库。
348
-
349
- ### 调整
350
- - 黑名单能力改为由 Bot 通过 XML 自主决策(含永久/临时与解除)。
351
- - 黑名单相关数据由配置存储迁移为数据库存储。
352
- - `contextAffinity` 变量能力并入 `affinity` 变量。
353
- - 日程、天气能力拆分至 `koishi-plugin-chatluna-schedule`。
354
- - 更多变量与 XML 工具能力拆分至 `koishi-plugin-chatluna-toolbox`。
355
-
356
- ### 移除
357
- - 天气、日程、冗余变量与冗余工具(由拆分插件承接)。
358
- - 设置好感度工具。
359
- - 自动拉黑逻辑,改为由 Bot 决策触发。
360
-
361
- 0.2.5
362
- - 将 puppeteer 从可选依赖改为可选服务
363
-
364
- 0.2.4
365
- - userInfo 变量新增 chatCount 字段,可展示聊天次数
366
- - 修复状态改变后 XML 工具拦截失效的问题
367
-
368
- 0.2.3
369
- - OneBot 协议新增 NapCat/LLBot 独立选项,按配置选择协议
370
-
371
- 0.2.3-alpha.4
372
- - 修复日程生成提示词人设注入变量 {persona} 失效的问题,新增模型选择与人设注入选项
373
- - 天气服务切换为 open-meteo,不再需要提供 token
374
-
375
- 0.2.3-alpha.3
376
- - 修复无法选择日程模型的问题
377
-
378
- 0.2.3-alpha.2
379
- - 修复好感度更新时未更新 chatCount 的问题
380
-
381
- 0.2.3-alpha.1
382
- - 新增 XML 工具,解析原始输出中的 <poke id=\"\" /> 戳一戳、<emoji id=\"\" /> 表情回应、<delete message_id=\"\" /> 撤回消息
383
- - 重构好感度,从依赖外部模型改为解析原始输出中的 <affinity delta=\"\" action=\"increase|decrease\" id=\"\" />
384
-
385
- 0.2.2-alpha.13
386
- - 新增 send_fake_msg 工具,用于伪造消息并发送合并转发
387
-
388
- 0.2.2-alpha.12
389
- - groupInfo 变量新增 includeOwnersAndAdmins 配置,用于展示群主/管理员名单
390
- - 关系设置新增新增好感度区间变量 relationshipLevel ,按配置逐行展示所有好感度区间、关系与备注
391
-
392
- 0.2.2-alpha.11
393
- - 撤回工具修改为按 messageid 撤回,移除 lastN/关键词等模糊匹配路径
394
- - 新增 set_msg_emoji 工具,按 messageid + emoji_id 对消息添加表情
395
- - 新增 send_forward_msg 合并转发工具(未完成)
396
- - 新增 varslist/toolslist 指令,分别列出已启用的变量与工具
397
-
398
- 0.2.2-alpha.10
399
- - 好感度详情新增“印象”显示开关 inspectShowImpression,可关闭印象获取与展示(affinity.inspect)
400
-
401
- 0.2.2-alpha.9
402
- - 新增群昵称工具,支持修改群成员昵称(OneBot 平台,需群管理权限)
403
- - 好感度分析提示词调整:若 Bot 回复已包含好感度变化倾向,则以回复为准,避免冲突
404
-
405
- 0.2.2-alpha.8
406
- - 好感度设置中新增“使用原始输出”开关,开启后好感度分析直接使用 chatluna-character 的原始输出
407
- - 天气设置新增 get_weather 工具注册,可通过工具查询指定城市天气
408
-
409
- 0.2.2-alpha.7
410
- - 在好感度分析提示词中新增 currentRelationship 变量
411
-
412
- 0.2.2-alpha.6
413
- - 新增 weather、outfit 变量
414
-
415
- 0.2.2-alpha.5
416
- - fix
417
-
418
- 0.2.2-alpha.4
419
- - 修改好感度分组的存储键格式,使用 groupName,selfId 作为数据库记录的 selfId 字段
296
+ MIT © 2024-present chatluna-affinity contributors