@zhin.js/adapter-napcat 1.0.0 → 1.1.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.
Files changed (159) hide show
  1. package/CHANGELOG.md +674 -0
  2. package/README.md +60 -95
  3. package/adapters/napcat.js +47 -0
  4. package/adapters/napcat.ts +64 -0
  5. package/agent/PERMITS.md +19 -0
  6. package/{skills/napcat/SKILL.md → agent/skills/napcat.md} +6 -6
  7. package/agent/tools/ai_tts.ts +19 -0
  8. package/agent/tools/del_group_notice.ts +20 -0
  9. package/agent/tools/delete_essence_msg.ts +19 -0
  10. package/agent/tools/delete_friend.ts +18 -0
  11. package/agent/tools/download_file.ts +17 -0
  12. package/agent/tools/forward_single_msg.ts +28 -0
  13. package/agent/tools/get_ai_characters.ts +17 -0
  14. package/agent/tools/get_essence_list.ts +17 -0
  15. package/agent/tools/get_friend_msg_history.ts +18 -0
  16. package/agent/tools/get_group_file_url.ts +19 -0
  17. package/agent/tools/get_group_info_ex.ts +17 -0
  18. package/agent/tools/get_group_msg_history.ts +19 -0
  19. package/agent/tools/get_group_notice.ts +17 -0
  20. package/agent/tools/get_group_root_files.ts +17 -0
  21. package/agent/tools/get_group_shut_list.ts +17 -0
  22. package/agent/tools/get_mini_app_ark.ts +20 -0
  23. package/agent/tools/get_user_status.ts +16 -0
  24. package/agent/tools/group_sign.ts +18 -0
  25. package/agent/tools/mark_msg_as_read.ts +17 -0
  26. package/agent/tools/ocr_image.ts +16 -0
  27. package/agent/tools/send_forward_msg.ts +27 -0
  28. package/agent/tools/send_group_notice.ts +21 -0
  29. package/agent/tools/send_like.ts +18 -0
  30. package/agent/tools/send_poke.ts +18 -0
  31. package/agent/tools/set_avatar.ts +17 -0
  32. package/agent/tools/set_emoji_reaction.ts +18 -0
  33. package/agent/tools/set_essence_msg.ts +19 -0
  34. package/agent/tools/set_group_portrait.ts +20 -0
  35. package/agent/tools/set_online_status.ts +18 -0
  36. package/agent/tools/set_profile.ts +21 -0
  37. package/agent/tools/set_signature.ts +17 -0
  38. package/agent/tools/set_title.ts +21 -0
  39. package/agent/tools/translate.ts +16 -0
  40. package/agent/tools/upload_group_file.ts +21 -0
  41. package/commands/endpoint/add/[id].js +3 -0
  42. package/commands/endpoint/add/[id].ts +3 -0
  43. package/commands/endpoint/list.js +3 -0
  44. package/commands/endpoint/list.ts +3 -0
  45. package/commands/endpoint/remove/[id].js +3 -0
  46. package/commands/endpoint/remove/[id].ts +3 -0
  47. package/lib/client.d.ts +52 -0
  48. package/lib/client.js +62 -0
  49. package/lib/endpoint-management.d.ts +15 -0
  50. package/lib/endpoint-management.js +47 -0
  51. package/lib/http-endpoint.d.ts +27 -0
  52. package/lib/http-endpoint.js +177 -0
  53. package/lib/index.d.ts +11 -22
  54. package/lib/index.js +10 -58
  55. package/lib/napcat-endpoint-commands.d.ts +1 -0
  56. package/lib/napcat-endpoint-commands.js +28 -0
  57. package/lib/napcat-inbound.d.ts +12 -5
  58. package/lib/napcat-inbound.js +28 -13
  59. package/lib/napcat-runtime-state.d.ts +1 -0
  60. package/lib/napcat-runtime-state.js +6 -0
  61. package/lib/onebot-get-msg.d.ts +16 -3
  62. package/lib/onebot-get-msg.js +53 -1
  63. package/lib/protocol.d.ts +165 -0
  64. package/lib/protocol.js +305 -0
  65. package/lib/side-event-dispatch.d.ts +7 -0
  66. package/lib/side-event-dispatch.js +36 -0
  67. package/lib/webhook.d.ts +2 -0
  68. package/lib/webhook.js +14 -0
  69. package/lib/ws-endpoint.d.ts +27 -0
  70. package/lib/ws-endpoint.js +241 -0
  71. package/lib/ws-transport.d.ts +13 -0
  72. package/lib/ws-transport.js +75 -0
  73. package/lib/ws-types.d.ts +17 -0
  74. package/lib/ws-types.js +1 -0
  75. package/lib/wss-auth.d.ts +2 -0
  76. package/lib/wss-auth.js +16 -0
  77. package/lib/wss-endpoint.d.ts +26 -0
  78. package/lib/wss-endpoint.js +187 -0
  79. package/package.json +62 -30
  80. package/plugin.js +18 -0
  81. package/schema.json +110 -0
  82. package/src/client.ts +79 -0
  83. package/src/endpoint-management.ts +72 -0
  84. package/src/http-endpoint.ts +234 -0
  85. package/src/index.ts +63 -85
  86. package/src/napcat-endpoint-commands.ts +26 -0
  87. package/src/napcat-inbound.ts +34 -10
  88. package/src/napcat-runtime-state.ts +7 -0
  89. package/src/onebot-get-msg.ts +69 -5
  90. package/src/protocol.ts +468 -0
  91. package/src/side-event-dispatch.ts +48 -0
  92. package/src/webhook.ts +16 -0
  93. package/src/ws-endpoint.ts +301 -0
  94. package/src/ws-transport.ts +105 -0
  95. package/src/ws-types.ts +20 -0
  96. package/src/wss-auth.ts +17 -0
  97. package/src/wss-endpoint.ts +242 -0
  98. package/client/NapCatManagement.tsx +0 -113
  99. package/client/index.tsx +0 -11
  100. package/client/tsconfig.json +0 -7
  101. package/client/utils/api.ts +0 -30
  102. package/dist/index.js +0 -27
  103. package/lib/adapter.d.ts +0 -27
  104. package/lib/adapter.d.ts.map +0 -1
  105. package/lib/adapter.js +0 -93
  106. package/lib/adapter.js.map +0 -1
  107. package/lib/agent-prompt.d.ts +0 -3
  108. package/lib/agent-prompt.d.ts.map +0 -1
  109. package/lib/agent-prompt.js +0 -105
  110. package/lib/agent-prompt.js.map +0 -1
  111. package/lib/bot-base.d.ts +0 -143
  112. package/lib/bot-base.d.ts.map +0 -1
  113. package/lib/bot-base.js +0 -334
  114. package/lib/bot-base.js.map +0 -1
  115. package/lib/bot-http.d.ts +0 -18
  116. package/lib/bot-http.d.ts.map +0 -1
  117. package/lib/bot-http.js +0 -119
  118. package/lib/bot-http.js.map +0 -1
  119. package/lib/bot-ws-client.d.ts +0 -21
  120. package/lib/bot-ws-client.d.ts.map +0 -1
  121. package/lib/bot-ws-client.js +0 -165
  122. package/lib/bot-ws-client.js.map +0 -1
  123. package/lib/bot-ws-server.d.ts +0 -21
  124. package/lib/bot-ws-server.d.ts.map +0 -1
  125. package/lib/bot-ws-server.js +0 -150
  126. package/lib/bot-ws-server.js.map +0 -1
  127. package/lib/index.d.ts.map +0 -1
  128. package/lib/index.js.map +0 -1
  129. package/lib/napcat-inbound.d.ts.map +0 -1
  130. package/lib/napcat-inbound.js.map +0 -1
  131. package/lib/onebot-get-msg.d.ts.map +0 -1
  132. package/lib/onebot-get-msg.js.map +0 -1
  133. package/lib/routes.d.ts +0 -4
  134. package/lib/routes.d.ts.map +0 -1
  135. package/lib/routes.js +0 -61
  136. package/lib/routes.js.map +0 -1
  137. package/lib/tools.d.ts +0 -8
  138. package/lib/tools.d.ts.map +0 -1
  139. package/lib/tools.js +0 -605
  140. package/lib/tools.js.map +0 -1
  141. package/lib/types.d.ts +0 -293
  142. package/lib/types.d.ts.map +0 -1
  143. package/lib/types.js +0 -6
  144. package/lib/types.js.map +0 -1
  145. package/lib/typing-indicator.d.ts +0 -45
  146. package/lib/typing-indicator.d.ts.map +0 -1
  147. package/lib/typing-indicator.js +0 -132
  148. package/lib/typing-indicator.js.map +0 -1
  149. package/plugin.yml +0 -3
  150. package/src/adapter.ts +0 -99
  151. package/src/agent-prompt.ts +0 -114
  152. package/src/bot-base.ts +0 -376
  153. package/src/bot-http.ts +0 -109
  154. package/src/bot-ws-client.ts +0 -164
  155. package/src/bot-ws-server.ts +0 -150
  156. package/src/routes.ts +0 -61
  157. package/src/tools.ts +0 -632
  158. package/src/types.ts +0 -279
  159. package/src/typing-indicator.ts +0 -184
