@zhin.js/adapter-icqq 2.0.13 → 2.0.15
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/CHANGELOG.md +20 -0
- package/client/index.tsx +9 -9
- package/dist/index.js +34 -1
- package/lib/bot.d.ts +9 -0
- package/lib/bot.d.ts.map +1 -1
- package/lib/bot.js +70 -7
- package/lib/bot.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -2
- package/lib/index.js.map +1 -1
- package/lib/ipc-client.d.ts +9 -0
- package/lib/ipc-client.d.ts.map +1 -1
- package/lib/ipc-client.js +29 -0
- package/lib/ipc-client.js.map +1 -1
- package/lib/types.d.ts +5 -0
- package/lib/types.d.ts.map +1 -1
- package/package.json +12 -11
- package/src/bot.ts +85 -10
- package/src/index.ts +9 -6
- package/src/ipc-client.ts +31 -0
- package/src/types.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @zhin.js/adapter-icqq
|
|
2
2
|
|
|
3
|
+
## 2.0.15
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- abc75a4: fix: 优化,客户端构建优化
|
|
8
|
+
- Updated dependencies [abc75a4]
|
|
9
|
+
- @zhin.js/console@2.0.14
|
|
10
|
+
|
|
11
|
+
## 2.0.14
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- e28fd7c: fix: 重新发版
|
|
16
|
+
- Updated dependencies [e28fd7c]
|
|
17
|
+
- @zhin.js/client@1.0.18
|
|
18
|
+
- @zhin.js/core@1.1.14
|
|
19
|
+
- zhin.js@1.0.72
|
|
20
|
+
- @zhin.js/console@2.0.13
|
|
21
|
+
- @zhin.js/http@1.0.65
|
|
22
|
+
|
|
3
23
|
## 2.0.13
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/client/index.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Bot } from 'lucide-react'
|
|
1
|
+
import type { PluginRegisterHostApi } from '@zhin.js/console-types'
|
|
3
2
|
import ICQQManagement from './ICQQManagement'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
})
|
|
4
|
+
export function register(api: PluginRegisterHostApi) {
|
|
5
|
+
api.addRoute({
|
|
6
|
+
path: '/console/icqq',
|
|
7
|
+
name: 'ICQQ管理',
|
|
8
|
+
element: api.React.createElement(ICQQManagement, { hostReact: api.React }),
|
|
9
|
+
})
|
|
10
|
+
api.addTool({ id: 'icqq', name: 'ICQQ', path: '/console/icqq' })
|
|
11
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1 +1,34 @@
|
|
|
1
|
-
import{addPage as e}from"@zhin.js/client";import{Activity as t,AlertCircle as n,Bot as r,Loader2 as i,LogIn as a,MessageSquare as o,MousePointer as s,QrCode as c,RefreshCw as l,Smartphone as u,Users as d,Wifi as f,WifiOff as p,X as m}from"lucide-react";import{useCallback as h,useEffect as g,useRef as _,useState as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";var S="zhin_api_token";function C(){return localStorage.getItem(S)}async function w(e2,t2){let n2=C(),r2=new Headers(t2?.headers);n2&&r2.set("Authorization",`Bearer ${n2}`);let i2=await fetch(e2,{...t2,headers:r2});return i2.status===401&&(localStorage.removeItem(S),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i2}var T=2e3,E=15e3,D={qrcode:{icon:b(c,{className:"w-4 h-4"}),label:"扫码登录"},sms:{icon:b(o,{className:"w-4 h-4"}),label:"短信验证码"},device:{icon:b(u,{className:"w-4 h-4"}),label:"设备验证"},slider:{icon:b(s,{className:"w-4 h-4"}),label:"滑块验证"}};function O(){let[e2,t2]=v([]),[r2,o2]=v(true),[s2,c2]=v(null),[l2,u2]=v({}),[d2,f2]=v({}),p2=_(0),y2=_(),S2=h(async()=>{try{let e3=await w("/api/login-assist/pending");if(!e3.ok)throw Error("获取待办失败");let n2=await e3.json(),r3=(Array.isArray(n2)?n2:[]).filter(e4=>e4.adapter==="icqq");t2(r3),c2(null),p2.current=r3.length>0?0:p2.current+1}catch(e3){c2(e3.message),p2.current++}finally{o2(false)}},[]),C2=h(()=>{let e3=Math.min(T*1.5**p2.current,E);y2.current=setTimeout(async()=>{await S2(),C2()},e3)},[S2]);g(()=>(S2().then(C2),()=>clearTimeout(y2.current)),[S2,C2]);let O2=async(e3,t3)=>{u2(t4=>({...t4,[e3]:true}));try{if(!(await w("/api/login-assist/submit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e3,value:t3})})).ok)throw Error("提交失败");f2(t4=>{let n2={...t4};return delete n2[e3],n2}),p2.current=0,await S2()}catch(e4){c2(e4.message)}finally{u2(t4=>({...t4,[e3]:false}))}},k2=async e3=>{try{(await w("/api/login-assist/cancel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e3})})).ok&&await S2()}catch{}};return r2&&e2.length===0?b("div",{className:"flex justify-center py-12",children:b(i,{className:"w-6 h-6 animate-spin text-blue-500"})}):x("div",{className:"space-y-4",children:[b("p",{className:"text-sm text-muted-foreground",children:"扫码、短信或滑块等验证会出现在下方;刷新页面后仍可继续处理(仅 ICQQ 待办)。"}),s2&&x("div",{className:"flex items-center gap-2 p-3 rounded border border-red-200 bg-red-50 text-red-600 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:[b(n,{className:"w-4 h-4 shrink-0"}),b("span",{children:s2}),b("button",{onClick:()=>c2(null),className:"ml-auto",children:b(m,{className:"w-3.5 h-3.5"})})]}),e2.length===0?x("div",{className:"border rounded-lg bg-card p-12 text-center",children:[b(a,{className:"w-16 h-16 mx-auto mb-4 opacity-25"}),b("h3",{className:"text-lg font-semibold mb-1",children:"暂无待办"}),b("p",{className:"text-sm text-muted-foreground",children:"机器人需要验证时,待办将显示在此处"})]}):b("div",{className:"space-y-4",children:e2.map(e3=>{let t3=D[e3.type]??{icon:b(a,{className:"w-4 h-4"}),label:e3.type};return x("div",{className:"border rounded-lg bg-card p-4 shadow-sm",children:[x("div",{className:"flex items-start justify-between flex-wrap gap-2 mb-2",children:[x("div",{className:"flex items-center gap-2 font-semibold",children:[t3.icon," ",t3.label]}),x("div",{className:"flex gap-1 text-xs",children:[b("span",{className:"px-2 py-0.5 rounded border",children:e3.adapter}),b("span",{className:"px-2 py-0.5 rounded bg-muted",children:e3.botId})]})]}),e3.payload?.message&&b("p",{className:"text-sm text-muted-foreground mb-3",children:e3.payload.message}),e3.type==="qrcode"&&e3.payload?.image&&b("div",{className:"flex justify-center p-4 bg-muted/30 rounded-lg mb-3",children:b("img",{src:String(e3.payload.image),alt:"登录二维码",className:"max-w-[200px] w-full h-auto"})}),e3.type==="slider"&&e3.payload?.url&&x("p",{className:"text-sm break-all mb-3",children:[b("span",{className:"text-muted-foreground",children:"滑块链接:"})," ",b("a",{href:String(e3.payload.url),target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:String(e3.payload.url)})]}),(e3.type==="sms"||e3.type==="device"||e3.type==="slider")&&x("div",{className:"flex flex-wrap gap-2 items-center",children:[b("input",{className:"h-9 px-3 rounded-md border border-input bg-background text-sm max-w-[18rem] flex-1",placeholder:e3.type==="slider"?"输入 ticket":"输入验证码",value:d2[e3.id]??"",onChange:t4=>f2(n2=>({...n2,[e3.id]:t4.target.value})),onKeyDown:t4=>{if(t4.key==="Enter"){let t5=d2[e3.id]?.trim();t5&&O2(e3.id,e3.type==="slider"?{ticket:t5}:t5)}}}),b("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:l2[e3.id]||!d2[e3.id]?.trim(),onClick:()=>{let t4=d2[e3.id]?.trim();t4&&O2(e3.id,e3.type==="slider"?{ticket:t4}:t4)},children:l2[e3.id]?"提交中…":"提交"})]}),e3.type==="qrcode"&&x("div",{className:"flex gap-2 mt-3",children:[b("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:!!l2[e3.id],onClick:()=>void O2(e3.id,{done:true}),children:l2[e3.id]?"提交中…":"我已扫码"}),b("button",{className:"h-9 px-4 rounded-md border text-sm hover:bg-accent transition-colors",onClick:()=>void k2(e3.id),children:"取消"})]})]},e3.id)})})]})}function k(){let[e2,n2]=v("overview"),[o2,s2]=v([]),[c2,u2]=v(true),[m2,_2]=v(null),S2=h(async()=>{u2(true),_2(null);try{let e3=await w("/api/icqq/bots"),t2=await e3.json();if(!e3.ok||!t2.success)throw Error(t2.message||"加载失败");s2(Array.isArray(t2.data)?t2.data:[])}catch(e3){_2(e3.message),s2([])}finally{u2(false)}},[]);return g(()=>{e2==="overview"&&S2()},[e2,S2]),x("div",{className:"p-6 max-w-5xl mx-auto space-y-5",children:[x("div",{className:"flex items-center justify-between",children:[x("div",{children:[x("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[b(r,{className:"w-6 h-6"})," ICQQ 管理"]}),b("p",{className:"text-sm text-muted-foreground mt-1",children:"机器人概览与登录辅助(扫码 / 验证码 / 滑块)"})]}),e2==="overview"&&x("button",{onClick:S2,disabled:c2,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:[b(l,{className:`w-4 h-4 ${c2?"animate-spin":""}`})," 刷新"]})]}),x("div",{className:"flex gap-1 border-b",children:[b("button",{onClick:()=>n2("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${e2==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:x("span",{className:"flex items-center gap-1.5",children:[b(r,{className:"w-4 h-4"})," 概览"]})}),b("button",{onClick:()=>n2("login"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${e2==="login"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:x("span",{className:"flex items-center gap-1.5",children:[b(a,{className:"w-4 h-4"})," 登录辅助"]})})]}),e2==="overview"&&x(y,{children:[m2&&b("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:m2}),c2?b("div",{className:"flex justify-center py-12",children:b(i,{className:"w-6 h-6 animate-spin text-blue-500"})}):o2.length===0?b("div",{className:"text-center text-muted-foreground py-12",children:"暂无 ICQQ 机器人实例"}):b("div",{className:"grid gap-4 md:grid-cols-2",children:o2.map(e3=>x("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[x("div",{className:"flex items-center justify-between mb-3",children:[b("span",{className:"font-medium text-lg",children:e3.name}),e3.connected?x("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[b(f,{className:"w-4 h-4"})," 在线"]}):x("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[b(p,{className:"w-4 h-4"})," 离线"]})]}),x("div",{className:"space-y-2 text-sm text-muted-foreground",children:[x("div",{className:"flex items-center gap-1.5",children:[b(d,{className:"w-3.5 h-3.5"}),"群 ",e3.groupCount," · 好友 ",e3.friendCount]}),x("div",{className:"flex items-center gap-1.5",children:[b(t,{className:"w-3.5 h-3.5"}),"登录方式 ",e3.loginMode," · ",e3.status]})]})]},e3.name))})]}),e2==="login"&&b(O,{})]})}e({key:"icqq-management",path:"/icqq",title:"ICQQ管理",icon:b(r,{className:"w-5 h-5"}),element:b(k,{})});
|
|
1
|
+
import{useCallback as Fe,useEffect as De,useState as N}from"react";import{forwardRef as re,createElement as fe}from"react";var E=(...a)=>a.filter((u,r,f)=>!!u&&u.trim()!==""&&f.indexOf(u)===r).join(" ").trim();var Q=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var J=a=>a.replace(/^([A-Z])|[\s-_]+(\w)/g,(u,r,f)=>f?f.toUpperCase():r.toLowerCase());var X=a=>{let u=J(a);return u.charAt(0).toUpperCase()+u.slice(1)};import{forwardRef as le,createElement as Y}from"react";var V={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 _=a=>{for(let u in a)if(u.startsWith("aria-")||u==="role"||u==="title")return!0;return!1};import{createContext as oe,useContext as ue,useMemo as Ge,createElement as We}from"react";var de=oe({});var j=()=>ue(de);var $=le(({color:a,size:u,strokeWidth:r,absoluteStrokeWidth:f,className:n="",children:c,iconNode:C,...h},m)=>{let{size:d=24,strokeWidth:p=2,absoluteStrokeWidth:G=!1,color:g="currentColor",className:M=""}=j()??{},B=f??G?Number(r??p)*24/Number(u??d):r??p;return Y("svg",{ref:m,...V,width:u??d??V.width,height:u??d??V.height,stroke:a??g,strokeWidth:B,className:E("lucide",M,n),...!c&&!_(h)&&{"aria-hidden":"true"},...h},[...C.map(([z,e])=>Y(z,e)),...Array.isArray(c)?c:[c]])});var t=(a,u)=>{let r=re(({className:f,...n},c)=>fe($,{ref:c,iconNode:u,className:E(`lucide-${Q(X(a))}`,`lucide-${a}`,f),...n}));return r.displayName=X(a),r};var se=[["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"}]],F=t("activity",se);var ie=[["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"}]],P=t("bot",ie);var ce=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],k=t("circle-alert",ce);var ne=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],I=t("loader-circle",ne);var pe=[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]],w=t("log-in",pe);var me=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],D=t("message-square",me);var Le=[["path",{d:"M12.586 12.586 19 19",key:"ea5xo7"}],["path",{d:"M3.688 3.037a.497.497 0 0 0-.651.651l6.5 15.999a.501.501 0 0 0 .947-.062l1.569-6.083a2 2 0 0 1 1.448-1.479l6.124-1.579a.5.5 0 0 0 .063-.947z",key:"277e5u"}]],y=t("mouse-pointer",Le);var Ie=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],R=t("qr-code",Ie);var xe=[["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"}]],T=t("refresh-cw",xe);var Ce=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],q=t("smartphone",Ce);var he=[["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"}]],b=t("users",he);var ge=[["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"}]],v=t("wifi-off",ge);var Se=[["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"}]],U=t("wifi",Se);var ke=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],O=t("x",ke);import{useCallback as ae,useEffect as Pe,useRef as te,useState as H}from"react";var ee="zhin_api_token";function we(){return localStorage.getItem(ee)}async function A(a,u){let r=we(),f=new Headers(u?.headers);r&&f.set("Authorization",`Bearer ${r}`);let n=await fetch(a,{...u,headers:f});return n.status===401&&(localStorage.removeItem(ee),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),n}import{jsx as o,jsxs as x}from"react/jsx-runtime";var Ae=2e3,Me=15e3,Be={qrcode:{icon:o(R,{className:"w-4 h-4"}),label:"\u626B\u7801\u767B\u5F55"},sms:{icon:o(D,{className:"w-4 h-4"}),label:"\u77ED\u4FE1\u9A8C\u8BC1\u7801"},device:{icon:o(q,{className:"w-4 h-4"}),label:"\u8BBE\u5907\u9A8C\u8BC1"},slider:{icon:o(y,{className:"w-4 h-4"}),label:"\u6ED1\u5757\u9A8C\u8BC1"}};function K(){let[a,u]=H([]),[r,f]=H(!0),[n,c]=H(null),[C,h]=H({}),[m,d]=H({}),p=te(0),G=te(),g=ae(async()=>{try{let e=await A("/api/login-assist/pending");if(!e.ok)throw new Error("\u83B7\u53D6\u5F85\u529E\u5931\u8D25");let S=await e.json(),L=(Array.isArray(S)?S:[]).filter(W=>W.adapter==="icqq");u(L),c(null),p.current=L.length>0?0:p.current+1}catch(e){c(e.message),p.current++}finally{f(!1)}},[]),M=ae(()=>{let e=Math.min(Ae*Math.pow(1.5,p.current),Me);G.current=setTimeout(async()=>{await g(),M()},e)},[g]);Pe(()=>(g().then(M),()=>clearTimeout(G.current)),[g,M]);let B=async(e,S)=>{h(i=>({...i,[e]:!0}));try{if(!(await A("/api/login-assist/submit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,value:S})})).ok)throw new Error("\u63D0\u4EA4\u5931\u8D25");d(L=>{let W={...L};return delete W[e],W}),p.current=0,await g()}catch(i){c(i.message)}finally{h(i=>({...i,[e]:!1}))}},z=async e=>{try{(await A("/api/login-assist/cancel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e})})).ok&&await g()}catch{}};return r&&a.length===0?o("div",{className:"flex justify-center py-12",children:o(I,{className:"w-6 h-6 animate-spin text-blue-500"})}):x("div",{className:"space-y-4",children:[o("p",{className:"text-sm text-muted-foreground",children:"\u626B\u7801\u3001\u77ED\u4FE1\u6216\u6ED1\u5757\u7B49\u9A8C\u8BC1\u4F1A\u51FA\u73B0\u5728\u4E0B\u65B9\uFF1B\u5237\u65B0\u9875\u9762\u540E\u4ECD\u53EF\u7EE7\u7EED\u5904\u7406\uFF08\u4EC5 ICQQ \u5F85\u529E\uFF09\u3002"}),n&&x("div",{className:"flex items-center gap-2 p-3 rounded border border-red-200 bg-red-50 text-red-600 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:[o(k,{className:"w-4 h-4 shrink-0"}),o("span",{children:n}),o("button",{onClick:()=>c(null),className:"ml-auto",children:o(O,{className:"w-3.5 h-3.5"})})]}),a.length===0?x("div",{className:"border rounded-lg bg-card p-12 text-center",children:[o(w,{className:"w-16 h-16 mx-auto mb-4 opacity-25"}),o("h3",{className:"text-lg font-semibold mb-1",children:"\u6682\u65E0\u5F85\u529E"}),o("p",{className:"text-sm text-muted-foreground",children:"\u673A\u5668\u4EBA\u9700\u8981\u9A8C\u8BC1\u65F6\uFF0C\u5F85\u529E\u5C06\u663E\u793A\u5728\u6B64\u5904"})]}):o("div",{className:"space-y-4",children:a.map(e=>{let S=Be[e.type]??{icon:o(w,{className:"w-4 h-4"}),label:e.type};return x("div",{className:"border rounded-lg bg-card p-4 shadow-sm",children:[x("div",{className:"flex items-start justify-between flex-wrap gap-2 mb-2",children:[x("div",{className:"flex items-center gap-2 font-semibold",children:[S.icon," ",S.label]}),x("div",{className:"flex gap-1 text-xs",children:[o("span",{className:"px-2 py-0.5 rounded border",children:e.adapter}),o("span",{className:"px-2 py-0.5 rounded bg-muted",children:e.botId})]})]}),e.payload?.message&&o("p",{className:"text-sm text-muted-foreground mb-3",children:e.payload.message}),e.type==="qrcode"&&e.payload?.image&&o("div",{className:"flex justify-center p-4 bg-muted/30 rounded-lg mb-3",children:o("img",{src:String(e.payload.image),alt:"\u767B\u5F55\u4E8C\u7EF4\u7801",className:"max-w-[200px] w-full h-auto"})}),e.type==="slider"&&e.payload?.url&&x("p",{className:"text-sm break-all mb-3",children:[o("span",{className:"text-muted-foreground",children:"\u6ED1\u5757\u94FE\u63A5\uFF1A"})," ",o("a",{href:String(e.payload.url),target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:String(e.payload.url)})]}),(e.type==="sms"||e.type==="device"||e.type==="slider")&&x("div",{className:"flex flex-wrap gap-2 items-center",children:[o("input",{className:"h-9 px-3 rounded-md border border-input bg-background text-sm max-w-[18rem] flex-1",placeholder:e.type==="slider"?"\u8F93\u5165 ticket":"\u8F93\u5165\u9A8C\u8BC1\u7801",value:m[e.id]??"",onChange:i=>d(L=>({...L,[e.id]:i.target.value})),onKeyDown:i=>{if(i.key==="Enter"){let L=m[e.id]?.trim();L&&B(e.id,e.type==="slider"?{ticket:L}:L)}}}),o("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:C[e.id]||!m[e.id]?.trim(),onClick:()=>{let i=m[e.id]?.trim();i&&B(e.id,e.type==="slider"?{ticket:i}:i)},children:C[e.id]?"\u63D0\u4EA4\u4E2D\u2026":"\u63D0\u4EA4"})]}),e.type==="qrcode"&&x("div",{className:"flex gap-2 mt-3",children:[o("button",{className:"h-9 px-4 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",disabled:!!C[e.id],onClick:()=>void B(e.id,{done:!0}),children:C[e.id]?"\u63D0\u4EA4\u4E2D\u2026":"\u6211\u5DF2\u626B\u7801"}),o("button",{className:"h-9 px-4 rounded-md border text-sm hover:bg-accent transition-colors",onClick:()=>void z(e.id),children:"\u53D6\u6D88"})]})]},e.id)})})]})}import{Fragment as ye,jsx as l,jsxs as s}from"react/jsx-runtime";function Z(){let[a,u]=N("overview"),[r,f]=N([]),[n,c]=N(!0),[C,h]=N(null),m=Fe(async()=>{c(!0),h(null);try{let d=await A("/api/icqq/bots"),p=await d.json();if(!d.ok||!p.success)throw new Error(p.message||"\u52A0\u8F7D\u5931\u8D25");f(Array.isArray(p.data)?p.data:[])}catch(d){h(d.message),f([])}finally{c(!1)}},[]);return De(()=>{a==="overview"&&m()},[a,m]),s("div",{className:"p-6 max-w-5xl mx-auto space-y-5",children:[s("div",{className:"flex items-center justify-between",children:[s("div",{children:[s("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[l(P,{className:"w-6 h-6"})," ICQQ \u7BA1\u7406"]}),l("p",{className:"text-sm text-muted-foreground mt-1",children:"\u673A\u5668\u4EBA\u6982\u89C8\u4E0E\u767B\u5F55\u8F85\u52A9\uFF08\u626B\u7801 / \u9A8C\u8BC1\u7801 / \u6ED1\u5757\uFF09"})]}),a==="overview"&&s("button",{onClick:m,disabled:n,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(T,{className:`w-4 h-4 ${n?"animate-spin":""}`})," \u5237\u65B0"]})]}),s("div",{className:"flex gap-1 border-b",children:[l("button",{onClick:()=>u("overview"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${a==="overview"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:s("span",{className:"flex items-center gap-1.5",children:[l(P,{className:"w-4 h-4"})," \u6982\u89C8"]})}),l("button",{onClick:()=>u("login"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${a==="login"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"}`,children:s("span",{className:"flex items-center gap-1.5",children:[l(w,{className:"w-4 h-4"})," \u767B\u5F55\u8F85\u52A9"]})})]}),a==="overview"&&s(ye,{children:[C&&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:C}),n?l("div",{className:"flex justify-center py-12",children:l(I,{className:"w-6 h-6 animate-spin text-blue-500"})}):r.length===0?l("div",{className:"text-center text-muted-foreground py-12",children:"\u6682\u65E0 ICQQ \u673A\u5668\u4EBA\u5B9E\u4F8B"}):l("div",{className:"grid gap-4 md:grid-cols-2",children:r.map(d=>s("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[s("div",{className:"flex items-center justify-between mb-3",children:[l("span",{className:"font-medium text-lg",children:d.name}),d.connected?s("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[l(U,{className:"w-4 h-4"})," \u5728\u7EBF"]}):s("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[l(v,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),s("div",{className:"space-y-2 text-sm text-muted-foreground",children:[s("div",{className:"flex items-center gap-1.5",children:[l(b,{className:"w-3.5 h-3.5"}),"\u7FA4 ",d.groupCount," \xB7 \u597D\u53CB ",d.friendCount]}),s("div",{className:"flex items-center gap-1.5",children:[l(F,{className:"w-3.5 h-3.5"}),"\u767B\u5F55\u65B9\u5F0F ",d.loginMode," \xB7 ",d.status]})]})]},d.name))})]}),a==="login"&&l(K,{})]})}function tt(a){a.addRoute({path:"/console/icqq",name:"ICQQ\u7BA1\u7406",element:a.React.createElement(Z,{hostReact:a.React})}),a.addTool({id:"icqq",name:"ICQQ",path:"/console/icqq"})}export{tt 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/circle-alert.mjs:
|
|
16
|
+
lucide-react/dist/esm/icons/loader-circle.mjs:
|
|
17
|
+
lucide-react/dist/esm/icons/log-in.mjs:
|
|
18
|
+
lucide-react/dist/esm/icons/message-square.mjs:
|
|
19
|
+
lucide-react/dist/esm/icons/mouse-pointer.mjs:
|
|
20
|
+
lucide-react/dist/esm/icons/qr-code.mjs:
|
|
21
|
+
lucide-react/dist/esm/icons/refresh-cw.mjs:
|
|
22
|
+
lucide-react/dist/esm/icons/smartphone.mjs:
|
|
23
|
+
lucide-react/dist/esm/icons/users.mjs:
|
|
24
|
+
lucide-react/dist/esm/icons/wifi-off.mjs:
|
|
25
|
+
lucide-react/dist/esm/icons/wifi.mjs:
|
|
26
|
+
lucide-react/dist/esm/icons/x.mjs:
|
|
27
|
+
lucide-react/dist/esm/lucide-react.mjs:
|
|
28
|
+
(**
|
|
29
|
+
* @license lucide-react v1.11.0 - ISC
|
|
30
|
+
*
|
|
31
|
+
* This source code is licensed under the ISC license.
|
|
32
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
33
|
+
*)
|
|
34
|
+
*/
|
package/lib/bot.d.ts
CHANGED
|
@@ -19,10 +19,19 @@ export declare class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData>
|
|
|
19
19
|
/** 缓存的群列表 */
|
|
20
20
|
groups: Map<number, IpcGroupInfo>;
|
|
21
21
|
private subscriptions;
|
|
22
|
+
/** 用户主动断开时为 true,阻止自动重连 */
|
|
23
|
+
private intentionalDisconnect;
|
|
24
|
+
/** 是否已有重连循环在跑(避免多次 schedule 叠套) */
|
|
25
|
+
private reconnectRunning;
|
|
22
26
|
get $id(): `${number}`;
|
|
23
27
|
get logger(): import("zhin.js").Logger;
|
|
24
28
|
constructor(adapter: IcqqAdapter, config: IcqqBotConfig);
|
|
25
29
|
$connect(): Promise<void>;
|
|
30
|
+
/** 建立或恢复与守护进程的 IPC/RPC 会话(订阅、缓存列表) */
|
|
31
|
+
private rebindIpcSession;
|
|
32
|
+
/** IPC/RPC 意外断开时调度重连(指数退避) */
|
|
33
|
+
private scheduleReconnect;
|
|
34
|
+
private runReconnectLoop;
|
|
26
35
|
/** 刷新好友/群列表缓存 */
|
|
27
36
|
refreshLists(): Promise<void>;
|
|
28
37
|
$disconnect(): Promise<void>;
|
package/lib/bot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,GAAG,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAEvB,qBAAa,OAAQ,YAAW,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,GAAG,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAEvB,qBAAa,OAAQ,YAAW,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAyB5D,OAAO,EAAE,WAAW;IAxB7B,UAAU,UAAS;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAG,SAAS,CAAC;IAEhB,cAAc;IACd,OAAO,6BAAoC;IAC3C,aAAa;IACb,MAAM,4BAAmC;IAEzC,OAAO,CAAC,aAAa,CAAmD;IACxE,2BAA2B;IAC3B,OAAO,CAAC,qBAAqB,CAAS;IACtC,mCAAmC;IACnC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,IAAI,GAAG,gBAEN;IAED,IAAI,MAAM,6BAET;gBAGQ,OAAO,EAAE,WAAW,EAC3B,MAAM,EAAE,aAAa;IAOjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,sCAAsC;YACxB,gBAAgB;IAiD9B,8BAA8B;IAC9B,OAAO,CAAC,iBAAiB;YAQX,gBAAgB;IAgC9B,iBAAiB;IACX,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAclC,OAAO,CAAC,WAAW;IAWnB,cAAc,CAAC,GAAG,EAAE,mBAAmB;IAqDjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAgC1D;AAID,yBAAiB,OAAO,CAAC;IACvB;;;OAGG;IACH,SAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CA6D5D;IAED;;;OAGG;IACH,SAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA+BvD;CACF"}
|
package/lib/bot.js
CHANGED
|
@@ -17,6 +17,10 @@ export class IcqqBot {
|
|
|
17
17
|
/** 缓存的群列表 */
|
|
18
18
|
groups = new Map();
|
|
19
19
|
subscriptions = [];
|
|
20
|
+
/** 用户主动断开时为 true,阻止自动重连 */
|
|
21
|
+
intentionalDisconnect = false;
|
|
22
|
+
/** 是否已有重连循环在跑(避免多次 schedule 叠套) */
|
|
23
|
+
reconnectRunning = false;
|
|
20
24
|
get $id() {
|
|
21
25
|
return this.$config.name;
|
|
22
26
|
}
|
|
@@ -29,31 +33,88 @@ export class IcqqBot {
|
|
|
29
33
|
}
|
|
30
34
|
// ── 连接 ───────────────────────────────────────────────────────────
|
|
31
35
|
async $connect() {
|
|
32
|
-
|
|
36
|
+
this.intentionalDisconnect = false;
|
|
33
37
|
const rpc = this.$config.rpc;
|
|
34
38
|
if (rpc) {
|
|
35
39
|
this.logger.info(`[${this.$id}] 正在通过 RPC 连接 icqq 守护进程 (${rpc.host}:${rpc.port})...`);
|
|
36
|
-
this.ipc = await IpcClient.connectRpc(rpc);
|
|
37
40
|
}
|
|
38
41
|
else {
|
|
39
42
|
this.logger.info(`[${this.$id}] 正在连接 icqq 守护进程...`);
|
|
40
|
-
this.ipc = await IpcClient.connect(uin);
|
|
41
43
|
}
|
|
44
|
+
await this.rebindIpcSession();
|
|
42
45
|
this.logger.info(`[${this.$id}] 已连接守护进程${rpc ? " (RPC)" : ""}`);
|
|
43
|
-
|
|
46
|
+
this.logger.info(`[${this.$id}] 登录成功,好友 ${this.friends.size},群 ${this.groups.size}`);
|
|
47
|
+
}
|
|
48
|
+
/** 建立或恢复与守护进程的 IPC/RPC 会话(订阅、缓存列表) */
|
|
49
|
+
async rebindIpcSession() {
|
|
50
|
+
const uin = Number(this.$config.name);
|
|
51
|
+
const rpc = this.$config.rpc;
|
|
52
|
+
// 旧连接上的订阅句柄已失效,不再对死 socket 发 unsubscribe
|
|
53
|
+
this.subscriptions = [];
|
|
54
|
+
let client;
|
|
55
|
+
if (rpc) {
|
|
56
|
+
client = await IpcClient.connectRpc(rpc);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
client = await IpcClient.connect(uin);
|
|
60
|
+
}
|
|
61
|
+
if (this.intentionalDisconnect) {
|
|
62
|
+
client.close();
|
|
63
|
+
throw new Error("连接已取消");
|
|
64
|
+
}
|
|
65
|
+
this.ipc = client;
|
|
66
|
+
if (this.$config.autoReconnect !== false) {
|
|
67
|
+
this.ipc.setOnRemoteDisconnect(() => this.scheduleReconnect());
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.ipc.setOnRemoteDisconnect(null);
|
|
71
|
+
}
|
|
44
72
|
await this.refreshLists();
|
|
45
|
-
// 订阅所有好友消息
|
|
46
73
|
for (const [uid] of this.friends) {
|
|
47
74
|
const sub = this.ipc.subscribe(Actions.SUBSCRIBE, { type: "private", id: uid }, (event) => this.handleEvent(event));
|
|
48
75
|
this.subscriptions.push(sub);
|
|
49
76
|
}
|
|
50
|
-
// 订阅所有群消息
|
|
51
77
|
for (const [gid] of this.groups) {
|
|
52
78
|
const sub = this.ipc.subscribe(Actions.SUBSCRIBE, { type: "group", id: gid }, (event) => this.handleEvent(event));
|
|
53
79
|
this.subscriptions.push(sub);
|
|
54
80
|
}
|
|
55
81
|
this.$connected = true;
|
|
56
|
-
|
|
82
|
+
}
|
|
83
|
+
/** IPC/RPC 意外断开时调度重连(指数退避) */
|
|
84
|
+
scheduleReconnect() {
|
|
85
|
+
if (this.$config.autoReconnect === false)
|
|
86
|
+
return;
|
|
87
|
+
if (this.intentionalDisconnect)
|
|
88
|
+
return;
|
|
89
|
+
if (this.reconnectRunning)
|
|
90
|
+
return;
|
|
91
|
+
this.reconnectRunning = true;
|
|
92
|
+
void this.runReconnectLoop();
|
|
93
|
+
}
|
|
94
|
+
async runReconnectLoop() {
|
|
95
|
+
try {
|
|
96
|
+
for (let attempt = 0; !this.intentionalDisconnect; attempt++) {
|
|
97
|
+
const base = Math.min(30_000, 500 * 2 ** Math.min(attempt, 6));
|
|
98
|
+
const jitter = Math.floor(Math.random() * 400);
|
|
99
|
+
const delayMs = base + jitter;
|
|
100
|
+
this.$connected = false;
|
|
101
|
+
this.logger.warn(`[${this.$id}] 与 icqq 守护进程连接已断开,${delayMs}ms 后尝试重连(第 ${attempt + 1} 次)…`);
|
|
102
|
+
await new Promise((r) => setTimeout(r, delayMs));
|
|
103
|
+
if (this.intentionalDisconnect)
|
|
104
|
+
break;
|
|
105
|
+
try {
|
|
106
|
+
await this.rebindIpcSession();
|
|
107
|
+
this.logger.info(`[${this.$id}] 已重新连接守护进程,好友 ${this.friends.size},群 ${this.groups.size}`);
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
this.logger.warn(`[${this.$id}] 重连失败: ${e?.message ?? String(e)}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
this.reconnectRunning = false;
|
|
117
|
+
}
|
|
57
118
|
}
|
|
58
119
|
/** 刷新好友/群列表缓存 */
|
|
59
120
|
async refreshLists() {
|
|
@@ -76,6 +137,8 @@ export class IcqqBot {
|
|
|
76
137
|
}
|
|
77
138
|
// ── 断开 ───────────────────────────────────────────────────────────
|
|
78
139
|
async $disconnect() {
|
|
140
|
+
this.intentionalDisconnect = true;
|
|
141
|
+
this.ipc?.setOnRemoteDisconnect(null);
|
|
79
142
|
for (const sub of this.subscriptions) {
|
|
80
143
|
await sub.unsubscribe().catch(() => { });
|
|
81
144
|
}
|
package/lib/bot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Router } from "@zhin.js/http";
|
|
2
|
-
import
|
|
2
|
+
import { PageManager } from "@zhin.js/console";
|
|
3
3
|
import { IcqqAdapter } from "./adapter.js";
|
|
4
4
|
declare module "zhin.js" {
|
|
5
5
|
namespace Plugin {
|
|
6
6
|
interface Contexts {
|
|
7
|
-
web:
|
|
7
|
+
web: PageManager;
|
|
8
8
|
router: Router;
|
|
9
9
|
}
|
|
10
10
|
}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK3C,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,GAAG,EAAE,WAAW,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;SAChB;KACF;IACD,UAAU,QAAQ;QAChB,IAAI,EAAE,WAAW,CAAC;KACnB;CACF;AAED,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import path from "path";
|
|
5
5
|
import { usePlugin } from "zhin.js";
|
|
6
|
+
import { PageManager } from "@zhin.js/console";
|
|
6
7
|
import { IcqqAdapter } from "./adapter.js";
|
|
7
8
|
import { registerCommands } from "./commands/index.js";
|
|
8
9
|
import { registerTools } from "./tools/index.js";
|
|
@@ -34,8 +35,13 @@ useContext("tool", "icqq", (toolService, icqq) => {
|
|
|
34
35
|
return registerTools(toolService, icqq, plugin.name);
|
|
35
36
|
});
|
|
36
37
|
// ── Web 控制台入口 ─────────────────────────────────────────────────
|
|
37
|
-
useContext("web", (
|
|
38
|
-
|
|
38
|
+
useContext("web", () => {
|
|
39
|
+
PageManager.addEntry({
|
|
40
|
+
id: "icqq",
|
|
41
|
+
development: path.resolve(import.meta.dirname, "../client/index.tsx"),
|
|
42
|
+
production: path.resolve(import.meta.dirname, "../dist/index.js"),
|
|
43
|
+
meta: { name: "ICQQ" },
|
|
44
|
+
});
|
|
39
45
|
});
|
|
40
46
|
// ── HTTP 路由 ──────────────────────────────────────────────────────
|
|
41
47
|
useContext("router", "icqq", async (router, icqq) => {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAiC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAiC,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AAEzD,iEAAiE;AACjE,OAAO,CAAC;IACN,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;QACtC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACK,CAAC,CAAC;AAEV,kEAAkE;AAClE,UAAU,CAAC,MAAM,EAAE,CAAC,IAAiB,EAAE,EAAE;IACvC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,kEAAkE;AAClE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,WAAwB,EAAE,IAAiB,EAAE,EAAE;IACzE,OAAO,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,iEAAiE;AACjE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;IACrB,WAAW,CAAC,QAAQ,CAAC;QACnB,EAAE,EAAE,MAAM;QACV,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACrE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACjE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACvB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,oEAAoE;AACpE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAc,EAAE,IAAiB,EAAE,EAAE;IACvE,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC"}
|
package/lib/ipc-client.d.ts
CHANGED
|
@@ -5,8 +5,17 @@ export declare class IpcClient {
|
|
|
5
5
|
private pending;
|
|
6
6
|
private eventHandlers;
|
|
7
7
|
private _closed;
|
|
8
|
+
/** 是否为客户端主动 close()(与对端断线区分) */
|
|
9
|
+
private _userClosed;
|
|
10
|
+
private _remoteDisconnectEmitted;
|
|
11
|
+
private onRemoteDisconnect;
|
|
8
12
|
private constructor();
|
|
9
13
|
get closed(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* 注册「对端断开 / 连接异常关闭」回调(不含本端 close())。
|
|
16
|
+
* 传入 null 可清除回调。
|
|
17
|
+
*/
|
|
18
|
+
setOnRemoteDisconnect(handler: (() => void) | null): void;
|
|
10
19
|
/** 注册数据处理 handler(RPC 模式延迟到 challenge 完成后调用) */
|
|
11
20
|
private attachDataHandler;
|
|
12
21
|
/**
|
package/lib/ipc-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-client.d.ts","sourceRoot":"","sources":["../src/ipc-client.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,WAAW,EACX,QAAQ,EAET,MAAM,eAAe,CAAC;AAkBvB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAGX;IACJ,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,OAAO,CAAS;
|
|
1
|
+
{"version":3,"file":"ipc-client.d.ts","sourceRoot":"","sources":["../src/ipc-client.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,WAAW,EACX,QAAQ,EAET,MAAM,eAAe,CAAC;AAkBvB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAGX;IACJ,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,OAAO,CAAS;IACxB,gCAAgC;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,kBAAkB,CAA6B;IAEvD,OAAO;IAqCP,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAIzD,gDAAgD;IAChD,OAAO,CAAC,iBAAiB;IAIzB;;;;;OAKG;WACU,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA8BrD;;;;;;;;;;;;;;OAcG;WACU,UAAU,CAAC,OAAO,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,SAAS,CAAC;IA8DtB;;;OAGG;WACU,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB7D,OAAO,CAAC,MAAM;IAyBd;;OAEG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,SAAS,SAAQ,GAChB,OAAO,CAAC,WAAW,CAAC;IA8BvB;;;OAGG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GACjC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;IAsBnD,WAAW;IACX,KAAK;CAWN"}
|
package/lib/ipc-client.js
CHANGED
|
@@ -33,6 +33,10 @@ export class IpcClient {
|
|
|
33
33
|
pending = new Map();
|
|
34
34
|
eventHandlers = new Map();
|
|
35
35
|
_closed = false;
|
|
36
|
+
/** 是否为客户端主动 close()(与对端断线区分) */
|
|
37
|
+
_userClosed = false;
|
|
38
|
+
_remoteDisconnectEmitted = false;
|
|
39
|
+
onRemoteDisconnect = null;
|
|
36
40
|
constructor(socket, skipDataHandler = false) {
|
|
37
41
|
this.socket = socket;
|
|
38
42
|
if (!skipDataHandler) {
|
|
@@ -50,11 +54,34 @@ export class IpcClient {
|
|
|
50
54
|
reject(new Error("连接已关闭"));
|
|
51
55
|
}
|
|
52
56
|
this.pending.clear();
|
|
57
|
+
const unexpected = !this._userClosed;
|
|
58
|
+
if (unexpected &&
|
|
59
|
+
this.onRemoteDisconnect &&
|
|
60
|
+
!this._remoteDisconnectEmitted) {
|
|
61
|
+
this._remoteDisconnectEmitted = true;
|
|
62
|
+
const fn = this.onRemoteDisconnect;
|
|
63
|
+
this.onRemoteDisconnect = null;
|
|
64
|
+
queueMicrotask(() => {
|
|
65
|
+
try {
|
|
66
|
+
fn();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
/* 忽略上层重连回调异常 */
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
53
73
|
});
|
|
54
74
|
}
|
|
55
75
|
get closed() {
|
|
56
76
|
return this._closed;
|
|
57
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* 注册「对端断开 / 连接异常关闭」回调(不含本端 close())。
|
|
80
|
+
* 传入 null 可清除回调。
|
|
81
|
+
*/
|
|
82
|
+
setOnRemoteDisconnect(handler) {
|
|
83
|
+
this.onRemoteDisconnect = handler;
|
|
84
|
+
}
|
|
58
85
|
/** 注册数据处理 handler(RPC 模式延迟到 challenge 完成后调用) */
|
|
59
86
|
attachDataHandler() {
|
|
60
87
|
this.socket.on("data", (chunk) => this.onData(chunk.toString()));
|
|
@@ -260,7 +287,9 @@ export class IpcClient {
|
|
|
260
287
|
}
|
|
261
288
|
/** 关闭连接 */
|
|
262
289
|
close() {
|
|
290
|
+
this._userClosed = true;
|
|
263
291
|
this._closed = true;
|
|
292
|
+
this.onRemoteDisconnect = null;
|
|
264
293
|
this.eventHandlers.clear();
|
|
265
294
|
for (const { reject } of this.pending.values()) {
|
|
266
295
|
reject(new Error("连接已关闭"));
|
package/lib/ipc-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-client.js","sourceRoot":"","sources":["../src/ipc-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAQzB,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,SAAS;IACZ,MAAM,CAAa;IACnB,MAAM,GAAG,EAAE,CAAC;IACZ,OAAO,GAAG,IAAI,GAAG,EAGtB,CAAC;IACI,aAAa,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,OAAO,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"ipc-client.js","sourceRoot":"","sources":["../src/ipc-client.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -33,6 +33,11 @@ export interface IcqqBotConfig {
|
|
|
33
33
|
/** 认证 token(用于 HMAC-SHA256 挑战-响应,不会明文传输) */
|
|
34
34
|
token: string;
|
|
35
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* IPC/RPC 与守护进程连接意外断开时是否自动重连(指数退避,上限约 30s)。
|
|
38
|
+
* 默认 true;设为 false 则断开后仅将 `$connected` 置为 false,需手动重连。
|
|
39
|
+
*/
|
|
40
|
+
autoReconnect?: boolean;
|
|
36
41
|
}
|
|
37
42
|
/** IPC 返回的好友信息 */
|
|
38
43
|
export interface IpcFriendInfo {
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE;QACJ,aAAa;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW;QACX,IAAI,EAAE,MAAM,CAAC;QACb,4CAA4C;QAC5C,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE;QACJ,aAAa;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW;QACX,IAAI,EAAE,MAAM,CAAC;QACb,4CAA4C;QAC5C,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,kBAAkB;AAClB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iBAAiB;AACjB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mBAAmB;AACnB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/adapter-icqq",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "Zhin.js adapter for ICQQ (QQ Bot)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -46,20 +46,21 @@
|
|
|
46
46
|
"dependencies": {},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@radix-ui/themes": "^3.2.1",
|
|
49
|
-
"@types/react": "^19.2.
|
|
49
|
+
"@types/react": "^19.2.14",
|
|
50
50
|
"@types/react-dom": "^19.2.1",
|
|
51
|
-
"lucide-react": "^
|
|
51
|
+
"lucide-react": "^1.11.0",
|
|
52
52
|
"radix-ui": "^1.4.3",
|
|
53
53
|
"typescript": "^6.0.3",
|
|
54
|
-
"@zhin.js/
|
|
55
|
-
"zhin.js": "
|
|
54
|
+
"@zhin.js/cli": "1.0.68",
|
|
55
|
+
"@zhin.js/console": "2.0.14",
|
|
56
|
+
"zhin.js": "1.0.72"
|
|
56
57
|
},
|
|
57
58
|
"peerDependencies": {
|
|
58
|
-
"@zhin.js/
|
|
59
|
-
"@zhin.js/
|
|
60
|
-
"@zhin.js/core": "1.1.
|
|
61
|
-
"@zhin.js/http": "1.0.
|
|
62
|
-
"zhin.js": "1.0.
|
|
59
|
+
"@zhin.js/client": "1.0.18",
|
|
60
|
+
"@zhin.js/console": "2.0.14",
|
|
61
|
+
"@zhin.js/core": "1.1.14",
|
|
62
|
+
"@zhin.js/http": "1.0.65",
|
|
63
|
+
"zhin.js": "1.0.72"
|
|
63
64
|
},
|
|
64
65
|
"peerDependenciesMeta": {
|
|
65
66
|
"@zhin.js/client": {
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
"registry": "https://registry.npmjs.org"
|
|
78
79
|
},
|
|
79
80
|
"scripts": {
|
|
80
|
-
"build": "
|
|
81
|
+
"build": "zhin build",
|
|
81
82
|
"clean": "rimraf lib"
|
|
82
83
|
}
|
|
83
84
|
}
|
package/src/bot.ts
CHANGED
|
@@ -38,6 +38,10 @@ export class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData> {
|
|
|
38
38
|
groups = new Map<number, IpcGroupInfo>();
|
|
39
39
|
|
|
40
40
|
private subscriptions: Array<{ unsubscribe: () => Promise<void> }> = [];
|
|
41
|
+
/** 用户主动断开时为 true,阻止自动重连 */
|
|
42
|
+
private intentionalDisconnect = false;
|
|
43
|
+
/** 是否已有重连循环在跑(避免多次 schedule 叠套) */
|
|
44
|
+
private reconnectRunning = false;
|
|
41
45
|
|
|
42
46
|
get $id() {
|
|
43
47
|
return this.$config.name;
|
|
@@ -57,22 +61,54 @@ export class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData> {
|
|
|
57
61
|
// ── 连接 ───────────────────────────────────────────────────────────
|
|
58
62
|
|
|
59
63
|
async $connect(): Promise<void> {
|
|
60
|
-
|
|
64
|
+
this.intentionalDisconnect = false;
|
|
61
65
|
const rpc = this.$config.rpc;
|
|
62
66
|
|
|
63
67
|
if (rpc) {
|
|
64
|
-
this.logger.info(
|
|
65
|
-
|
|
68
|
+
this.logger.info(
|
|
69
|
+
`[${this.$id}] 正在通过 RPC 连接 icqq 守护进程 (${rpc.host}:${rpc.port})...`,
|
|
70
|
+
);
|
|
66
71
|
} else {
|
|
67
72
|
this.logger.info(`[${this.$id}] 正在连接 icqq 守护进程...`);
|
|
68
|
-
this.ipc = await IpcClient.connect(uin);
|
|
69
73
|
}
|
|
74
|
+
|
|
75
|
+
await this.rebindIpcSession();
|
|
76
|
+
|
|
70
77
|
this.logger.info(`[${this.$id}] 已连接守护进程${rpc ? " (RPC)" : ""}`);
|
|
78
|
+
this.logger.info(
|
|
79
|
+
`[${this.$id}] 登录成功,好友 ${this.friends.size},群 ${this.groups.size}`,
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** 建立或恢复与守护进程的 IPC/RPC 会话(订阅、缓存列表) */
|
|
84
|
+
private async rebindIpcSession(): Promise<void> {
|
|
85
|
+
const uin = Number(this.$config.name);
|
|
86
|
+
const rpc = this.$config.rpc;
|
|
87
|
+
|
|
88
|
+
// 旧连接上的订阅句柄已失效,不再对死 socket 发 unsubscribe
|
|
89
|
+
this.subscriptions = [];
|
|
90
|
+
|
|
91
|
+
let client: IpcClient;
|
|
92
|
+
if (rpc) {
|
|
93
|
+
client = await IpcClient.connectRpc(rpc);
|
|
94
|
+
} else {
|
|
95
|
+
client = await IpcClient.connect(uin);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (this.intentionalDisconnect) {
|
|
99
|
+
client.close();
|
|
100
|
+
throw new Error("连接已取消");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this.ipc = client;
|
|
104
|
+
if (this.$config.autoReconnect !== false) {
|
|
105
|
+
this.ipc.setOnRemoteDisconnect(() => this.scheduleReconnect());
|
|
106
|
+
} else {
|
|
107
|
+
this.ipc.setOnRemoteDisconnect(null);
|
|
108
|
+
}
|
|
71
109
|
|
|
72
|
-
// 拉取好友/群列表并缓存
|
|
73
110
|
await this.refreshLists();
|
|
74
111
|
|
|
75
|
-
// 订阅所有好友消息
|
|
76
112
|
for (const [uid] of this.friends) {
|
|
77
113
|
const sub = this.ipc.subscribe(
|
|
78
114
|
Actions.SUBSCRIBE,
|
|
@@ -82,7 +118,6 @@ export class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData> {
|
|
|
82
118
|
this.subscriptions.push(sub);
|
|
83
119
|
}
|
|
84
120
|
|
|
85
|
-
// 订阅所有群消息
|
|
86
121
|
for (const [gid] of this.groups) {
|
|
87
122
|
const sub = this.ipc.subscribe(
|
|
88
123
|
Actions.SUBSCRIBE,
|
|
@@ -93,9 +128,47 @@ export class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData> {
|
|
|
93
128
|
}
|
|
94
129
|
|
|
95
130
|
this.$connected = true;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** IPC/RPC 意外断开时调度重连(指数退避) */
|
|
134
|
+
private scheduleReconnect(): void {
|
|
135
|
+
if (this.$config.autoReconnect === false) return;
|
|
136
|
+
if (this.intentionalDisconnect) return;
|
|
137
|
+
if (this.reconnectRunning) return;
|
|
138
|
+
this.reconnectRunning = true;
|
|
139
|
+
void this.runReconnectLoop();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private async runReconnectLoop(): Promise<void> {
|
|
143
|
+
try {
|
|
144
|
+
for (let attempt = 0; !this.intentionalDisconnect; attempt++) {
|
|
145
|
+
const base = Math.min(30_000, 500 * 2 ** Math.min(attempt, 6));
|
|
146
|
+
const jitter = Math.floor(Math.random() * 400);
|
|
147
|
+
const delayMs = base + jitter;
|
|
148
|
+
|
|
149
|
+
this.$connected = false;
|
|
150
|
+
this.logger.warn(
|
|
151
|
+
`[${this.$id}] 与 icqq 守护进程连接已断开,${delayMs}ms 后尝试重连(第 ${attempt + 1} 次)…`,
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
await new Promise<void>((r) => setTimeout(r, delayMs));
|
|
155
|
+
if (this.intentionalDisconnect) break;
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
await this.rebindIpcSession();
|
|
159
|
+
this.logger.info(
|
|
160
|
+
`[${this.$id}] 已重新连接守护进程,好友 ${this.friends.size},群 ${this.groups.size}`,
|
|
161
|
+
);
|
|
162
|
+
break;
|
|
163
|
+
} catch (e: any) {
|
|
164
|
+
this.logger.warn(
|
|
165
|
+
`[${this.$id}] 重连失败: ${e?.message ?? String(e)}`,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} finally {
|
|
170
|
+
this.reconnectRunning = false;
|
|
171
|
+
}
|
|
99
172
|
}
|
|
100
173
|
|
|
101
174
|
/** 刷新好友/群列表缓存 */
|
|
@@ -123,6 +196,8 @@ export class IcqqBot implements Bot<IcqqBotConfig, IpcMessageEventData> {
|
|
|
123
196
|
// ── 断开 ───────────────────────────────────────────────────────────
|
|
124
197
|
|
|
125
198
|
async $disconnect(): Promise<void> {
|
|
199
|
+
this.intentionalDisconnect = true;
|
|
200
|
+
this.ipc?.setOnRemoteDisconnect(null);
|
|
126
201
|
for (const sub of this.subscriptions) {
|
|
127
202
|
await sub.unsubscribe().catch(() => {});
|
|
128
203
|
}
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import { usePlugin, type Plugin, type ToolFeature } from "zhin.js";
|
|
6
6
|
import type { Router } from "@zhin.js/http";
|
|
7
|
-
import
|
|
7
|
+
import { PageManager } from "@zhin.js/console";
|
|
8
8
|
import { IcqqAdapter } from "./adapter.js";
|
|
9
9
|
import { registerCommands } from "./commands/index.js";
|
|
10
10
|
import { registerTools } from "./tools/index.js";
|
|
@@ -13,7 +13,7 @@ import { registerRoutes } from "./routes.js";
|
|
|
13
13
|
declare module "zhin.js" {
|
|
14
14
|
namespace Plugin {
|
|
15
15
|
interface Contexts {
|
|
16
|
-
web:
|
|
16
|
+
web: PageManager;
|
|
17
17
|
router: Router;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -54,10 +54,13 @@ useContext("tool", "icqq", (toolService: ToolFeature, icqq: IcqqAdapter) => {
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
// ── Web 控制台入口 ─────────────────────────────────────────────────
|
|
57
|
-
useContext("web", (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
useContext("web", () => {
|
|
58
|
+
PageManager.addEntry({
|
|
59
|
+
id: "icqq",
|
|
60
|
+
development: path.resolve(import.meta.dirname, "../client/index.tsx"),
|
|
61
|
+
production: path.resolve(import.meta.dirname, "../dist/index.js"),
|
|
62
|
+
meta: { name: "ICQQ" },
|
|
63
|
+
});
|
|
61
64
|
});
|
|
62
65
|
|
|
63
66
|
// ── HTTP 路由 ──────────────────────────────────────────────────────
|
package/src/ipc-client.ts
CHANGED
|
@@ -47,6 +47,10 @@ export class IpcClient {
|
|
|
47
47
|
>();
|
|
48
48
|
private eventHandlers = new Map<string, (event: IpcEvent) => void>();
|
|
49
49
|
private _closed = false;
|
|
50
|
+
/** 是否为客户端主动 close()(与对端断线区分) */
|
|
51
|
+
private _userClosed = false;
|
|
52
|
+
private _remoteDisconnectEmitted = false;
|
|
53
|
+
private onRemoteDisconnect: (() => void) | null = null;
|
|
50
54
|
|
|
51
55
|
private constructor(socket: net.Socket, skipDataHandler = false) {
|
|
52
56
|
this.socket = socket;
|
|
@@ -65,6 +69,23 @@ export class IpcClient {
|
|
|
65
69
|
reject(new Error("连接已关闭"));
|
|
66
70
|
}
|
|
67
71
|
this.pending.clear();
|
|
72
|
+
const unexpected = !this._userClosed;
|
|
73
|
+
if (
|
|
74
|
+
unexpected &&
|
|
75
|
+
this.onRemoteDisconnect &&
|
|
76
|
+
!this._remoteDisconnectEmitted
|
|
77
|
+
) {
|
|
78
|
+
this._remoteDisconnectEmitted = true;
|
|
79
|
+
const fn = this.onRemoteDisconnect;
|
|
80
|
+
this.onRemoteDisconnect = null;
|
|
81
|
+
queueMicrotask(() => {
|
|
82
|
+
try {
|
|
83
|
+
fn();
|
|
84
|
+
} catch {
|
|
85
|
+
/* 忽略上层重连回调异常 */
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
68
89
|
});
|
|
69
90
|
}
|
|
70
91
|
|
|
@@ -72,6 +93,14 @@ export class IpcClient {
|
|
|
72
93
|
return this._closed;
|
|
73
94
|
}
|
|
74
95
|
|
|
96
|
+
/**
|
|
97
|
+
* 注册「对端断开 / 连接异常关闭」回调(不含本端 close())。
|
|
98
|
+
* 传入 null 可清除回调。
|
|
99
|
+
*/
|
|
100
|
+
setOnRemoteDisconnect(handler: (() => void) | null): void {
|
|
101
|
+
this.onRemoteDisconnect = handler;
|
|
102
|
+
}
|
|
103
|
+
|
|
75
104
|
/** 注册数据处理 handler(RPC 模式延迟到 challenge 完成后调用) */
|
|
76
105
|
private attachDataHandler() {
|
|
77
106
|
this.socket.on("data", (chunk) => this.onData(chunk.toString()));
|
|
@@ -315,7 +344,9 @@ export class IpcClient {
|
|
|
315
344
|
|
|
316
345
|
/** 关闭连接 */
|
|
317
346
|
close() {
|
|
347
|
+
this._userClosed = true;
|
|
318
348
|
this._closed = true;
|
|
349
|
+
this.onRemoteDisconnect = null;
|
|
319
350
|
this.eventHandlers.clear();
|
|
320
351
|
for (const { reject } of this.pending.values()) {
|
|
321
352
|
reject(new Error("连接已关闭"));
|
package/src/types.ts
CHANGED
|
@@ -36,6 +36,11 @@ export interface IcqqBotConfig {
|
|
|
36
36
|
/** 认证 token(用于 HMAC-SHA256 挑战-响应,不会明文传输) */
|
|
37
37
|
token: string;
|
|
38
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* IPC/RPC 与守护进程连接意外断开时是否自动重连(指数退避,上限约 30s)。
|
|
41
|
+
* 默认 true;设为 false 则断开后仅将 `$connected` 置为 false,需手动重连。
|
|
42
|
+
*/
|
|
43
|
+
autoReconnect?: boolean;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
/** IPC 返回的好友信息 */
|