@@ -1,113 +0,0 @@
1
- import { useCallback, useEffect, useState } from "react";
2
- import { Bot, Users, RefreshCw, Wifi, WifiOff, Loader2, Activity } from "lucide-react";
3
- import { apiFetch } from "./utils/api";
4
-
5
- interface BotRow {
6
- name: string;
7
- connected: boolean;
8
- connection: string;
9
- groupCount: number;
10
- friendCount: number;
11
- status: string;
12
- }
13
-
14
- export default function NapCatManagement() {
15
- const [bots, setBots] = useState<BotRow[]>([]);
16
- const [loading, setLoading] = useState(true);
17
- const [err, setErr] = useState<string | null>(null);
18
-
19
- const loadBots = useCallback(async () => {
20
- setLoading(true);
21
- setErr(null);
22
- try {
23
- const res = await apiFetch("/api/napcat/bots");
24
- const json = (await res.json()) as { success?: boolean; data?: BotRow[]; message?: string };
25
- if (!res.ok || !json.success) throw new Error(json.message || "加载失败");
26
- setBots(Array.isArray(json.data) ? json.data : []);
27
- } catch (e) {
28
- setErr((e as Error).message);
29
- setBots([]);
30
- } finally {
31
- setLoading(false);
32
- }
33
- }, []);
34
-
35
- useEffect(() => {
36
- void loadBots();
37
- }, [loadBots]);
38
-
39
- const connectionLabel = (c: string) => {
40
- switch (c) {
41
- case 'ws': return '正向 WS';
42
- case 'wss': return '反向 WS';
43
- case 'http': return 'HTTP';
44
- default: return c;
45
- }
46
- };
47
-
48
- return (
49
- <div className="p-6 max-w-5xl mx-auto space-y-5">
50
- <div className="flex items-center justify-between">
51
- <div>
52
- <h1 className="text-2xl font-bold flex items-center gap-2">
53
- <Bot className="w-6 h-6" /> NapCat 管理
54
- </h1>
55
- <p className="text-sm text-muted-foreground mt-1">
56
- NapCatQQ 机器人概览(OneBot11 + go-cqhttp + NapCat 扩展)
57
- </p>
58
- </div>
59
- <button
60
- onClick={loadBots}
61
- disabled={loading}
62
- className="flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm"
63
- >
64
- <RefreshCw className={`w-4 h-4 ${loading ? "animate-spin" : ""}`} /> 刷新
65
- </button>
66
- </div>
67
-
68
- {err && (
69
- <div className="p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800">
70
- {err}
71
- </div>
72
- )}
73
- {loading ? (
74
- <div className="flex justify-center py-12">
75
- <Loader2 className="w-6 h-6 animate-spin text-blue-500" />
76
- </div>
77
- ) : bots.length === 0 ? (
78
- <div className="text-center text-muted-foreground py-12">
79
- 暂无 NapCat 机器人实例
80
- </div>
81
- ) : (
82
- <div className="grid gap-4 md:grid-cols-2">
83
- {bots.map((b) => (
84
- <div key={b.name} className="border rounded-lg p-4 bg-card shadow-sm">
85
- <div className="flex items-center justify-between mb-3">
86
- <span className="font-medium text-lg">{b.name}</span>
87
- {b.connected ? (
88
- <span className="flex items-center gap-1 text-green-600 text-sm">
89
- <Wifi className="w-4 h-4" /> 在线
90
- </span>
91
- ) : (
92
- <span className="flex items-center gap-1 text-gray-400 text-sm">
93
- <WifiOff className="w-4 h-4" /> 离线
94
- </span>
95
- )}
96
- </div>
97
- <div className="space-y-2 text-sm text-muted-foreground">
98
- <div className="flex items-center gap-1.5">
99
- <Users className="w-3.5 h-3.5" />
100
- 群 {b.groupCount} · 好友 {b.friendCount}
101
- </div>
102
- <div className="flex items-center gap-1.5">
103
- <Activity className="w-3.5 h-3.5" />
104
- 连接方式 {connectionLabel(b.connection)} · {b.status}
105
- </div>
106
- </div>
107
- </div>
108
- ))}
109
- </div>
110
- )}
111
- </div>
112
- );
113
- }
package/client/index.tsx DELETED
@@ -1,11 +0,0 @@
1
- import type { PluginRegisterHostApi } from '@zhin.js/contract';
2
- import NapCatManagement from './NapCatManagement';
3
-
4
- export function register(api: PluginRegisterHostApi) {
5
- api.addRoute({
6
- path: '/console/napcat',
7
- name: 'NapCat管理',
8
- element: api.React.createElement(NapCatManagement, { hostReact: api.React }),
9
- });
10
- api.addTool({ id: 'napcat', name: 'NapCat', path: '/console/napcat' });
11
- }
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "../node_modules/@zhin.js/host-api/browser.tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../dist"
5
- },
6
- "include": ["./**/*"]
7
- }
@@ -1,30 +0,0 @@
1
- const TOKEN_KEY = "zhin_api_token";
2
- const API_BASE_KEY = "zhin_api_base";
3
-
4
- export function getApiBase(): string {
5
- const stored = localStorage.getItem(API_BASE_KEY)?.trim();
6
- if (stored) return stored.replace(/\/$/, "");
7
- if (typeof window !== "undefined") return window.location.origin;
8
- return "";
9
- }
10
-
11
- export function getToken(): string | null {
12
- return localStorage.getItem(TOKEN_KEY);
13
- }
14
-
15
- export async function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
16
- const token = getToken();
17
- const headers = new Headers(init?.headers);
18
- if (token) headers.set("Authorization", `Bearer ${token}`);
19
-
20
- const base = getApiBase();
21
- const url =
22
- typeof input === "string" && input.startsWith("/") ? `${base}${input}` : input;
23
-
24
- const res = await fetch(url, { ...init, headers });
25
- if (res.status === 401) {
26
- localStorage.removeItem(TOKEN_KEY);
27
- window.dispatchEvent(new CustomEvent("zhin:auth-required"));
28
- }
29
- return res;
30
- }
package/dist/index.js DELETED
@@ -1,27 +0,0 @@
1
- import{useCallback as te,useEffect as ue,useState as w}from"react";import{forwardRef as X,createElement as N}from"react";var S=(...e)=>e.filter((a,u,o)=>!!a&&a.trim()!==""&&o.indexOf(a)===u).join(" ").trim();var B=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var M=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,u,o)=>o?o.toUpperCase():u.toLowerCase());var k=e=>{let a=M(e);return a.charAt(0).toUpperCase()+a.slice(1)};import{forwardRef as z,createElement as R}from"react";var g={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var F=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return!0;return!1};import{createContext as W,useContext as V,useMemo as ne,createElement as pe}from"react";var E=W({});var D=()=>V(E);var T=z(({color:e,size:a,strokeWidth:u,absoluteStrokeWidth:o,className:s="",children:r,iconNode:i,...h},t)=>{let{size:c=24,strokeWidth:A=2,absoluteStrokeWidth:b=!1,color:U="currentColor",className:O=""}=D()??{},v=o??b?Number(u??A)*24/Number(a??c):u??A;return R("svg",{ref:t,...g,width:a??c??g.width,height:a??c??g.height,stroke:e??U,strokeWidth:v,className:S("lucide",O,s),...!r&&!F(h)&&{"aria-hidden":"true"},...h},[...i.map(([H,G])=>R(H,G)),...Array.isArray(r)?r:[r]])});var d=(e,a)=>{let u=X(({className:o,...s},r)=>N(T,{ref:r,iconNode:a,className:S(`lucide-${B(k(e))}`,`lucide-${e}`,o),...s}));return u.displayName=k(e),u};var K=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],p=d("activity",K);var Z=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],L=d("bot",Z);var Q=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",Q);var J=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],m=d("refresh-cw",J);var _=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],I=d("users",_);var j=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],x=d("wifi-off",j);var Y=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],C=d("wifi",Y);var y="zhin_api_token",$="zhin_api_base";function ee(){let e=localStorage.getItem($)?.trim();return e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function ae(){return localStorage.getItem(y)}async function q(e,a){let u=ae(),o=new Headers(a?.headers);u&&o.set("Authorization",`Bearer ${u}`);let s=ee(),r=typeof e=="string"&&e.startsWith("/")?`${s}${e}`:e,i=await fetch(r,{...a,headers:o});return i.status===401&&(localStorage.removeItem(y),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i}import{jsx as l,jsxs as f}from"react/jsx-runtime";function P(){let[e,a]=w([]),[u,o]=w(!0),[s,r]=w(null),i=te(async()=>{o(!0),r(null);try{let t=await q("/api/napcat/bots"),c=await t.json();if(!t.ok||!c.success)throw new Error(c.message||"\u52A0\u8F7D\u5931\u8D25");a(Array.isArray(c.data)?c.data:[])}catch(t){r(t.message),a([])}finally{o(!1)}},[]);ue(()=>{i()},[i]);let h=t=>{switch(t){case"ws":return"\u6B63\u5411 WS";case"wss":return"\u53CD\u5411 WS";case"http":return"HTTP";default:return t}};return f("div",{className:"p-6 max-w-5xl mx-auto space-y-5",children:[f("div",{className:"flex items-center justify-between",children:[f("div",{children:[f("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[l(L,{className:"w-6 h-6"})," NapCat \u7BA1\u7406"]}),l("p",{className:"text-sm text-muted-foreground mt-1",children:"NapCatQQ \u673A\u5668\u4EBA\u6982\u89C8\uFF08OneBot11 + go-cqhttp + NapCat \u6269\u5C55\uFF09"})]}),f("button",{onClick:i,disabled:u,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm",children:[l(m,{className:`w-4 h-4 ${u?"animate-spin":""}`})," \u5237\u65B0"]})]}),s&&l("div",{className:"p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:s}),u?l("div",{className:"flex justify-center py-12",children:l(n,{className:"w-6 h-6 animate-spin text-blue-500"})}):e.length===0?l("div",{className:"text-center text-muted-foreground py-12",children:"\u6682\u65E0 NapCat \u673A\u5668\u4EBA\u5B9E\u4F8B"}):l("div",{className:"grid gap-4 md:grid-cols-2",children:e.map(t=>f("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[f("div",{className:"flex items-center justify-between mb-3",children:[l("span",{className:"font-medium text-lg",children:t.name}),t.connected?f("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[l(C,{className:"w-4 h-4"})," \u5728\u7EBF"]}):f("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[l(x,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),f("div",{className:"space-y-2 text-sm text-muted-foreground",children:[f("div",{className:"flex items-center gap-1.5",children:[l(I,{className:"w-3.5 h-3.5"}),"\u7FA4 ",t.groupCount," \xB7 \u597D\u53CB ",t.friendCount]}),f("div",{className:"flex items-center gap-1.5",children:[l(p,{className:"w-3.5 h-3.5"}),"\u8FDE\u63A5\u65B9\u5F0F ",h(t.connection)," \xB7 ",t.status]})]})]},t.name))})]})}function ta(e){e.addRoute({path:"/console/napcat",name:"NapCat\u7BA1\u7406",element:e.React.createElement(P,{hostReact:e.React})}),e.addTool({id:"napcat",name:"NapCat",path:"/console/napcat"})}export{ta as register};
2
- /*! Bundled license information:
3
-
4
- lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
5
- lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs:
6
- lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs:
7
- lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs:
8
- lucide-react/dist/esm/defaultAttributes.mjs:
9
- lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs:
10
- lucide-react/dist/esm/context.mjs:
11
- lucide-react/dist/esm/Icon.mjs:
12
- lucide-react/dist/esm/createLucideIcon.mjs:
13
- lucide-react/dist/esm/icons/activity.mjs:
14
- lucide-react/dist/esm/icons/bot.mjs:
15
- lucide-react/dist/esm/icons/loader-circle.mjs:
16
- lucide-react/dist/esm/icons/refresh-cw.mjs:
17
- lucide-react/dist/esm/icons/users.mjs:
18
- lucide-react/dist/esm/icons/wifi-off.mjs:
19
- lucide-react/dist/esm/icons/wifi.mjs:
20
- lucide-react/dist/esm/lucide-react.mjs:
21
- (**
22
- * @license lucide-react v1.17.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- *)
27
- */
package/lib/adapter.d.ts DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * NapCat 适配器:支持正向 WS / 反向 WS / HTTP
3
- */
4
- import { Adapter, Plugin } from 'zhin.js';
5
- import { NapCatWsClient } from './bot-ws-client.js';
6
- import { NapCatWsServer } from './bot-ws-server.js';
7
- import { NapCatHttpBot } from './bot-http.js';
8
- import type { NapCatBotConfig } from './types.js';
9
- export type NapCatBot = NapCatWsClient | NapCatWsServer | NapCatHttpBot;
10
- export declare class NapCatAdapter extends Adapter<NapCatBot> {
11
- #private;
12
- constructor(plugin: Plugin);
13
- createBot(config: NapCatBotConfig): NapCatBot;
14
- kickMember(botId: string, sceneId: string, userId: string): Promise<boolean>;
15
- muteMember(botId: string, sceneId: string, userId: string, duration?: number): Promise<boolean>;
16
- muteAll(botId: string, sceneId: string, enable?: boolean): Promise<boolean>;
17
- setAdmin(botId: string, sceneId: string, userId: string, enable?: boolean): Promise<boolean>;
18
- setMemberNickname(botId: string, sceneId: string, userId: string, nickname: string): Promise<boolean>;
19
- setGroupName(botId: string, sceneId: string, name: string): Promise<any>;
20
- listMembers(botId: string, sceneId: string): Promise<{
21
- members: any;
22
- count: any;
23
- }>;
24
- getGroupInfo(botId: string, sceneId: string): Promise<any>;
25
- start(): Promise<void>;
26
- }
27
- //# sourceMappingURL=adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAgE,MAAM,YAAY,CAAC;AAEhH,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,cAAc,GAAG,aAAa,CAAC;AAExE,qBAAa,aAAc,SAAQ,OAAO,CAAC,SAAS,CAAC;;gBAGvC,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS;IAkBvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAM;IAMzE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAO;IAMrD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO;IAMtE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMlF,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAY1C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
package/lib/adapter.js DELETED
@@ -1,93 +0,0 @@
1
- /**
2
- * NapCat 适配器:支持正向 WS / 反向 WS / HTTP
3
- */
4
- import { Adapter } from 'zhin.js';
5
- import { NapCatWsClient } from './bot-ws-client.js';
6
- import { NapCatWsServer } from './bot-ws-server.js';
7
- import { NapCatHttpBot } from './bot-http.js';
8
- export class NapCatAdapter extends Adapter {
9
- #router;
10
- constructor(plugin) {
11
- super(plugin, 'napcat', []);
12
- }
13
- createBot(config) {
14
- const connection = config.connection ?? 'ws';
15
- switch (connection) {
16
- case 'ws':
17
- return new NapCatWsClient(this, config);
18
- case 'wss':
19
- if (!this.#router)
20
- throw new Error('NapCat connection: wss requires router. Enable @zhin.js/host-router first.');
21
- return new NapCatWsServer(this, this.#router, config);
22
- case 'http':
23
- if (!this.#router)
24
- throw new Error('NapCat connection: http requires router. Enable @zhin.js/host-router first.');
25
- return new NapCatHttpBot(this, this.#router, config);
26
- default:
27
- throw new Error(`Unknown NapCat connection: ${connection}`);
28
- }
29
- }
30
- // ── 群管理接口(IGroupManagement 适配)──────────────────────────
31
- async kickMember(botId, sceneId, userId) {
32
- const bot = this.bots.get(botId);
33
- if (!bot)
34
- throw new Error(`Bot ${botId} not found`);
35
- return bot.kickMember(Number(sceneId), Number(userId));
36
- }
37
- async muteMember(botId, sceneId, userId, duration = 600) {
38
- const bot = this.bots.get(botId);
39
- if (!bot)
40
- throw new Error(`Bot ${botId} not found`);
41
- return bot.muteMember(Number(sceneId), Number(userId), duration);
42
- }
43
- async muteAll(botId, sceneId, enable = true) {
44
- const bot = this.bots.get(botId);
45
- if (!bot)
46
- throw new Error(`Bot ${botId} not found`);
47
- return bot.muteAll(Number(sceneId), enable);
48
- }
49
- async setAdmin(botId, sceneId, userId, enable = true) {
50
- const bot = this.bots.get(botId);
51
- if (!bot)
52
- throw new Error(`Bot ${botId} not found`);
53
- return bot.setAdmin(Number(sceneId), Number(userId), enable);
54
- }
55
- async setMemberNickname(botId, sceneId, userId, nickname) {
56
- const bot = this.bots.get(botId);
57
- if (!bot)
58
- throw new Error(`Bot ${botId} not found`);
59
- return bot.setCard(Number(sceneId), Number(userId), nickname);
60
- }
61
- async setGroupName(botId, sceneId, name) {
62
- const bot = this.bots.get(botId);
63
- if (!bot)
64
- throw new Error(`Bot ${botId} not found`);
65
- return bot.setGroupName(Number(sceneId), name);
66
- }
67
- async listMembers(botId, sceneId) {
68
- const bot = this.bots.get(botId);
69
- if (!bot)
70
- throw new Error(`Bot ${botId} not found`);
71
- const members = await bot.getMemberList(Number(sceneId));
72
- return {
73
- members: members.map((m) => ({
74
- user_id: m.user_id, nickname: m.nickname, card: m.card, role: m.role, title: m.title,
75
- })),
76
- count: members.length,
77
- };
78
- }
79
- async getGroupInfo(botId, sceneId) {
80
- const bot = this.bots.get(botId);
81
- if (!bot)
82
- throw new Error(`Bot ${botId} not found`);
83
- return bot.getGroupInfo(Number(sceneId));
84
- }
85
- async start() {
86
- this.#router = this.plugin.inject('router');
87
- this.plugin.useContext('router', (router) => {
88
- this.#router = router;
89
- });
90
- await super.start();
91
- }
92
- }
93
- //# sourceMappingURL=adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AgentPromptContributor } from 'zhin.js';
2
- export declare function createNapCatAgentPromptContributor(): AgentPromptContributor;
3
- //# sourceMappingURL=agent-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-prompt.d.ts","sourceRoot":"","sources":["../src/agent-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAsEjB,wBAAgB,kCAAkC,IAAI,sBAAsB,CAsC3E"}
@@ -1,105 +0,0 @@
1
- import { filterTools } from 'zhin.js';
2
- function isNapCatDelegatedTask(query, goal) {
3
- const text = `${query} ${goal}`;
4
- if (/\bnapcat\b|napcat_|mcp_napcat/i.test(text))
5
- return true;
6
- if (/戳一戳|poke|表情回应|emoji.*reaction/i.test(text))
7
- return true;
8
- if (/精华消息|essence|群公告|group.*notice/i.test(text))
9
- return true;
10
- if (/AI语音|ai.*record|tts|文字转语音/i.test(text))
11
- return true;
12
- if (/群文件|upload.*file|群签到|group.*sign/i.test(text))
13
- return true;
14
- if (/合并转发|forward.*msg|转发消息/i.test(text))
15
- return true;
16
- if (/点赞/.test(text) && /qq|好友|\d{5,}/i.test(text))
17
- return true;
18
- return false;
19
- }
20
- function selectNapCatDeferredTools(query, goal, deferredCatalog, maxTools) {
21
- const pool = deferredCatalog.filter(t => !t.name.startsWith('mcp_filesystem') && !t.name.startsWith('mcp_memory_'));
22
- const napcatTools = pool.filter(t => t.name.startsWith('napcat_'));
23
- const pinned = [];
24
- const preferOrder = [
25
- 'napcat_send_poke',
26
- 'napcat_set_emoji_reaction',
27
- 'napcat_send_like',
28
- 'napcat_set_essence_msg',
29
- 'napcat_send_group_notice',
30
- 'napcat_ai_tts',
31
- ];
32
- for (const name of preferOrder) {
33
- const t = napcatTools.find(x => x.name === name);
34
- if (t)
35
- pinned.push(t);
36
- }
37
- for (const t of napcatTools) {
38
- if (pinned.length >= maxTools)
39
- break;
40
- if (!pinned.some(p => p.name === t.name))
41
- pinned.push(t);
42
- }
43
- const extra = filterTools(query, pool, { maxTools, minScore: 0.08 })
44
- .filter(t => !pinned.some(p => p.name === t.name));
45
- const merged = [...pinned];
46
- for (const t of extra) {
47
- if (merged.length >= maxTools)
48
- break;
49
- merged.push(t);
50
- }
51
- return merged.slice(0, maxTools);
52
- }
53
- const ORCHESTRATOR_NAPCAT = [
54
- 'On napcat/QQ: use run_deferred_task with tool_query "napcat_send_poke" or "napcat_set_emoji_reaction".',
55
- 'NapCat supports: poke, emoji reaction, forward msg, essence, group notice, AI TTS, OCR, group files.',
56
- 'Skip tool_search when the user clearly asks for QQ-specific features like poke, reaction, or group management.',
57
- ].join('\n');
58
- const WORKER_NAPCAT = [
59
- '- Use `napcat_send_poke` for poke/戳一戳.',
60
- '- Use `napcat_set_emoji_reaction` for emoji reaction/表情回应.',
61
- '- Use `napcat_send_like` for friend like/点赞.',
62
- '- Use `napcat_ai_tts` for AI voice/AI语音.',
63
- '- Use `napcat_set_essence_msg` / `napcat_delete_essence_msg` for essence messages.',
64
- '- Use `napcat_send_group_notice` for group announcements.',
65
- '- Do NOT use mcp_filesystem_* or explore node_modules for QQ tasks.',
66
- ].join('\n');
67
- export function createNapCatAgentPromptContributor() {
68
- return {
69
- platform: 'napcat',
70
- async buildSections(ctx) {
71
- if (ctx.slot === 'orchestrator') {
72
- return [{
73
- id: 'platform.napcat.orchestrator',
74
- title: '## napcat / QQ',
75
- body: ORCHESTRATOR_NAPCAT,
76
- priority: 50,
77
- }];
78
- }
79
- if (ctx.slot === 'deferred_worker') {
80
- const query = ctx.deferred?.toolQuery ?? ctx.deferred?.goal ?? '';
81
- const goal = ctx.deferred?.goal ?? '';
82
- if (!isNapCatDelegatedTask(query, goal))
83
- return null;
84
- return [{
85
- id: 'platform.napcat.deferred_worker',
86
- title: '## napcat / QQ(本任务)',
87
- body: WORKER_NAPCAT,
88
- priority: 50,
89
- }];
90
- }
91
- return null;
92
- },
93
- matchesDeferredTask(ctx) {
94
- const query = ctx.deferred?.toolQuery ?? ctx.deferred?.goal ?? ctx.userMessagePreview ?? '';
95
- const goal = ctx.deferred?.goal ?? ctx.userMessagePreview ?? '';
96
- return isNapCatDelegatedTask(query, goal);
97
- },
98
- selectDeferredTools(query, goal, catalog, maxTools) {
99
- if (!isNapCatDelegatedTask(query, goal))
100
- return null;
101
- return selectNapCatDeferredTools(query, goal, catalog, maxTools);
102
- },
103
- };
104
- }
105
- //# sourceMappingURL=agent-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-prompt.js","sourceRoot":"","sources":["../src/agent-prompt.ts"],"names":[],"mappings":"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"}
package/lib/bot-base.d.ts DELETED
@@ -1,143 +0,0 @@
1
- /**
2
- * NapCat Bot 抽象基类
3
- * 子类只需实现 callApi / $connect / $disconnect,其余 API 方法和事件处理全部复用。
4
- */
5
- import { EventEmitter } from 'events';
6
- import { Bot, Message, SendOptions, type QuotedMessagePayload } from 'zhin.js';
7
- import type { NapCatBotConfig, NapCatMessageEvent, MessageSegment } from './types.js';
8
- import type { NapCatAdapter } from './adapter.js';
9
- import { InboundMessageDeduper } from './napcat-inbound.js';
10
- export declare abstract class NapCatBotBase extends EventEmitter implements Bot<NapCatBotConfig, NapCatMessageEvent> {
11
- adapter: NapCatAdapter;
12
- $config: NapCatBotConfig;
13
- $connected: boolean;
14
- protected readonly inboundDeduper: InboundMessageDeduper;
15
- get logger(): import("zhin.js").Logger;
16
- get $id(): string;
17
- constructor(adapter: NapCatAdapter, $config: NapCatBotConfig);
18
- abstract $connect(): Promise<void>;
19
- abstract $disconnect(): Promise<void>;
20
- abstract callApi<T = any>(action: string, params?: Record<string, any>): Promise<T>;
21
- $formatMessage(ev: NapCatMessageEvent): Message<NapCatMessageEvent>;
22
- $sendMessage(options: SendOptions): Promise<string>;
23
- $recallMessage(id: string): Promise<void>;
24
- $addReaction(messageId: string, emojiId: string): Promise<string>;
25
- $removeReaction(messageId: string, _reactionId: string): Promise<void>;
26
- protected dispatchEvent(event: any): void;
27
- private handleMessage;
28
- private handleNotice;
29
- private resolveNotifyType;
30
- private handleRequest;
31
- protected handleMeta(event: any): void;
32
- sendMsg(messageType: 'private' | 'group', id: number, message: MessageSegment[]): Promise<{
33
- message_id: number;
34
- }>;
35
- deleteMsg(messageId: number): Promise<any>;
36
- getMsg(messageId: number): Promise<any>;
37
- $getMsg(messageId: string): Promise<QuotedMessagePayload>;
38
- getForwardMsg(id: string): Promise<any>;
39
- sendLike(userId: number, times?: number): Promise<any>;
40
- setGroupKick(groupId: number, userId: number, rejectAddRequest?: boolean): Promise<any>;
41
- setGroupBan(groupId: number, userId: number, duration?: number): Promise<any>;
42
- setGroupWholeBan(groupId: number, enable?: boolean): Promise<any>;
43
- setGroupAdmin(groupId: number, userId: number, enable?: boolean): Promise<any>;
44
- setGroupCard(groupId: number, userId: number, card: string): Promise<any>;
45
- setGroupName(groupId: number, groupName: string): Promise<any>;
46
- setGroupLeave(groupId: number, isDismiss?: boolean): Promise<any>;
47
- setGroupSpecialTitle(groupId: number, userId: number, specialTitle: string, duration?: number): Promise<any>;
48
- setFriendAddRequest(flag: string, approve?: boolean, remark?: string): Promise<any>;
49
- setGroupAddRequest(flag: string, subType: string, approve?: boolean, reason?: string): Promise<any>;
50
- getLoginInfo(): Promise<any>;
51
- getStrangerInfo(userId: number, noCache?: boolean): Promise<any>;
52
- getFriendList(): Promise<any>;
53
- getGroupInfo(groupId: number, noCache?: boolean): Promise<any>;
54
- getGroupList(): Promise<any>;
55
- getGroupMemberInfo(groupId: number, userId: number, noCache?: boolean): Promise<any>;
56
- getGroupMemberList(groupId: number): Promise<any>;
57
- getGroupHonorInfo(groupId: number, type: string): Promise<any>;
58
- getCookies(domain?: string): Promise<any>;
59
- getCsrfToken(): Promise<any>;
60
- getCredentials(domain?: string): Promise<any>;
61
- getRecord(file: string, outFormat: string): Promise<any>;
62
- getImage(file: string): Promise<any>;
63
- canSendImage(): Promise<any>;
64
- canSendRecord(): Promise<any>;
65
- getStatus(): Promise<any>;
66
- getVersionInfo(): Promise<any>;
67
- cleanCache(): Promise<any>;
68
- setQQProfile(nickname: string, company?: string, email?: string, college?: string, personalNote?: string): Promise<any>;
69
- getOnlineClients(noCache?: boolean): Promise<any>;
70
- deleteFriend(userId: number): Promise<any>;
71
- markMsgAsRead(messageId: number): Promise<any>;
72
- sendGroupForwardMsg(groupId: number, messages: any[]): Promise<any>;
73
- sendPrivateForwardMsg(userId: number, messages: any[]): Promise<any>;
74
- getGroupMsgHistory(groupId: number, messageSeq?: number, count?: number): Promise<any>;
75
- ocrImage(image: string): Promise<any>;
76
- getGroupSystemMsg(): Promise<any>;
77
- getEssenceMsgList(groupId: number): Promise<any>;
78
- getGroupAtAllRemain(groupId: number): Promise<any>;
79
- setGroupPortrait(groupId: number, file: string): Promise<any>;
80
- setEssenceMsg(messageId: number): Promise<any>;
81
- deleteEssenceMsg(messageId: number): Promise<any>;
82
- sendGroupSign(groupId: number): Promise<any>;
83
- sendGroupNotice(groupId: number, content: string, image?: string): Promise<any>;
84
- getGroupNotice(groupId: number): Promise<any>;
85
- deleteGroupNotice(groupId: number, noticeId: string): Promise<any>;
86
- uploadGroupFile(groupId: number, file: string, name: string, folder?: string): Promise<any>;
87
- deleteGroupFile(groupId: number, fileId: string, busid: number): Promise<any>;
88
- createGroupFileFolder(groupId: number, name: string, parentId?: string): Promise<any>;
89
- deleteGroupFolder(groupId: number, folderId: string): Promise<any>;
90
- getGroupFileSystemInfo(groupId: number): Promise<any>;
91
- getGroupRootFiles(groupId: number): Promise<any>;
92
- getGroupFilesByFolder(groupId: number, folderId: string): Promise<any>;
93
- getGroupFileUrl(groupId: number, fileId: string, busid: number): Promise<any>;
94
- uploadPrivateFile(userId: number, file: string, name: string): Promise<any>;
95
- downloadFile(url: string, threadCount?: number, headers?: string[]): Promise<any>;
96
- checkUrlSafely(url: string): Promise<any>;
97
- setGroupSign(groupId: number): Promise<any>;
98
- arkSharePeer(userId: number): Promise<any>;
99
- arkShareGroup(groupId: number): Promise<any>;
100
- getRobotUinRange(): Promise<any>;
101
- setOnlineStatus(status: number, extStatus: number): Promise<any>;
102
- getFriendsWithCategory(): Promise<any>;
103
- setQQAvatar(file: string): Promise<any>;
104
- getFile(fileId: string): Promise<any>;
105
- forwardFriendSingleMsg(userId: number, messageId: number): Promise<any>;
106
- forwardGroupSingleMsg(groupId: number, messageId: number): Promise<any>;
107
- translateEn2Zh(sourceText: string): Promise<any>;
108
- setMsgEmojiLike(messageId: number, emojiId: string): Promise<any>;
109
- sendForwardMsg(messageType: 'private' | 'group', id: number, messages: any[]): Promise<any>;
110
- markPrivateMsgAsRead(userId: number): Promise<any>;
111
- markGroupMsgAsRead(groupId: number): Promise<any>;
112
- getFriendMsgHistory(userId: number, messageSeq?: number, count?: number): Promise<any>;
113
- createCollection(briefContent: string, rawData: string): Promise<any>;
114
- getCollectionList(page?: number, limit?: number): Promise<any>;
115
- setSelfLongnick(longnick: string): Promise<any>;
116
- getRecentContact(count?: number): Promise<any>;
117
- markAllAsRead(): Promise<any>;
118
- getProfileLike(): Promise<any>;
119
- fetchCustomFace(): Promise<any>;
120
- fetchEmojiLike(messageId: number, emojiId: string, emojiType: string): Promise<any>;
121
- setInputStatus(userId: number, eventType: string): Promise<any>;
122
- getGroupInfoEx(groupId: number): Promise<any>;
123
- getGroupIgnoreAddRequest(groupId: number): Promise<any>;
124
- friendPoke(userId: number): Promise<any>;
125
- groupPoke(groupId: number, userId: number): Promise<any>;
126
- sendPoke(userId: number, groupId?: number): Promise<any>;
127
- ncGetPacketStatus(): Promise<any>;
128
- ncGetUserStatus(userId: number): Promise<any>;
129
- ncGetRkey(): Promise<any>;
130
- getGroupShutList(groupId: number): Promise<any>;
131
- getMiniAppArk(type: string, title: string, desc: string, picUrl: string, jumpUrl: string): Promise<any>;
132
- getAiRecord(groupId: number, characterId: string, text: string): Promise<any>;
133
- getAiCharacters(groupId: number): Promise<any>;
134
- sendGroupAiRecord(groupId: number, characterId: string, text: string): Promise<any>;
135
- kickMember(groupId: number, userId: number, reject?: boolean): Promise<boolean>;
136
- muteMember(groupId: number, userId: number, duration?: number): Promise<boolean>;
137
- muteAll(groupId: number, enable?: boolean): Promise<boolean>;
138
- setAdmin(groupId: number, userId: number, enable?: boolean): Promise<boolean>;
139
- setCard(groupId: number, userId: number, card: string): Promise<boolean>;
140
- setTitle(groupId: number, userId: number, title: string, duration?: number): Promise<boolean>;
141
- getMemberList(groupId: number): Promise<any>;
142
- }
143
- //# sourceMappingURL=bot-base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot-base.d.ts","sourceRoot":"","sources":["../src/bot-base.ts"],"names":[],"mappings":"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"}