From 5da2041cae28304608a229ea7f7615be0e445351 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Aug 2024 07:31:16 +0000 Subject: [PATCH] Deploy to GitHub pages --- 404.html | 39 +++ assets/404.html-VDqY5jAv.js | 1 + assets/account.html-CZSFLA49.js | 36 +++ assets/app-DbaUbv7J.js | 26 ++ assets/audit.html-K88uvqOh.js | 77 +++++ assets/create_identifier-DkS_S2BP.png | Bin 0 -> 38335 bytes assets/group.html-TYPC0dgB.js | 352 ++++++++++++++++++++ assets/index.html-BKsdjYkY.js | 1 + assets/index.html-Ckrxg8R_.js | 1 + assets/member.html-O2w6aVtX.js | 70 ++++ assets/message.html-BCdU9V6P.js | 122 +++++++ assets/official_account.html-nq3_CNXB.js | 66 ++++ assets/operation_1.html-Dsg-LZEv.js | 11 + assets/operation_2.html-B7PCwTg0.js | 34 ++ assets/profile.html-DLb2acmP.js | 20 ++ assets/quickstart.html-DXobG64g.js | 34 ++ assets/recent_contact.html-CjEIqo_Q.js | 79 +++++ assets/robot.html-ue2yf_EY.js | 14 + assets/sns.html-CNdoMAOn.js | 137 ++++++++ assets/style-CU2Kg4P2.css | 1 + guide/account.html | 74 +++++ guide/audit.html | 115 +++++++ guide/group.html | 390 +++++++++++++++++++++++ guide/index.html | 39 +++ guide/member.html | 108 +++++++ guide/message.html | 160 ++++++++++ guide/official_account.html | 104 ++++++ guide/operation_1.html | 49 +++ guide/operation_2.html | 72 +++++ guide/profile.html | 58 ++++ guide/quickstart.html | 72 +++++ guide/recent_contact.html | 117 +++++++ guide/robot.html | 52 +++ guide/sns.html | 175 ++++++++++ index.html | 39 +++ 35 files changed, 2745 insertions(+) create mode 100644 404.html create mode 100644 assets/404.html-VDqY5jAv.js create mode 100644 assets/account.html-CZSFLA49.js create mode 100644 assets/app-DbaUbv7J.js create mode 100644 assets/audit.html-K88uvqOh.js create mode 100644 assets/create_identifier-DkS_S2BP.png create mode 100644 assets/group.html-TYPC0dgB.js create mode 100644 assets/index.html-BKsdjYkY.js create mode 100644 assets/index.html-Ckrxg8R_.js create mode 100644 assets/member.html-O2w6aVtX.js create mode 100644 assets/message.html-BCdU9V6P.js create mode 100644 assets/official_account.html-nq3_CNXB.js create mode 100644 assets/operation_1.html-Dsg-LZEv.js create mode 100644 assets/operation_2.html-B7PCwTg0.js create mode 100644 assets/profile.html-DLb2acmP.js create mode 100644 assets/quickstart.html-DXobG64g.js create mode 100644 assets/recent_contact.html-CjEIqo_Q.js create mode 100644 assets/robot.html-ue2yf_EY.js create mode 100644 assets/sns.html-CNdoMAOn.js create mode 100644 assets/style-CU2Kg4P2.css create mode 100644 guide/account.html create mode 100644 guide/audit.html create mode 100644 guide/group.html create mode 100644 guide/index.html create mode 100644 guide/member.html create mode 100644 guide/message.html create mode 100644 guide/official_account.html create mode 100644 guide/operation_1.html create mode 100644 guide/operation_2.html create mode 100644 guide/profile.html create mode 100644 guide/quickstart.html create mode 100644 guide/recent_contact.html create mode 100644 guide/robot.html create mode 100644 guide/sns.html create mode 100644 index.html diff --git a/404.html b/404.html new file mode 100644 index 00000000..fbca8a2c --- /dev/null +++ b/404.html @@ -0,0 +1,39 @@ + + + + + + + + + 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +

404

How did we get here?
Take me home
+ + + diff --git a/assets/404.html-VDqY5jAv.js b/assets/404.html-VDqY5jAv.js new file mode 100644 index 00000000..df6412a0 --- /dev/null +++ b/assets/404.html-VDqY5jAv.js @@ -0,0 +1 @@ +import{_ as t,c as e,o,a}from"./app-DbaUbv7J.js";const n={},c=a("p",null,"404 Not Found",-1),l=[c];function s(_,r){return o(),e("div",null,l)}const d=t(n,[["render",s],["__file","404.html.vue"]]),h=JSON.parse('{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{d as comp,h as data}; diff --git a/assets/account.html-CZSFLA49.js b/assets/account.html-CZSFLA49.js new file mode 100644 index 00000000..8a648427 --- /dev/null +++ b/assets/account.html-CZSFLA49.js @@ -0,0 +1,36 @@ +import{_ as t,r as e,c as p,a as c,b as n,d as l,w as o,e as s,o as i}from"./app-DbaUbv7J.js";const u={},r=s(`

账号管理

导入单个账号

本接口用于将 App 自有账号导入即时通信 IM 账号系统,为该账号创建一个对应的内部 ID,使该账号能够使用即时通信 IM 服务。

说明

同一个账号重复导入仅会创建 1 个内部 ID。

使用示例:

AccountImportRequest request = AccountImportRequest.builder()
+        .userId("admin")
+        .faceUrl("https://avatars.githubusercontent.com/u/43716716?s=200&v=4")
+        .nick("doocs")
+        .build();
+
+AccountImportResult result = client.account.accountImport(request);
+

导入多个账号

本接口用于批量将 App 自有账号导入即时通信 IM 账号系统,为该账号创建一个对应的内部 ID,使该账号能够使用即时通信 IM 服务。

`,8),k=s(`

使用示例:

List<String> accounts = new ArrayList<>();
+accounts.add("user1");
+accounts.add("user2");
+MultiAccountImportRequest request = new MultiAccountImportRequest(accounts);
+
+MultiAccountImportResult result = client.account.multiAccountImport(request);
+

删除账号

使用示例:

AccountDeleteItem item1 = AccountDeleteItem.builder().userId("user1").build();
+AccountDeleteItem item2 = AccountDeleteItem.builder().userId("user2").build();
+List<AccountDeleteItem> deleteItems = Arrays.asList(item1, item2);
+AccountDeleteRequest request = new AccountDeleteRequest(deleteItems);
+
+AccountDeleteResult result = client.account.accountDelete(request);
+

查询账号

用于查询自有账号是否已导入即时通信 IM, 支持批量查询。

使用示例:

AccountCheckItem item1 = new AccountCheckItem("user1");
+AccountCheckItem item2 = new AccountCheckItem("user2");
+List<AccountCheckItem> checkItems = Arrays.asList(item1, item2);
+AccountCheckRequest request = new AccountCheckRequest(checkItems);
+
+AccountCheckResult result = client.account.accountCheck(request);
+

失效账号登录状态

本接口适用于将 App 用户账号的登录状态(例如 UserSig)失效。

例如,开发者判断一个用户为恶意账号后,可以调用本接口将该用户当前的登录状态失效,这样用户使用历史 UserSig 登录即时通信 IM 会失败。

注意

支持一次失效一个账号,用户可以使用重新生成的 UserSig 登录即时通信 IM

使用示例:

KickRequest request = new KickRequest("user2");
+
+KickResult result = client.account.kick(request);
+

查询账号在线状态

获取用户当前的登录状态。

使用示例:

List<String> toAccount = Arrays.asList("user1", "user2");
+QueryOnlineStatusRequest request = QueryOnlineStatusRequest.builder()
+        .toAccount(toAccount)
+        .isNeedDetail(IsNeedDetail.YES)
+        .build();
+
+QueryOnlineStatusResult result = client.account.queryOnlineStatus(request);
+
`,20);function d(m,v){const a=e("RouteLink");return i(),p("div",null,[r,c("p",null,[n("注意: 本接口单次最多支持导入 100 个账号,且不支持导入账号的昵称和头像信息。请使用 "),l(a,{to:"/guide/profile.html#%E8%AE%BE%E7%BD%AE%E8%B5%84%E6%96%99"},{default:o(()=>[n("资料管理-设置资料")]),_:1}),n(" 设置其他信息。")]),k])}const g=t(u,[["render",d],["__file","account.html.vue"]]),b=JSON.parse('{"path":"/guide/account.html","title":"账号管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"导入单个账号","slug":"导入单个账号","link":"#导入单个账号","children":[]},{"level":2,"title":"导入多个账号","slug":"导入多个账号","link":"#导入多个账号","children":[]},{"level":2,"title":"删除账号","slug":"删除账号","link":"#删除账号","children":[]},{"level":2,"title":"查询账号","slug":"查询账号","link":"#查询账号","children":[]},{"level":2,"title":"失效账号登录状态","slug":"失效账号登录状态","link":"#失效账号登录状态","children":[]},{"level":2,"title":"查询账号在线状态","slug":"查询账号在线状态","link":"#查询账号在线状态","children":[]}],"git":{"updatedTime":1696847753000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":4},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":1}]},"filePathRelative":"guide/account.md"}');export{g as comp,b as data}; diff --git a/assets/app-DbaUbv7J.js b/assets/app-DbaUbv7J.js new file mode 100644 index 00000000..cdbaa42a --- /dev/null +++ b/assets/app-DbaUbv7J.js @@ -0,0 +1,26 @@ +/** +* @vue/shared v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ro(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const be={},sn=[],Ze=()=>{},ga=()=>!1,Gn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Oo=e=>e.startsWith("onUpdate:"),Le=Object.assign,Io=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},va=Object.prototype.hasOwnProperty,ue=(e,t)=>va.call(e,t),Z=Array.isArray,an=e=>Or(e)==="[object Map]",Cs=e=>Or(e)==="[object Set]",oe=e=>typeof e=="function",xe=e=>typeof e=="string",en=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",Ps=e=>(_e(e)||oe(e))&&oe(e.then)&&oe(e.catch),Ts=Object.prototype.toString,Or=e=>Ts.call(e),_a=e=>Or(e).slice(8,-1),As=e=>Or(e)==="[object Object]",Mo=e=>xe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,cn=Ro(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ir=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ba=/-(\w)/g,nt=Ir(e=>e.replace(ba,(t,n)=>n?n.toUpperCase():"")),ya=/\B([A-Z])/g,tn=Ir(e=>e.replace(ya,"-$1").toLowerCase()),Yn=Ir(e=>e.charAt(0).toUpperCase()+e.slice(1)),Yr=Ir(e=>e?`on${Yn(e)}`:""),It=(e,t)=>!Object.is(e,t),Jr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ka=e=>{const t=parseFloat(e);return isNaN(t)?e:t},wa=e=>{const t=xe(e)?Number(e):NaN;return isNaN(t)?e:t};let pl;const Os=()=>pl||(pl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Jn(e){if(Z(e)){const t={};for(let n=0;n{if(n){const r=n.split(Sa);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ke(e){let t="";if(xe(e))t=e;else if(Z(e))for(let n=0;nxe(e)?e:e==null?"":Z(e)||_e(e)&&(e.toString===Ts||!oe(e.toString))?JSON.stringify(e,Ms,2):String(e),Ms=(e,t)=>t&&t.__v_isRef?Ms(e,t.value):an(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],l)=>(n[Qr(r,l)+" =>"]=o,n),{})}:Cs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Qr(n))}:en(t)?Qr(t):_e(t)&&!Z(t)&&!As(t)?String(t):t,Qr=(e,t="")=>{var n;return en(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Je;class Ta{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Je;try{return Je=this,t()}finally{Je=n}}}on(){Je=this}off(){Je=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Ft()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Rt,n=Jt;try{return Rt=!0,Jt=this,this._runnings++,ml(this),this.fn()}finally{gl(this),this._runnings--,Jt=n,Rt=t}}stop(){this.active&&(ml(this),gl(this),this.onStop&&this.onStop(),this.active=!1)}}function Oa(e){return e.value}function ml(e){e._trackId++,e._depsLength=0}function gl(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},kr=new WeakMap,Qt=Symbol(""),go=Symbol("");function qe(e,t,n){if(Rt&&Jt){let r=kr.get(e);r||kr.set(e,r=new Map);let o=r.get(n);o||r.set(n,o=Ds(()=>r.delete(n))),Vs(Jt,o)}}function vt(e,t,n,r,o,l){const s=kr.get(e);if(!s)return;let i=[];if(t==="clear")i=[...s.values()];else if(n==="length"&&Z(e)){const a=Number(r);s.forEach((c,u)=>{(u==="length"||!en(u)&&u>=a)&&i.push(c)})}else switch(n!==void 0&&i.push(s.get(n)),t){case"add":Z(e)?Mo(n)&&i.push(s.get("length")):(i.push(s.get(Qt)),an(e)&&i.push(s.get(go)));break;case"delete":Z(e)||(i.push(s.get(Qt)),an(e)&&i.push(s.get(go)));break;case"set":an(e)&&i.push(s.get(Qt));break}Ho();for(const a of i)a&&Fs(a,4);No()}function Ia(e,t){const n=kr.get(e);return n&&n.get(t)}const Ma=Ro("__proto__,__v_isRef,__isVue"),js=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(en)),vl=$a();function $a(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=fe(this);for(let l=0,s=this.length;l{e[t]=function(...n){Vt(),Ho();const r=fe(this)[t].apply(this,n);return No(),Ft(),r}}),e}function Ha(e){en(e)||(e=String(e));const t=fe(this);return qe(t,"has",e),t.hasOwnProperty(e)}class Bs{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const o=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return l;if(n==="__v_raw")return r===(o?l?Ya:Ks:l?Ws:Us).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const s=Z(t);if(!o){if(s&&ue(vl,n))return Reflect.get(vl,n,r);if(n==="hasOwnProperty")return Ha}const i=Reflect.get(t,n,r);return(en(n)?js.has(n):Ma(n))||(o||qe(t,"get",n),l)?i:He(i)?s&&Mo(n)?i:i.value:_e(i)?o?$r(i):Qn(i):i}}class zs extends Bs{constructor(t=!1){super(!1,t)}set(t,n,r,o){let l=t[n];if(!this._isShallow){const a=Vn(l);if(!wr(r)&&!Vn(r)&&(l=fe(l),r=fe(r)),!Z(t)&&He(l)&&!He(r))return a?!1:(l.value=r,!0)}const s=Z(t)&&Mo(n)?Number(n)e,Mr=e=>Reflect.getPrototypeOf(e);function or(e,t,n=!1,r=!1){e=e.__v_raw;const o=fe(e),l=fe(t);n||(It(t,l)&&qe(o,"get",t),qe(o,"get",l));const{has:s}=Mr(o),i=r?Vo:n?jo:Fn;if(s.call(o,t))return i(e.get(t));if(s.call(o,l))return i(e.get(l));e!==o&&e.get(t)}function lr(e,t=!1){const n=this.__v_raw,r=fe(n),o=fe(e);return t||(It(e,o)&&qe(r,"has",e),qe(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function sr(e,t=!1){return e=e.__v_raw,!t&&qe(fe(e),"iterate",Qt),Reflect.get(e,"size",e)}function _l(e){e=fe(e);const t=fe(this);return Mr(t).has.call(t,e)||(t.add(e),vt(t,"add",e,e)),this}function bl(e,t){t=fe(t);const n=fe(this),{has:r,get:o}=Mr(n);let l=r.call(n,e);l||(e=fe(e),l=r.call(n,e));const s=o.call(n,e);return n.set(e,t),l?It(t,s)&&vt(n,"set",e,t):vt(n,"add",e,t),this}function yl(e){const t=fe(this),{has:n,get:r}=Mr(t);let o=n.call(t,e);o||(e=fe(e),o=n.call(t,e)),r&&r.call(t,e);const l=t.delete(e);return o&&vt(t,"delete",e,void 0),l}function kl(){const e=fe(this),t=e.size!==0,n=e.clear();return t&&vt(e,"clear",void 0,void 0),n}function ir(e,t){return function(r,o){const l=this,s=l.__v_raw,i=fe(s),a=t?Vo:e?jo:Fn;return!e&&qe(i,"iterate",Qt),s.forEach((c,u)=>r.call(o,a(c),a(u),l))}}function ar(e,t,n){return function(...r){const o=this.__v_raw,l=fe(o),s=an(l),i=e==="entries"||e===Symbol.iterator&&s,a=e==="keys"&&s,c=o[e](...r),u=n?Vo:t?jo:Fn;return!t&&qe(l,"iterate",a?go:Qt),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:i?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function wt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ja(){const e={get(l){return or(this,l)},get size(){return sr(this)},has:lr,add:_l,set:bl,delete:yl,clear:kl,forEach:ir(!1,!1)},t={get(l){return or(this,l,!1,!0)},get size(){return sr(this)},has:lr,add:_l,set:bl,delete:yl,clear:kl,forEach:ir(!1,!0)},n={get(l){return or(this,l,!0)},get size(){return sr(this,!0)},has(l){return lr.call(this,l,!0)},add:wt("add"),set:wt("set"),delete:wt("delete"),clear:wt("clear"),forEach:ir(!0,!1)},r={get(l){return or(this,l,!0,!0)},get size(){return sr(this,!0)},has(l){return lr.call(this,l,!0)},add:wt("add"),set:wt("set"),delete:wt("delete"),clear:wt("clear"),forEach:ir(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(l=>{e[l]=ar(l,!1,!1),n[l]=ar(l,!0,!1),t[l]=ar(l,!1,!0),r[l]=ar(l,!0,!0)}),[e,n,t,r]}const[Ba,za,Ua,Wa]=ja();function Fo(e,t){const n=t?e?Wa:Ua:e?za:Ba;return(r,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ue(n,o)&&o in r?n:r,o,l)}const Ka={get:Fo(!1,!1)},qa={get:Fo(!1,!0)},Ga={get:Fo(!0,!1)};const Us=new WeakMap,Ws=new WeakMap,Ks=new WeakMap,Ya=new WeakMap;function Ja(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Qa(e){return e.__v_skip||!Object.isExtensible(e)?0:Ja(_a(e))}function Qn(e){return Vn(e)?e:Do(e,!1,Va,Ka,Us)}function qs(e){return Do(e,!1,Da,qa,Ws)}function $r(e){return Do(e,!0,Fa,Ga,Ks)}function Do(e,t,n,r,o){if(!_e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=o.get(e);if(l)return l;const s=Qa(e);if(s===0)return e;const i=new Proxy(e,s===2?r:n);return o.set(e,i),i}function An(e){return Vn(e)?An(e.__v_raw):!!(e&&e.__v_isReactive)}function Vn(e){return!!(e&&e.__v_isReadonly)}function wr(e){return!!(e&&e.__v_isShallow)}function Gs(e){return e?!!e.__v_raw:!1}function fe(e){const t=e&&e.__v_raw;return t?fe(t):e}function Xa(e){return Object.isExtensible(e)&&Rs(e,"__v_skip",!0),e}const Fn=e=>_e(e)?Qn(e):e,jo=e=>_e(e)?$r(e):e;class Ys{constructor(t,n,r,o){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new $o(()=>t(this._value),()=>Rn(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=fe(this);return(!t._cacheable||t.effect.dirty)&&It(t._value,t._value=t.effect.run())&&Rn(t,4),Bo(t),t.effect._dirtyLevel>=2&&Rn(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Za(e,t,n=!1){let r,o;const l=oe(e);return l?(r=e,o=Ze):(r=e.get,o=e.set),new Ys(r,o,l||!o,n)}function Bo(e){var t;Rt&&Jt&&(e=fe(e),Vs(Jt,(t=e.dep)!=null?t:e.dep=Ds(()=>e.dep=void 0,e instanceof Ys?e:void 0)))}function Rn(e,t=4,n){e=fe(e);const r=e.dep;r&&Fs(r,t)}function He(e){return!!(e&&e.__v_isRef===!0)}function se(e){return Js(e,!1)}function _n(e){return Js(e,!0)}function Js(e,t){return He(e)?e:new ec(e,t)}class ec{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:fe(t),this._value=n?t:Fn(t)}get value(){return Bo(this),this._value}set value(t){const n=this.__v_isShallow||wr(t)||Vn(t);t=n?t:fe(t),It(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Fn(t),Rn(this,4))}}function Xt(e){return He(e)?e.value:e}const tc={get:(e,t,n)=>Xt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return He(o)&&!He(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Qs(e){return An(e)?e:new Proxy(e,tc)}class nc{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Bo(this),()=>Rn(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function rc(e){return new nc(e)}function zo(e){const t=Z(e)?new Array(e.length):{};for(const n in e)t[n]=Xs(e,n);return t}class oc{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ia(fe(this._object),this._key)}}class lc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function sc(e,t,n){return He(e)?e:oe(e)?new lc(e):_e(e)&&arguments.length>1?Xs(e,t,n):se(e)}function Xs(e,t,n){const r=e[t];return He(r)?r:new oc(e,t,n)}/** +* @vue/runtime-core v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ot(e,t,n,r){try{return r?e(...r):e()}catch(o){Xn(o,t,n)}}function et(e,t,n,r){if(oe(e)){const o=Ot(e,t,n,r);return o&&Ps(o)&&o.catch(l=>{Xn(l,t,n)}),o}if(Z(e)){const o=[];for(let l=0;l>>1,o=Fe[r],l=jn(o);lft&&Fe.splice(t,1)}function uc(e){Z(e)?un.push(...e):(!xt||!xt.includes(e,e.allowRecurse?Kt+1:Kt))&&un.push(e),ei()}function wl(e,t,n=Dn?ft+1:0){for(;njn(n)-jn(r));if(un.length=0,xt){xt.push(...t);return}for(xt=t,Kt=0;Kte.id==null?1/0:e.id,fc=(e,t)=>{const n=jn(e)-jn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ti(e){vo=!1,Dn=!0,Fe.sort(fc);try{for(ft=0;ftxe(g)?g.trim():g)),f&&(o=n.map(ka))}let i,a=r[i=Yr(t)]||r[i=Yr(nt(t))];!a&&l&&(a=r[i=Yr(tn(t))]),a&&et(a,e,6,o);const c=r[i+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,et(c,e,6,o)}}function ni(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const l=e.emits;let s={},i=!1;if(!oe(e)){const a=c=>{const u=ni(c,t,!0);u&&(i=!0,Le(s,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!l&&!i?(_e(e)&&r.set(e,null),null):(Z(l)?l.forEach(a=>s[a]=null):Le(s,l),_e(e)&&r.set(e,s),s)}function Nr(e,t){return!e||!Gn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ue(e,t[0].toLowerCase()+t.slice(1))||ue(e,tn(t))||ue(e,t))}let Pe=null,ri=null;function Sr(e){const t=Pe;return Pe=e,ri=e&&e.type.__scopeId||null,t}function Ce(e,t=Pe,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Ml(-1);const l=Sr(t);let s;try{s=e(...o)}finally{Sr(l),r._d&&Ml(1)}return s};return r._n=!0,r._c=!0,r._d=!0,r}function Xr(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[l],slots:s,attrs:i,emit:a,render:c,renderCache:u,props:f,data:h,setupState:g,ctx:v,inheritAttrs:S}=e,P=Sr(e);let T,k;try{if(n.shapeFlag&4){const y=o||r,H=y;T=ot(c.call(H,y,u,f,g,h,v)),k=i}else{const y=t;T=ot(y.length>1?y(f,{attrs:i,slots:s,emit:a}):y(f,null)),k=t.props?i:hc(i)}}catch(y){$n.length=0,Xn(y,e,1),T=ne(We)}let m=T;if(k&&S!==!1){const y=Object.keys(k),{shapeFlag:H}=m;y.length&&H&7&&(l&&y.some(Oo)&&(k=pc(k,l)),m=$t(m,k,!1,!0))}return n.dirs&&(m=$t(m,null,!1,!0),m.dirs=m.dirs?m.dirs.concat(n.dirs):n.dirs),n.transition&&(m.transition=n.transition),T=m,Sr(P),T}const hc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},pc=(e,t)=>{const n={};for(const r in e)(!Oo(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function mc(e,t,n){const{props:r,children:o,component:l}=e,{props:s,children:i,patchFlag:a}=t,c=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?El(r,s,c):!!s;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function li(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):uc(e)}const yc=Symbol.for("v-scx"),kc=()=>Be(yc);function wc(e,t){return Ko(e,null,t)}const cr={};function De(e,t,n){return Ko(e,t,n)}function Ko(e,t,{immediate:n,deep:r,flush:o,once:l,onTrack:s,onTrigger:i}=be){if(t&&l){const $=t;t=(...N)=>{$(...N),H()}}const a=Me,c=$=>r===!0?$:Gt($,r===!1?1:void 0);let u,f=!1,h=!1;if(He(e)?(u=()=>e.value,f=wr(e)):An(e)?(u=()=>c(e),f=!0):Z(e)?(h=!0,f=e.some($=>An($)||wr($)),u=()=>e.map($=>{if(He($))return $.value;if(An($))return c($);if(oe($))return Ot($,a,2)})):oe(e)?t?u=()=>Ot(e,a,2):u=()=>(g&&g(),et(e,a,3,[v])):u=Ze,t&&r){const $=u;u=()=>Gt($())}let g,v=$=>{g=m.onStop=()=>{Ot($,a,4),g=m.onStop=void 0}},S;if(tr)if(v=Ze,t?n&&et(t,a,3,[u(),h?[]:void 0,v]):u(),o==="sync"){const $=kc();S=$.__watcherHandles||($.__watcherHandles=[])}else return Ze;let P=h?new Array(e.length).fill(cr):cr;const T=()=>{if(!(!m.active||!m.dirty))if(t){const $=m.run();(r||f||(h?$.some((N,_)=>It(N,P[_])):It($,P)))&&(g&&g(),et(t,a,3,[$,P===cr?void 0:h&&P[0]===cr?[]:P,v]),P=$)}else m.run()};T.allowRecurse=!!t;let k;o==="sync"?k=T:o==="post"?k=()=>Ue(T,a&&a.suspense):(T.pre=!0,a&&(T.id=a.uid),k=()=>Hr(T));const m=new $o(u,Ze,k),y=$s(),H=()=>{m.stop(),y&&Io(y.effects,m)};return t?n?T():P=m.run():o==="post"?Ue(m.run.bind(m),a&&a.suspense):m.run(),S&&S.push(H),H}function Ec(e,t,n){const r=this.proxy,o=xe(e)?e.includes(".")?si(r,e):()=>r[e]:e.bind(r,r);let l;oe(t)?l=t:(l=t.handler,n=t);const s=er(this),i=Ko(o,l.bind(r),n);return s(),i}function si(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{Gt(r,t,n)});else if(As(e))for(const r in e)Gt(e[r],t,n);return e}function Lr(e,t){if(Pe===null)return e;const n=Br(Pe)||Pe.proxy,r=e.dirs||(e.dirs=[]);for(let o=0;o{e.isMounted=!0}),Fr(()=>{e.isUnmounting=!0}),e}const Qe=[Function,Array],ii={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Qe,onEnter:Qe,onAfterEnter:Qe,onEnterCancelled:Qe,onBeforeLeave:Qe,onLeave:Qe,onAfterLeave:Qe,onLeaveCancelled:Qe,onBeforeAppear:Qe,onAppear:Qe,onAfterAppear:Qe,onAppearCancelled:Qe},Lc={name:"BaseTransition",props:ii,setup(e,{slots:t}){const n=jr(),r=Sc();return()=>{const o=t.default&&ci(t.default(),!0);if(!o||!o.length)return;let l=o[0];if(o.length>1){for(const h of o)if(h.type!==We){l=h;break}}const s=fe(e),{mode:i}=s;if(r.isLeaving)return Zr(l);const a=Ll(l);if(!a)return Zr(l);const c=_o(a,s,r,n);bo(a,c);const u=n.subTree,f=u&&Ll(u);if(f&&f.type!==We&&!qt(a,f)){const h=_o(f,s,r,n);if(bo(f,h),i==="out-in"&&a.type!==We)return r.isLeaving=!0,h.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Zr(l);i==="in-out"&&a.type!==We&&(h.delayLeave=(g,v,S)=>{const P=ai(r,f);P[String(f.key)]=f,g[Ct]=()=>{v(),g[Ct]=void 0,delete c.delayedLeave},c.delayedLeave=S})}return l}}},xc=Lc;function ai(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function _o(e,t,n,r){const{appear:o,mode:l,persisted:s=!1,onBeforeEnter:i,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:h,onAfterLeave:g,onLeaveCancelled:v,onBeforeAppear:S,onAppear:P,onAfterAppear:T,onAppearCancelled:k}=t,m=String(e.key),y=ai(n,e),H=(_,G)=>{_&&et(_,r,9,G)},$=(_,G)=>{const C=G[1];H(_,G),Z(_)?_.every(W=>W.length<=1)&&C():_.length<=1&&C()},N={mode:l,persisted:s,beforeEnter(_){let G=i;if(!n.isMounted)if(o)G=S||i;else return;_[Ct]&&_[Ct](!0);const C=y[m];C&&qt(e,C)&&C.el[Ct]&&C.el[Ct](),H(G,[_])},enter(_){let G=a,C=c,W=u;if(!n.isMounted)if(o)G=P||a,C=T||c,W=k||u;else return;let w=!1;const V=_[ur]=ee=>{w||(w=!0,ee?H(W,[_]):H(C,[_]),N.delayedLeave&&N.delayedLeave(),_[ur]=void 0)};G?$(G,[_,V]):V()},leave(_,G){const C=String(e.key);if(_[ur]&&_[ur](!0),n.isUnmounting)return G();H(f,[_]);let W=!1;const w=_[Ct]=V=>{W||(W=!0,G(),V?H(v,[_]):H(g,[_]),_[Ct]=void 0,y[C]===e&&delete y[C])};y[C]=e,h?$(h,[_,w]):w()},clone(_){return _o(_,t,n,r)}};return N}function Zr(e){if(Zn(e))return e=$t(e),e.children=null,e}function Ll(e){if(!Zn(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&oe(n.default))return n.default()}}function bo(e,t){e.shapeFlag&6&&e.component?bo(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ci(e,t=!1,n){let r=[],o=0;for(let l=0;l1)for(let l=0;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Cc(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:l,suspensible:s=!0,onError:i}=e;let a=null,c,u=0;const f=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),i)return new Promise((S,P)=>{i(v,()=>S(f()),()=>P(v),u+1)});throw v}).then(v=>g!==a&&a?a:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),c=v,v)))};return he({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=Me;if(c)return()=>eo(c,g);const v=k=>{a=null,Xn(k,g,13,!r)};if(s&&g.suspense||tr)return h().then(k=>()=>eo(k,g)).catch(k=>(v(k),()=>r?ne(r,{error:k}):null));const S=se(!1),P=se(),T=se(!!o);return o&&setTimeout(()=>{T.value=!1},o),l!=null&&setTimeout(()=>{if(!S.value&&!P.value){const k=new Error(`Async component timed out after ${l}ms.`);v(k),P.value=k}},l),h().then(()=>{S.value=!0,g.parent&&Zn(g.parent.vnode)&&(g.parent.effect.dirty=!0,Hr(g.parent.update))}).catch(k=>{v(k),P.value=k}),()=>{if(S.value&&c)return eo(c,g);if(P.value&&r)return ne(r,{error:P.value});if(n&&!T.value)return ne(n)}}})}function eo(e,t){const{ref:n,props:r,children:o,ce:l}=t.vnode,s=ne(e,r,o);return s.ref=n,s.ce=l,delete t.vnode.ce,s}const Zn=e=>e.type.__isKeepAlive;function Pc(e,t){ui(e,"a",t)}function Tc(e,t){ui(e,"da",t)}function ui(e,t,n=Me){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Vr(t,r,n),n){let o=n.parent;for(;o&&o.parent;)Zn(o.parent.vnode)&&Ac(r,t,n,o),o=o.parent}}function Ac(e,t,n,r){const o=Vr(t,e,r,!0);Dr(()=>{Io(r[t],o)},n)}function Vr(e,t,n=Me,r=!1){if(n){const o=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...s)=>{if(n.isUnmounted)return;Vt();const i=er(n),a=et(t,n,e,s);return i(),Ft(),a});return r?o.unshift(l):o.push(l),l}}const _t=e=>(t,n=Me)=>(!tr||e==="sp")&&Vr(e,(...r)=>t(...r),n),Rc=_t("bm"),Ge=_t("m"),Oc=_t("bu"),Ic=_t("u"),Fr=_t("bum"),Dr=_t("um"),Mc=_t("sp"),$c=_t("rtg"),Hc=_t("rtc");function Nc(e,t=Me){Vr("ec",e,t)}function Mt(e,t,n,r){let o;const l=n;if(Z(e)||xe(e)){o=new Array(e.length);for(let s=0,i=e.length;st(s,i,void 0,l));else{const s=Object.keys(e);o=new Array(s.length);for(let i=0,a=s.length;iPr(t)?!(t.type===We||t.type===ve&&!fi(t.children)):!0)?e:null}const yo=e=>e?Ci(e)?Br(e)||e.proxy:yo(e.parent):null,On=Le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yo(e.parent),$root:e=>yo(e.root),$emit:e=>e.emit,$options:e=>qo(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Hr(e.update)}),$nextTick:e=>e.n||(e.n=bn.bind(e.proxy)),$watch:e=>Ec.bind(e)}),to=(e,t)=>e!==be&&!e.__isScriptSetup&&ue(e,t),Vc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:l,accessCache:s,type:i,appContext:a}=e;let c;if(t[0]!=="$"){const g=s[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return l[t]}else{if(to(r,t))return s[t]=1,r[t];if(o!==be&&ue(o,t))return s[t]=2,o[t];if((c=e.propsOptions[0])&&ue(c,t))return s[t]=3,l[t];if(n!==be&&ue(n,t))return s[t]=4,n[t];ko&&(s[t]=0)}}const u=On[t];let f,h;if(u)return t==="$attrs"&&qe(e.attrs,"get",""),u(e);if((f=i.__cssModules)&&(f=f[t]))return f;if(n!==be&&ue(n,t))return s[t]=4,n[t];if(h=a.config.globalProperties,ue(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:l}=e;return to(o,t)?(o[t]=n,!0):r!==be&&ue(r,t)?(r[t]=n,!0):ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:l}},s){let i;return!!n[s]||e!==be&&ue(e,s)||to(t,s)||(i=l[0])&&ue(i,s)||ue(r,s)||ue(On,s)||ue(o.config.globalProperties,s)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ue(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function xl(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ko=!0;function Fc(e){const t=qo(e),n=e.proxy,r=e.ctx;ko=!1,t.beforeCreate&&Cl(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:s,watch:i,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:g,updated:v,activated:S,deactivated:P,beforeDestroy:T,beforeUnmount:k,destroyed:m,unmounted:y,render:H,renderTracked:$,renderTriggered:N,errorCaptured:_,serverPrefetch:G,expose:C,inheritAttrs:W,components:w,directives:V,filters:ee}=t;if(c&&Dc(c,r,null),s)for(const Y in s){const z=s[Y];oe(z)&&(r[Y]=z.bind(n))}if(o){const Y=o.call(n,n);_e(Y)&&(e.data=Qn(Y))}if(ko=!0,l)for(const Y in l){const z=l[Y],Re=oe(z)?z.bind(n,n):oe(z.get)?z.get.bind(n,n):Ze,$e=!oe(z)&&oe(z.set)?z.set.bind(n):Ze,ze=R({get:Re,set:$e});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>ze.value,set:Ne=>ze.value=Ne})}if(i)for(const Y in i)di(i[Y],r,n,Y);if(a){const Y=oe(a)?a.call(n):a;Reflect.ownKeys(Y).forEach(z=>{Zt(z,Y[z])})}u&&Cl(u,e,"c");function O(Y,z){Z(z)?z.forEach(Re=>Y(Re.bind(n))):z&&Y(z.bind(n))}if(O(Rc,f),O(Ge,h),O(Oc,g),O(Ic,v),O(Pc,S),O(Tc,P),O(Nc,_),O(Hc,$),O($c,N),O(Fr,k),O(Dr,y),O(Mc,G),Z(C))if(C.length){const Y=e.exposed||(e.exposed={});C.forEach(z=>{Object.defineProperty(Y,z,{get:()=>n[z],set:Re=>n[z]=Re})})}else e.exposed||(e.exposed={});H&&e.render===Ze&&(e.render=H),W!=null&&(e.inheritAttrs=W),w&&(e.components=w),V&&(e.directives=V)}function Dc(e,t,n=Ze){Z(e)&&(e=wo(e));for(const r in e){const o=e[r];let l;_e(o)?"default"in o?l=Be(o.from||r,o.default,!0):l=Be(o.from||r):l=Be(o),He(l)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>l.value,set:s=>l.value=s}):t[r]=l}}function Cl(e,t,n){et(Z(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function di(e,t,n,r){const o=r.includes(".")?si(n,r):()=>n[r];if(xe(e)){const l=t[e];oe(l)&&De(o,l)}else if(oe(e))De(o,e.bind(n));else if(_e(e))if(Z(e))e.forEach(l=>di(l,t,n,r));else{const l=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(l)&&De(o,l,e)}}function qo(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:s}}=e.appContext,i=l.get(t);let a;return i?a=i:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(c=>xr(a,c,s,!0)),xr(a,t,s)),_e(t)&&l.set(t,a),a}function xr(e,t,n,r=!1){const{mixins:o,extends:l}=t;l&&xr(e,l,n,!0),o&&o.forEach(s=>xr(e,s,n,!0));for(const s in t)if(!(r&&s==="expose")){const i=jc[s]||n&&n[s];e[s]=i?i(e[s],t[s]):t[s]}return e}const jc={data:Pl,props:Tl,emits:Tl,methods:Pn,computed:Pn,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:Pn,directives:Pn,watch:zc,provide:Pl,inject:Bc};function Pl(e,t){return t?e?function(){return Le(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function Bc(e,t){return Pn(wo(e),wo(t))}function wo(e){if(Z(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}const pi={},mi=()=>Object.create(pi),gi=e=>Object.getPrototypeOf(e)===pi;function Kc(e,t,n,r=!1){const o={},l=mi();e.propsDefaults=Object.create(null),vi(e,t,o,l);for(const s in e.propsOptions[0])s in o||(o[s]=void 0);n?e.props=r?o:qs(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function qc(e,t,n,r){const{props:o,attrs:l,vnode:{patchFlag:s}}=e,i=fe(o),[a]=e.propsOptions;let c=!1;if((r||s>0)&&!(s&16)){if(s&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,g]=_i(f,t,!0);Le(s,h),g&&i.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!a)return _e(e)&&r.set(e,sn),sn;if(Z(l))for(let u=0;u-1,g[1]=S<0||v-1||ue(g,"default"))&&i.push(f)}}}const c=[s,i];return _e(e)&&r.set(e,c),c}function Al(e){return e[0]!=="$"&&!cn(e)}function Rl(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Ol(e,t){return Rl(e)===Rl(t)}function Il(e,t){return Z(t)?t.findIndex(n=>Ol(n,e)):oe(t)&&Ol(t,e)?0:-1}const bi=e=>e[0]==="_"||e==="$stable",Go=e=>Z(e)?e.map(ot):[ot(e)],Gc=(e,t,n)=>{if(t._n)return t;const r=Ce((...o)=>Go(t(...o)),n);return r._c=!1,r},yi=(e,t,n)=>{const r=e._ctx;for(const o in e){if(bi(o))continue;const l=e[o];if(oe(l))t[o]=Gc(o,l,r);else if(l!=null){const s=Go(l);t[o]=()=>s}}},ki=(e,t)=>{const n=Go(t);e.slots.default=()=>n},Yc=(e,t)=>{const n=e.slots=mi();if(e.vnode.shapeFlag&32){const r=t._;r?(Le(n,t),Rs(n,"_",r,!0)):yi(t,n)}else t&&ki(e,t)},Jc=(e,t,n)=>{const{vnode:r,slots:o}=e;let l=!0,s=be;if(r.shapeFlag&32){const i=t._;i?n&&i===1?l=!1:(Le(o,t),!n&&i===1&&delete o._):(l=!t.$stable,yi(t,o)),s=t}else t&&(ki(e,t),s={default:1});if(l)for(const i in o)!bi(i)&&s[i]==null&&delete o[i]};function Cr(e,t,n,r,o=!1){if(Z(e)){e.forEach((h,g)=>Cr(h,t&&(Z(t)?t[g]:t),n,r,o));return}if(fn(r)&&!o)return;const l=r.shapeFlag&4?Br(r.component)||r.component.proxy:r.el,s=o?null:l,{i,r:a}=e,c=t&&t.r,u=i.refs===be?i.refs={}:i.refs,f=i.setupState;if(c!=null&&c!==a&&(xe(c)?(u[c]=null,ue(f,c)&&(f[c]=null)):He(c)&&(c.value=null)),oe(a))Ot(a,i,12,[s,u]);else{const h=xe(a),g=He(a);if(h||g){const v=()=>{if(e.f){const S=h?ue(f,a)?f[a]:u[a]:a.value;o?Z(S)&&Io(S,l):Z(S)?S.includes(l)||S.push(l):h?(u[a]=[l],ue(f,a)&&(f[a]=u[a])):(a.value=[l],e.k&&(u[e.k]=a.value))}else h?(u[a]=s,ue(f,a)&&(f[a]=s)):g&&(a.value=s,e.k&&(u[e.k]=s))};s?(v.id=-1,Ue(v,n)):v()}}}let Et=!1;const Qc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Xc=e=>e.namespaceURI.includes("MathML"),fr=e=>{if(Qc(e))return"svg";if(Xc(e))return"mathml"},dr=e=>e.nodeType===8;function Zc(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:l,parentNode:s,remove:i,insert:a,createComment:c}}=e,u=(m,y)=>{if(!y.hasChildNodes()){n(null,m,y),Er(),y._vnode=m;return}Et=!1,f(y.firstChild,m,null,null,null),Er(),y._vnode=m,Et&&console.error("Hydration completed but contains mismatches.")},f=(m,y,H,$,N,_=!1)=>{_=_||!!y.dynamicChildren;const G=dr(m)&&m.data==="[",C=()=>S(m,y,H,$,N,G),{type:W,ref:w,shapeFlag:V,patchFlag:ee}=y;let le=m.nodeType;y.el=m,ee===-2&&(_=!1,y.dynamicChildren=null);let O=null;switch(W){case pn:le!==3?y.children===""?(a(y.el=o(""),s(m),m),O=m):O=C():(m.data!==y.children&&(Et=!0,m.data=y.children),O=l(m));break;case We:k(m)?(O=l(m),T(y.el=m.content.firstChild,m,H)):le!==8||G?O=C():O=l(m);break;case Mn:if(G&&(m=l(m),le=m.nodeType),le===1||le===3){O=m;const Y=!y.children.length;for(let z=0;z{_=_||!!y.dynamicChildren;const{type:G,props:C,patchFlag:W,shapeFlag:w,dirs:V,transition:ee}=y,le=G==="input"||G==="option";if(le||W!==-1){V&&ut(y,null,H,"created");let O=!1;if(k(m)){O=wi($,ee)&&H&&H.vnode.props&&H.vnode.props.appear;const z=m.content.firstChild;O&&ee.beforeEnter(z),T(z,m,H),y.el=m=z}if(w&16&&!(C&&(C.innerHTML||C.textContent))){let z=g(m.firstChild,y,m,H,$,N,_);for(;z;){Et=!0;const Re=z;z=z.nextSibling,i(Re)}}else w&8&&m.textContent!==y.children&&(Et=!0,m.textContent=y.children);if(C)if(le||!_||W&48)for(const z in C)(le&&(z.endsWith("value")||z==="indeterminate")||Gn(z)&&!cn(z)||z[0]===".")&&r(m,z,null,C[z],void 0,void 0,H);else C.onClick&&r(m,"onClick",null,C.onClick,void 0,void 0,H);let Y;(Y=C&&C.onVnodeBeforeMount)&&Xe(Y,H,y),V&&ut(y,null,H,"beforeMount"),((Y=C&&C.onVnodeMounted)||V||O)&&li(()=>{Y&&Xe(Y,H,y),O&&ee.enter(m),V&&ut(y,null,H,"mounted")},$)}return m.nextSibling},g=(m,y,H,$,N,_,G)=>{G=G||!!y.dynamicChildren;const C=y.children,W=C.length;for(let w=0;w{const{slotScopeIds:G}=y;G&&(N=N?N.concat(G):G);const C=s(m),W=g(l(m),y,C,H,$,N,_);return W&&dr(W)&&W.data==="]"?l(y.anchor=W):(Et=!0,a(y.anchor=c("]"),C,W),W)},S=(m,y,H,$,N,_)=>{if(Et=!0,y.el=null,_){const W=P(m);for(;;){const w=l(m);if(w&&w!==W)i(w);else break}}const G=l(m),C=s(m);return i(m),n(null,y,C,G,H,$,fr(C),N),G},P=(m,y="[",H="]")=>{let $=0;for(;m;)if(m=l(m),m&&dr(m)&&(m.data===y&&$++,m.data===H)){if($===0)return l(m);$--}return m},T=(m,y,H)=>{const $=y.parentNode;$&&$.replaceChild(m,y);let N=H;for(;N;)N.vnode.el===y&&(N.vnode.el=N.subTree.el=m),N=N.parent},k=m=>m.nodeType===1&&m.tagName.toLowerCase()==="template";return[u,f]}const Ue=li;function eu(e){return tu(e,Zc)}function tu(e,t){const n=Os();n.__VUE__=!0;const{insert:r,remove:o,patchProp:l,createElement:s,createText:i,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:g=Ze,insertStaticContent:v}=e,S=(d,p,b,x=null,E=null,I=null,j=void 0,M=null,F=!!p.dynamicChildren)=>{if(d===p)return;d&&!qt(d,p)&&(x=L(d),Ne(d,E,I,!0),d=null),p.patchFlag===-2&&(F=!1,p.dynamicChildren=null);const{type:A,ref:K,shapeFlag:Q}=p;switch(A){case pn:P(d,p,b,x);break;case We:T(d,p,b,x);break;case Mn:d==null&&k(p,b,x,j);break;case ve:w(d,p,b,x,E,I,j,M,F);break;default:Q&1?H(d,p,b,x,E,I,j,M,F):Q&6?V(d,p,b,x,E,I,j,M,F):(Q&64||Q&128)&&A.process(d,p,b,x,E,I,j,M,F,q)}K!=null&&E&&Cr(K,d&&d.ref,I,p||d,!p)},P=(d,p,b,x)=>{if(d==null)r(p.el=i(p.children),b,x);else{const E=p.el=d.el;p.children!==d.children&&c(E,p.children)}},T=(d,p,b,x)=>{d==null?r(p.el=a(p.children||""),b,x):p.el=d.el},k=(d,p,b,x)=>{[d.el,d.anchor]=v(d.children,p,b,x,d.el,d.anchor)},m=({el:d,anchor:p},b,x)=>{let E;for(;d&&d!==p;)E=h(d),r(d,b,x),d=E;r(p,b,x)},y=({el:d,anchor:p})=>{let b;for(;d&&d!==p;)b=h(d),o(d),d=b;o(p)},H=(d,p,b,x,E,I,j,M,F)=>{p.type==="svg"?j="svg":p.type==="math"&&(j="mathml"),d==null?$(p,b,x,E,I,j,M,F):G(d,p,E,I,j,M,F)},$=(d,p,b,x,E,I,j,M)=>{let F,A;const{props:K,shapeFlag:Q,transition:J,dirs:re}=d;if(F=d.el=s(d.type,I,K&&K.is,K),Q&8?u(F,d.children):Q&16&&_(d.children,F,null,x,E,no(d,I),j,M),re&&ut(d,null,x,"created"),N(F,d,d.scopeId,j,x),K){for(const ge in K)ge!=="value"&&!cn(ge)&&l(F,ge,null,K[ge],I,d.children,x,E,Oe);"value"in K&&l(F,"value",null,K.value,I),(A=K.onVnodeBeforeMount)&&Xe(A,x,d)}re&&ut(d,null,x,"beforeMount");const ie=wi(E,J);ie&&J.beforeEnter(F),r(F,p,b),((A=K&&K.onVnodeMounted)||ie||re)&&Ue(()=>{A&&Xe(A,x,d),ie&&J.enter(F),re&&ut(d,null,x,"mounted")},E)},N=(d,p,b,x,E)=>{if(b&&g(d,b),x)for(let I=0;I{for(let A=F;A{const M=p.el=d.el;let{patchFlag:F,dynamicChildren:A,dirs:K}=p;F|=d.patchFlag&16;const Q=d.props||be,J=p.props||be;let re;if(b&&jt(b,!1),(re=J.onVnodeBeforeUpdate)&&Xe(re,b,p,d),K&&ut(p,d,b,"beforeUpdate"),b&&jt(b,!0),A?C(d.dynamicChildren,A,M,b,x,no(p,E),I):j||z(d,p,M,null,b,x,no(p,E),I,!1),F>0){if(F&16)W(M,p,Q,J,b,x,E);else if(F&2&&Q.class!==J.class&&l(M,"class",null,J.class,E),F&4&&l(M,"style",Q.style,J.style,E),F&8){const ie=p.dynamicProps;for(let ge=0;ge{re&&Xe(re,b,p,d),K&&ut(p,d,b,"updated")},x)},C=(d,p,b,x,E,I,j)=>{for(let M=0;M{if(b!==x){if(b!==be)for(const M in b)!cn(M)&&!(M in x)&&l(d,M,b[M],null,j,p.children,E,I,Oe);for(const M in x){if(cn(M))continue;const F=x[M],A=b[M];F!==A&&M!=="value"&&l(d,M,A,F,j,p.children,E,I,Oe)}"value"in x&&l(d,"value",b.value,x.value,j)}},w=(d,p,b,x,E,I,j,M,F)=>{const A=p.el=d?d.el:i(""),K=p.anchor=d?d.anchor:i("");let{patchFlag:Q,dynamicChildren:J,slotScopeIds:re}=p;re&&(M=M?M.concat(re):re),d==null?(r(A,b,x),r(K,b,x),_(p.children||[],b,K,E,I,j,M,F)):Q>0&&Q&64&&J&&d.dynamicChildren?(C(d.dynamicChildren,J,b,E,I,j,M),(p.key!=null||E&&p===E.subTree)&&Ei(d,p,!0)):z(d,p,b,K,E,I,j,M,F)},V=(d,p,b,x,E,I,j,M,F)=>{p.slotScopeIds=M,d==null?p.shapeFlag&512?E.ctx.activate(p,b,x,j,F):ee(p,b,x,E,I,j,F):le(d,p,F)},ee=(d,p,b,x,E,I,j)=>{const M=d.component=fu(d,x,E);if(Zn(d)&&(M.ctx.renderer=q),du(M),M.asyncDep){if(E&&E.registerDep(M,O),!d.el){const F=M.subTree=ne(We);T(null,F,p,b)}}else O(M,d,p,b,E,I,j)},le=(d,p,b)=>{const x=p.component=d.component;if(mc(d,p,b))if(x.asyncDep&&!x.asyncResolved){Y(x,p,b);return}else x.next=p,cc(x.update),x.effect.dirty=!0,x.update();else p.el=d.el,x.vnode=p},O=(d,p,b,x,E,I,j)=>{const M=()=>{if(d.isMounted){let{next:K,bu:Q,u:J,parent:re,vnode:ie}=d;{const rn=Si(d);if(rn){K&&(K.el=ie.el,Y(d,K,j)),rn.asyncDep.then(()=>{d.isUnmounted||M()});return}}let ge=K,ye;jt(d,!1),K?(K.el=ie.el,Y(d,K,j)):K=ie,Q&&Jr(Q),(ye=K.props&&K.props.onVnodeBeforeUpdate)&&Xe(ye,re,K,ie),jt(d,!0);const Ie=Xr(d),rt=d.subTree;d.subTree=Ie,S(rt,Ie,f(rt.el),L(rt),d,E,I),K.el=Ie.el,ge===null&&gc(d,Ie.el),J&&Ue(J,E),(ye=K.props&&K.props.onVnodeUpdated)&&Ue(()=>Xe(ye,re,K,ie),E)}else{let K;const{el:Q,props:J}=p,{bm:re,m:ie,parent:ge}=d,ye=fn(p);if(jt(d,!1),re&&Jr(re),!ye&&(K=J&&J.onVnodeBeforeMount)&&Xe(K,ge,p),jt(d,!0),Q&&me){const Ie=()=>{d.subTree=Xr(d),me(Q,d.subTree,d,E,null)};ye?p.type.__asyncLoader().then(()=>!d.isUnmounted&&Ie()):Ie()}else{const Ie=d.subTree=Xr(d);S(null,Ie,b,x,d,E,I),p.el=Ie.el}if(ie&&Ue(ie,E),!ye&&(K=J&&J.onVnodeMounted)){const Ie=p;Ue(()=>Xe(K,ge,Ie),E)}(p.shapeFlag&256||ge&&fn(ge.vnode)&&ge.vnode.shapeFlag&256)&&d.a&&Ue(d.a,E),d.isMounted=!0,p=b=x=null}},F=d.effect=new $o(M,Ze,()=>Hr(A),d.scope),A=d.update=()=>{F.dirty&&F.run()};A.id=d.uid,jt(d,!0),A()},Y=(d,p,b)=>{p.component=d;const x=d.vnode.props;d.vnode=p,d.next=null,qc(d,p.props,x,b),Jc(d,p.children,b),Vt(),wl(d),Ft()},z=(d,p,b,x,E,I,j,M,F=!1)=>{const A=d&&d.children,K=d?d.shapeFlag:0,Q=p.children,{patchFlag:J,shapeFlag:re}=p;if(J>0){if(J&128){$e(A,Q,b,x,E,I,j,M,F);return}else if(J&256){Re(A,Q,b,x,E,I,j,M,F);return}}re&8?(K&16&&Oe(A,E,I),Q!==A&&u(b,Q)):K&16?re&16?$e(A,Q,b,x,E,I,j,M,F):Oe(A,E,I,!0):(K&8&&u(b,""),re&16&&_(Q,b,x,E,I,j,M,F))},Re=(d,p,b,x,E,I,j,M,F)=>{d=d||sn,p=p||sn;const A=d.length,K=p.length,Q=Math.min(A,K);let J;for(J=0;JK?Oe(d,E,I,!0,!1,Q):_(p,b,x,E,I,j,M,F,Q)},$e=(d,p,b,x,E,I,j,M,F)=>{let A=0;const K=p.length;let Q=d.length-1,J=K-1;for(;A<=Q&&A<=J;){const re=d[A],ie=p[A]=F?Pt(p[A]):ot(p[A]);if(qt(re,ie))S(re,ie,b,null,E,I,j,M,F);else break;A++}for(;A<=Q&&A<=J;){const re=d[Q],ie=p[J]=F?Pt(p[J]):ot(p[J]);if(qt(re,ie))S(re,ie,b,null,E,I,j,M,F);else break;Q--,J--}if(A>Q){if(A<=J){const re=J+1,ie=reJ)for(;A<=Q;)Ne(d[A],E,I,!0),A++;else{const re=A,ie=A,ge=new Map;for(A=ie;A<=J;A++){const Ye=p[A]=F?Pt(p[A]):ot(p[A]);Ye.key!=null&&ge.set(Ye.key,A)}let ye,Ie=0;const rt=J-ie+1;let rn=!1,fl=0;const En=new Array(rt);for(A=0;A=rt){Ne(Ye,E,I,!0);continue}let ct;if(Ye.key!=null)ct=ge.get(Ye.key);else for(ye=ie;ye<=J;ye++)if(En[ye-ie]===0&&qt(Ye,p[ye])){ct=ye;break}ct===void 0?Ne(Ye,E,I,!0):(En[ct-ie]=A+1,ct>=fl?fl=ct:rn=!0,S(Ye,p[ct],b,null,E,I,j,M,F),Ie++)}const dl=rn?nu(En):sn;for(ye=dl.length-1,A=rt-1;A>=0;A--){const Ye=ie+A,ct=p[Ye],hl=Ye+1{const{el:I,type:j,transition:M,children:F,shapeFlag:A}=d;if(A&6){ze(d.component.subTree,p,b,x);return}if(A&128){d.suspense.move(p,b,x);return}if(A&64){j.move(d,p,b,q);return}if(j===ve){r(I,p,b);for(let Q=0;QM.enter(I),E);else{const{leave:Q,delayLeave:J,afterLeave:re}=M,ie=()=>r(I,p,b),ge=()=>{Q(I,()=>{ie(),re&&re()})};J?J(I,ie,ge):ge()}else r(I,p,b)},Ne=(d,p,b,x=!1,E=!1)=>{const{type:I,props:j,ref:M,children:F,dynamicChildren:A,shapeFlag:K,patchFlag:Q,dirs:J}=d;if(M!=null&&Cr(M,null,b,d,!0),K&256){p.ctx.deactivate(d);return}const re=K&1&&J,ie=!fn(d);let ge;if(ie&&(ge=j&&j.onVnodeBeforeUnmount)&&Xe(ge,p,d),K&6)at(d.component,b,x);else{if(K&128){d.suspense.unmount(b,x);return}re&&ut(d,null,p,"beforeUnmount"),K&64?d.type.remove(d,p,b,E,q,x):A&&(I!==ve||Q>0&&Q&64)?Oe(A,p,b,!1,!0):(I===ve&&Q&384||!E&&K&16)&&Oe(F,p,b),x&&yt(d)}(ie&&(ge=j&&j.onVnodeUnmounted)||re)&&Ue(()=>{ge&&Xe(ge,p,d),re&&ut(d,null,p,"unmounted")},b)},yt=d=>{const{type:p,el:b,anchor:x,transition:E}=d;if(p===ve){kt(b,x);return}if(p===Mn){y(d);return}const I=()=>{o(b),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(d.shapeFlag&1&&E&&!E.persisted){const{leave:j,delayLeave:M}=E,F=()=>j(b,I);M?M(d.el,I,F):F()}else I()},kt=(d,p)=>{let b;for(;d!==p;)b=h(d),o(d),d=b;o(p)},at=(d,p,b)=>{const{bum:x,scope:E,update:I,subTree:j,um:M}=d;x&&Jr(x),E.stop(),I&&(I.active=!1,Ne(j,d,p,b)),M&&Ue(M,p),Ue(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},Oe=(d,p,b,x=!1,E=!1,I=0)=>{for(let j=I;jd.shapeFlag&6?L(d.component.subTree):d.shapeFlag&128?d.suspense.next():h(d.anchor||d.el);let B=!1;const D=(d,p,b)=>{d==null?p._vnode&&Ne(p._vnode,null,null,!0):S(p._vnode||null,d,p,null,null,null,b),B||(B=!0,wl(),Er(),B=!1),p._vnode=d},q={p:S,um:Ne,m:ze,r:yt,mt:ee,mc:_,pc:z,pbc:C,n:L,o:e};let ae,me;return t&&([ae,me]=t(q)),{render:D,hydrate:ae,createApp:Wc(D,ae)}}function no({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function jt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function wi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ei(e,t,n=!1){const r=e.children,o=t.children;if(Z(r)&&Z(o))for(let l=0;l>1,e[n[i]]0&&(t[r]=n[l-1]),n[l]=r)}}for(l=n.length,s=n[l-1];l-- >0;)n[l]=s,s=t[s];return n}function Si(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Si(t)}const ru=e=>e.__isTeleport,ve=Symbol.for("v-fgt"),pn=Symbol.for("v-txt"),We=Symbol.for("v-cmt"),Mn=Symbol.for("v-stc"),$n=[];let lt=null;function U(e=!1){$n.push(lt=e?null:[])}function ou(){$n.pop(),lt=$n[$n.length-1]||null}let Bn=1;function Ml(e){Bn+=e}function Li(e){return e.dynamicChildren=Bn>0?lt||sn:null,ou(),Bn>0&<&<.push(e),e}function X(e,t,n,r,o,l){return Li(te(e,t,n,r,o,l,!0))}function Se(e,t,n,r,o){return Li(ne(e,t,n,r,o,!0))}function Pr(e){return e?e.__v_isVNode===!0:!1}function qt(e,t){return e.type===t.type&&e.key===t.key}const xi=({key:e})=>e??null,_r=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?xe(e)||He(e)||oe(e)?{i:Pe,r:e,k:t,f:!!n}:e:null);function te(e,t=null,n=null,r=0,o=null,l=e===ve?0:1,s=!1,i=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&xi(t),ref:t&&_r(t),scopeId:ri,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Pe};return i?(Yo(a,n),l&128&&e.normalize(a)):n&&(a.shapeFlag|=xe(n)?8:16),Bn>0&&!s&<&&(a.patchFlag>0||l&6)&&a.patchFlag!==32&<.push(a),a}const ne=lu;function lu(e,t=null,n=null,r=0,o=null,l=!1){if((!e||e===vc)&&(e=We),Pr(e)){const i=$t(e,t,!0);return n&&Yo(i,n),Bn>0&&!l&<&&(i.shapeFlag&6?lt[lt.indexOf(e)]=i:lt.push(i)),i.patchFlag|=-2,i}if(vu(e)&&(e=e.__vccOpts),t){t=su(t);let{class:i,style:a}=t;i&&!xe(i)&&(t.class=Ke(i)),_e(a)&&(Gs(a)&&!Z(a)&&(a=Le({},a)),t.style=Jn(a))}const s=xe(e)?1:bc(e)?128:ru(e)?64:_e(e)?4:oe(e)?2:0;return te(e,t,n,r,o,s,l,!0)}function su(e){return e?Gs(e)||gi(e)?Le({},e):e:null}function $t(e,t,n=!1,r=!1){const{props:o,ref:l,patchFlag:s,children:i,transition:a}=e,c=t?au(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&xi(c),ref:t&&t.ref?n&&l?Z(l)?l.concat(_r(t)):[l,_r(t)]:_r(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&r&&(u.transition=a.clone(u)),u}function Ht(e=" ",t=0){return ne(pn,null,e,t)}function iu(e,t){const n=ne(Mn,null,e);return n.staticCount=t,n}function Te(e="",t=!1){return t?(U(),Se(We,null,e)):ne(We,null,e)}function ot(e){return e==null||typeof e=="boolean"?ne(We):Z(e)?ne(ve,null,e.slice()):typeof e=="object"?Pt(e):ne(pn,null,String(e))}function Pt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function Yo(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Yo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!gi(t)?t._ctx=Pe:o===3&&Pe&&(Pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Pe},n=32):(t=String(t),r&64?(n=16,t=[Ht(t)]):n=8);e.children=t,e.shapeFlag|=n}function au(...e){const t={};for(let n=0;nMe||Pe;let Tr,So;{const e=Os(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),l=>{o.length>1?o.forEach(s=>s(l)):o[0](l)}};Tr=t("__VUE_INSTANCE_SETTERS__",n=>Me=n),So=t("__VUE_SSR_SETTERS__",n=>tr=n)}const er=e=>{const t=Me;return Tr(e),e.scope.on(),()=>{e.scope.off(),Tr(t)}},$l=()=>{Me&&Me.scope.off(),Tr(null)};function Ci(e){return e.vnode.shapeFlag&4}let tr=!1;function du(e,t=!1){t&&So(t);const{props:n,children:r}=e.vnode,o=Ci(e);Kc(e,n,o,t),Yc(e,r);const l=o?hu(e,t):void 0;return t&&So(!1),l}function hu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vc);const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?mu(e):null,l=er(e);Vt();const s=Ot(r,e,0,[e.props,o]);if(Ft(),l(),Ps(s)){if(s.then($l,$l),t)return s.then(i=>{Hl(e,i,t)}).catch(i=>{Xn(i,e,0)});e.asyncDep=s}else Hl(e,s,t)}else Pi(e,t)}function Hl(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:_e(t)&&(e.setupState=Qs(t)),Pi(e,n)}let Nl;function Pi(e,t,n){const r=e.type;if(!e.render){if(!t&&Nl&&!r.render){const o=r.template||qo(e).template;if(o){const{isCustomElement:l,compilerOptions:s}=e.appContext.config,{delimiters:i,compilerOptions:a}=r,c=Le(Le({isCustomElement:l,delimiters:i},s),a);r.render=Nl(o,c)}}e.render=r.render||Ze}{const o=er(e);Vt();try{Fc(e)}finally{Ft(),o()}}}const pu={get(e,t){return qe(e,"get",""),e[t]}};function mu(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,pu),slots:e.slots,emit:e.emit,expose:t}}function Br(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Qs(Xa(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in On)return On[n](e)},has(t,n){return n in t||n in On}}))}function gu(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function vu(e){return oe(e)&&"__vccOpts"in e}const R=(e,t)=>Za(e,t,tr);function de(e,t,n){const r=arguments.length;return r===2?_e(t)&&!Z(t)?Pr(t)?ne(e,null,[t]):ne(e,t):ne(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Pr(n)&&(n=[n]),ne(e,t,n))}const _u="3.4.27";/** +* @vue/runtime-dom v3.4.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const bu="http://www.w3.org/2000/svg",yu="http://www.w3.org/1998/Math/MathML",Tt=typeof document<"u"?document:null,Vl=Tt&&Tt.createElement("template"),ku={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?Tt.createElementNS(bu,e):t==="mathml"?Tt.createElementNS(yu,e):Tt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Tt.createTextNode(e),createComment:e=>Tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,l){const s=n?n.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===l||!(o=o.nextSibling)););else{Vl.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const i=Vl.content;if(r==="svg"||r==="mathml"){const a=i.firstChild;for(;a.firstChild;)i.appendChild(a.firstChild);i.removeChild(a)}t.insertBefore(i,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},St="transition",Sn="animation",zn=Symbol("_vtc"),nr=(e,{slots:t})=>de(xc,wu(e),t);nr.displayName="Transition";const Ti={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};nr.props=Le({},ii,Ti);const Bt=(e,t=[])=>{Z(e)?e.forEach(n=>n(...t)):e&&e(...t)},Fl=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function wu(e){const t={};for(const w in e)w in Ti||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:l=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:a=l,appearActiveClass:c=s,appearToClass:u=i,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,v=Eu(o),S=v&&v[0],P=v&&v[1],{onBeforeEnter:T,onEnter:k,onEnterCancelled:m,onLeave:y,onLeaveCancelled:H,onBeforeAppear:$=T,onAppear:N=k,onAppearCancelled:_=m}=t,G=(w,V,ee)=>{zt(w,V?u:i),zt(w,V?c:s),ee&&ee()},C=(w,V)=>{w._isLeaving=!1,zt(w,f),zt(w,g),zt(w,h),V&&V()},W=w=>(V,ee)=>{const le=w?N:k,O=()=>G(V,w,ee);Bt(le,[V,O]),Dl(()=>{zt(V,w?a:l),Lt(V,w?u:i),Fl(le)||jl(V,r,S,O)})};return Le(t,{onBeforeEnter(w){Bt(T,[w]),Lt(w,l),Lt(w,s)},onBeforeAppear(w){Bt($,[w]),Lt(w,a),Lt(w,c)},onEnter:W(!1),onAppear:W(!0),onLeave(w,V){w._isLeaving=!0;const ee=()=>C(w,V);Lt(w,f),Lt(w,h),xu(),Dl(()=>{w._isLeaving&&(zt(w,f),Lt(w,g),Fl(y)||jl(w,r,P,ee))}),Bt(y,[w,ee])},onEnterCancelled(w){G(w,!1),Bt(m,[w])},onAppearCancelled(w){G(w,!0),Bt(_,[w])},onLeaveCancelled(w){C(w),Bt(H,[w])}})}function Eu(e){if(e==null)return null;if(_e(e))return[ro(e.enter),ro(e.leave)];{const t=ro(e);return[t,t]}}function ro(e){return wa(e)}function Lt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[zn]||(e[zn]=new Set)).add(t)}function zt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[zn];n&&(n.delete(t),n.size||(e[zn]=void 0))}function Dl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Su=0;function jl(e,t,n,r){const o=e._endId=++Su,l=()=>{o===e._endId&&r()};if(n)return setTimeout(l,n);const{type:s,timeout:i,propCount:a}=Lu(e,t);if(!s)return r();const c=s+"end";let u=0;const f=()=>{e.removeEventListener(c,h),l()},h=g=>{g.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[v]||"").split(", "),o=r(`${St}Delay`),l=r(`${St}Duration`),s=Bl(o,l),i=r(`${Sn}Delay`),a=r(`${Sn}Duration`),c=Bl(i,a);let u=null,f=0,h=0;t===St?s>0&&(u=St,f=s,h=l.length):t===Sn?c>0&&(u=Sn,f=c,h=a.length):(f=Math.max(s,c),u=f>0?s>c?St:Sn:null,h=u?u===St?l.length:a.length:0);const g=u===St&&/\b(transform|all)(,|$)/.test(r(`${St}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:g}}function Bl(e,t){for(;e.lengthzl(n)+zl(e[r])))}function zl(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function xu(){return document.body.offsetHeight}function Cu(e,t,n){const r=e[zn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ar=Symbol("_vod"),Ai=Symbol("_vsh"),Rr={beforeMount(e,{value:t},{transition:n}){e[Ar]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Ln(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Ln(e,!0),r.enter(e)):r.leave(e,()=>{Ln(e,!1)}):Ln(e,t))},beforeUnmount(e,{value:t}){Ln(e,t)}};function Ln(e,t){e.style.display=t?e[Ar]:"none",e[Ai]=!t}const Pu=Symbol(""),Tu=/(^|;)\s*display\s*:/;function Au(e,t,n){const r=e.style,o=xe(n);let l=!1;if(n&&!o){if(t)if(xe(t))for(const s of t.split(";")){const i=s.slice(0,s.indexOf(":")).trim();n[i]==null&&br(r,i,"")}else for(const s in t)n[s]==null&&br(r,s,"");for(const s in n)s==="display"&&(l=!0),br(r,s,n[s])}else if(o){if(t!==n){const s=r[Pu];s&&(n+=";"+s),r.cssText=n,l=Tu.test(n)}}else t&&e.removeAttribute("style");Ar in e&&(e[Ar]=l?r.display:"",e[Ai]&&(r.display="none"))}const Ul=/\s*!important$/;function br(e,t,n){if(Z(n))n.forEach(r=>br(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Ru(e,t);Ul.test(n)?e.setProperty(tn(r),n.replace(Ul,""),"important"):e[r]=n}}const Wl=["Webkit","Moz","ms"],oo={};function Ru(e,t){const n=oo[t];if(n)return n;let r=nt(t);if(r!=="filter"&&r in e)return oo[t]=r;r=Yn(r);for(let o=0;olo||(Vu.then(()=>lo=0),lo=Date.now());function Du(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;et(ju(r,n.value),t,5,[r])};return n.value=e,n.attached=Fu(),n}function ju(e,t){if(Z(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Yl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Bu=(e,t,n,r,o,l,s,i,a)=>{const c=o==="svg";t==="class"?Cu(e,r,c):t==="style"?Au(e,n,r):Gn(t)?Oo(t)||Hu(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):zu(e,t,r,c))?Iu(e,t,r,l,s,i,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ou(e,t,r,c))};function zu(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Yl(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Yl(t)&&xe(n)?!1:t in e}const Uu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Wu=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const l=tn(o.key);if(t.some(s=>s===l||Uu[s]===l))return e(o)})},Ku=Le({patchProp:Bu},ku);let so,Jl=!1;function qu(){return so=Jl?so:eu(Ku),Jl=!0,so}const Gu=(...e)=>{const t=qu().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Ju(r);if(o)return n(o,!0,Yu(o))},t};function Yu(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ju(e){return xe(e)?document.querySelector(e):e}var rr=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),Qu=/.md((\?|#).*)?$/,Xu=(e,t="/")=>rr(e)||e.startsWith("/")&&!e.startsWith(t)&&!Qu.test(e),zr=e=>/^(https?:)?\/\//.test(e),Ql=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=t.substring(0,t.length-3)+".html":t.endsWith(".html")||(t=t+".html"),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},Zu="http://.",ef=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return Ql(new URL(`${n}/${e}`,Zu).pathname)}return Ql(e)},tf=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const l=o.split("/").length-r.split("/").length;return l!==0?l:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},nf=/(#|\?)/,Ri=e=>{const[t,...n]=e.split(nf);return{pathname:t,hashAndQueries:n.join("")}},rf=["link","meta","script","style","noscript","template"],of=["title","base"],lf=([e,t,n])=>of.includes(e)?e:rf.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,sf=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=lf(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},af=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Oi=e=>e[e.length-1]==="/"?e.slice(0,-1):e,Ii=e=>e[0]==="/"?e.slice(1):e,Jo=e=>Object.prototype.toString.call(e)==="[object Object]",tt=e=>typeof e=="string";const cf="modulepreload",uf=function(e){return"/qcloud-im-server-sdk-java/"+e},Xl={},Ve=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),s=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));o=Promise.all(n.map(i=>{if(i=uf(i),i in Xl)return;Xl[i]=!0;const a=i.endsWith(".css"),c=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const u=document.createElement("link");if(u.rel=a?"stylesheet":cf,a||(u.as="script",u.crossOrigin=""),u.href=i,s&&u.setAttribute("nonce",s),document.head.appendChild(u),a)return new Promise((f,h)=>{u.addEventListener("load",f),u.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${i}`)))})}))}return o.then(()=>t()).catch(l=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=l,window.dispatchEvent(s),!s.defaultPrevented)throw l})},ff=JSON.parse("{}"),df=Object.fromEntries([["/",{loader:()=>Ve(()=>import("./index.html-BKsdjYkY.js"),[]),meta:{title:"首页"}}],["/guide/",{loader:()=>Ve(()=>import("./index.html-Ckrxg8R_.js"),[]),meta:{title:"介绍"}}],["/guide/account.html",{loader:()=>Ve(()=>import("./account.html-CZSFLA49.js"),[]),meta:{title:"账号管理"}}],["/guide/audit.html",{loader:()=>Ve(()=>import("./audit.html-K88uvqOh.js"),[]),meta:{title:"内容审核"}}],["/guide/group.html",{loader:()=>Ve(()=>import("./group.html-TYPC0dgB.js"),[]),meta:{title:"群组管理"}}],["/guide/member.html",{loader:()=>Ve(()=>import("./member.html-O2w6aVtX.js"),[]),meta:{title:"全员推送"}}],["/guide/message.html",{loader:()=>Ve(()=>import("./message.html-BCdU9V6P.js"),[]),meta:{title:"单聊消息"}}],["/guide/official_account.html",{loader:()=>Ve(()=>import("./official_account.html-nq3_CNXB.js"),[]),meta:{title:"公众号管理"}}],["/guide/operation_1.html",{loader:()=>Ve(()=>import("./operation_1.html-Dsg-LZEv.js"),[]),meta:{title:"全局禁言管理"}}],["/guide/operation_2.html",{loader:()=>Ve(()=>import("./operation_2.html-B7PCwTg0.js"),[]),meta:{title:"运营管理"}}],["/guide/profile.html",{loader:()=>Ve(()=>import("./profile.html-DLb2acmP.js"),[]),meta:{title:"资料管理"}}],["/guide/quickstart.html",{loader:()=>Ve(()=>import("./quickstart.html-DXobG64g.js"),[]),meta:{title:"快速上手"}}],["/guide/recent_contact.html",{loader:()=>Ve(()=>import("./recent_contact.html-CjEIqo_Q.js"),[]),meta:{title:"最近联系人"}}],["/guide/robot.html",{loader:()=>Ve(()=>import("./robot.html-ue2yf_EY.js"),[]),meta:{title:"机器人"}}],["/guide/sns.html",{loader:()=>Ve(()=>import("./sns.html-CNdoMAOn.js"),[]),meta:{title:"关系链管理"}}],["/404.html",{loader:()=>Ve(()=>import("./404.html-VDqY5jAv.js"),[]),meta:{title:""}}]]);/*! + * vue-router v4.3.3 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const ln=typeof document<"u";function hf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const pe=Object.assign;function io(e,t){const n={};for(const r in t){const o=t[r];n[r]=st(o)?o.map(e):e(o)}return n}const Hn=()=>{},st=Array.isArray,Mi=/#/g,pf=/&/g,mf=/\//g,gf=/=/g,vf=/\?/g,$i=/\+/g,_f=/%5B/g,bf=/%5D/g,Hi=/%5E/g,yf=/%60/g,Ni=/%7B/g,kf=/%7C/g,Vi=/%7D/g,wf=/%20/g;function Qo(e){return encodeURI(""+e).replace(kf,"|").replace(_f,"[").replace(bf,"]")}function Ef(e){return Qo(e).replace(Ni,"{").replace(Vi,"}").replace(Hi,"^")}function Lo(e){return Qo(e).replace($i,"%2B").replace(wf,"+").replace(Mi,"%23").replace(pf,"%26").replace(yf,"`").replace(Ni,"{").replace(Vi,"}").replace(Hi,"^")}function Sf(e){return Lo(e).replace(gf,"%3D")}function Lf(e){return Qo(e).replace(Mi,"%23").replace(vf,"%3F")}function xf(e){return e==null?"":Lf(e).replace(mf,"%2F")}function Un(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Cf=/\/$/,Pf=e=>e.replace(Cf,"");function ao(e,t,n="/"){let r,o={},l="",s="";const i=t.indexOf("#");let a=t.indexOf("?");return i=0&&(a=-1),a>-1&&(r=t.slice(0,a),l=t.slice(a+1,i>-1?i:t.length),o=e(l)),i>-1&&(r=r||t.slice(0,i),s=t.slice(i,t.length)),r=Of(r??t,n),{fullPath:r+(l&&"?")+l+s,path:r,query:o,hash:Un(s)}}function Tf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Zl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Af(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&mn(t.matched[r],n.matched[o])&&Fi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function mn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Fi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Rf(e[n],t[n]))return!1;return!0}function Rf(e,t){return st(e)?es(e,t):st(t)?es(t,e):e===t}function es(e,t){return st(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Of(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let l=n.length-1,s,i;for(s=0;s1&&l--;else break;return n.slice(0,l).join("/")+"/"+r.slice(s).join("/")}var Wn;(function(e){e.pop="pop",e.push="push"})(Wn||(Wn={}));var Nn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Nn||(Nn={}));function If(e){if(!e)if(ln){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Pf(e)}const Mf=/^[^#]+#/;function $f(e,t){return e.replace(Mf,"#")+t}function Hf(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Ur=()=>({left:window.scrollX,top:window.scrollY});function Nf(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Hf(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function ts(e,t){return(history.state?history.state.position-t:-1)+e}const xo=new Map;function Vf(e,t){xo.set(e,t)}function Ff(e){const t=xo.get(e);return xo.delete(e),t}let Df=()=>location.protocol+"//"+location.host;function Di(e,t){const{pathname:n,search:r,hash:o}=t,l=e.indexOf("#");if(l>-1){let i=o.includes(e.slice(l))?e.slice(l).length:1,a=o.slice(i);return a[0]!=="/"&&(a="/"+a),Zl(a,"")}return Zl(n,e)+r+o}function jf(e,t,n,r){let o=[],l=[],s=null;const i=({state:h})=>{const g=Di(e,location),v=n.value,S=t.value;let P=0;if(h){if(n.value=g,t.value=h,s&&s===v){s=null;return}P=S?h.position-S.position:0}else r(g);o.forEach(T=>{T(n.value,v,{delta:P,type:Wn.pop,direction:P?P>0?Nn.forward:Nn.back:Nn.unknown})})};function a(){s=n.value}function c(h){o.push(h);const g=()=>{const v=o.indexOf(h);v>-1&&o.splice(v,1)};return l.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(pe({},h.state,{scroll:Ur()}),"")}function f(){for(const h of l)h();l=[],window.removeEventListener("popstate",i),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",i),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:f}}function ns(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Ur():null}}function Bf(e){const{history:t,location:n}=window,r={value:Di(e,n)},o={value:t.state};o.value||l(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Df()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),o.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function s(a,c){const u=pe({},t.state,ns(o.value.back,a,o.value.forward,!0),c,{position:o.value.position});l(a,u,!0),r.value=a}function i(a,c){const u=pe({},o.value,t.state,{forward:a,scroll:Ur()});l(u.current,u,!0);const f=pe({},ns(r.value,a,null),{position:u.position+1},c);l(a,f,!1),r.value=a}return{location:r,state:o,push:i,replace:s}}function zf(e){e=If(e);const t=Bf(e),n=jf(e,t.state,t.location,t.replace);function r(l,s=!0){s||n.pauseListeners(),history.go(l)}const o=pe({location:"",base:e,go:r,createHref:$f.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Uf(e){return typeof e=="string"||e&&typeof e=="object"}function ji(e){return typeof e=="string"||typeof e=="symbol"}const gt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Bi=Symbol("");var rs;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(rs||(rs={}));function gn(e,t){return pe(new Error,{type:e,[Bi]:!0},t)}function mt(e,t){return e instanceof Error&&Bi in e&&(t==null||!!(e.type&t))}const os="[^/]+?",Wf={sensitive:!1,strict:!1,start:!0,end:!0},Kf=/[.+*?^${}()[\]/\\]/g;function qf(e,t){const n=pe({},Wf,t),r=[];let o=n.start?"^":"";const l=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function zi(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Yf={type:0,value:""},Jf=/[a-zA-Z0-9_]/;function Qf(e){if(!e)return[[]];if(e==="/")return[[Yf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const o=[];let l;function s(){l&&o.push(l),l=[]}let i=0,a,c="",u="";function f(){c&&(n===0?l.push({type:0,value:c}):n===1||n===2||n===3?(l.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;i{s(k)}:Hn}function s(u){if(ji(u)){const f=r.get(u);f&&(r.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(s),f.alias.forEach(s))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&r.delete(u.record.name),u.children.forEach(s),u.alias.forEach(s))}}function i(){return n}function a(u){const f=rd(u,n);n.splice(f,0,u),u.record.name&&!is(u)&&r.set(u.record.name,u)}function c(u,f){let h,g={},v,S;if("name"in u&&u.name){if(h=r.get(u.name),!h)throw gn(1,{location:u});S=h.record.name,g=pe(ss(f.params,h.keys.filter(k=>!k.optional).concat(h.parent?h.parent.keys.filter(k=>k.optional):[]).map(k=>k.name)),u.params&&ss(u.params,h.keys.map(k=>k.name))),v=h.stringify(g)}else if(u.path!=null)v=u.path,h=n.find(k=>k.re.test(v)),h&&(g=h.parse(v),S=h.record.name);else{if(h=f.name?r.get(f.name):n.find(k=>k.re.test(f.path)),!h)throw gn(1,{location:u,currentLocation:f});S=h.record.name,g=pe({},f.params,u.params),v=h.stringify(g)}const P=[];let T=h;for(;T;)P.unshift(T.record),T=T.parent;return{name:S,path:v,params:g,matched:P,meta:nd(P)}}return e.forEach(u=>l(u)),{addRoute:l,resolve:c,removeRoute:s,getRoutes:i,getRecordMatcher:o}}function ss(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function ed(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:td(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function td(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function is(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nd(e){return e.reduce((t,n)=>pe(t,n.meta),{})}function as(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function rd(e,t){let n=0,r=t.length;for(;n!==r;){const l=n+r>>1;zi(e,t[l])<0?r=l:n=l+1}const o=od(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function od(e){let t=e;for(;t=t.parent;)if(Ui(t)&&zi(e,t)===0)return t}function Ui({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function ld(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;ol&&Lo(l)):[r&&Lo(r)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+n,l!=null&&(t+="="+l))})}return t}function sd(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=st(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const id=Symbol(""),us=Symbol(""),Wr=Symbol(""),Xo=Symbol(""),Co=Symbol("");function xn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function At(e,t,n,r,o,l=s=>s()){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,a)=>{const c=h=>{h===!1?a(gn(4,{from:n,to:t})):h instanceof Error?a(h):Uf(h)?a(gn(2,{from:t,to:h})):(s&&r.enterCallbacks[o]===s&&typeof h=="function"&&s.push(h),i())},u=l(()=>e.call(r&&r.instances[o],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(h=>a(h))})}function co(e,t,n,r,o=l=>l()){const l=[];for(const s of e)for(const i in s.components){let a=s.components[i];if(!(t!=="beforeRouteEnter"&&!s.instances[i]))if(ad(a)){const u=(a.__vccOpts||a)[t];u&&l.push(At(u,n,r,s,i,o))}else{let c=a();l.push(()=>c.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${s.path}"`));const f=hf(u)?u.default:u;s.components[i]=f;const g=(f.__vccOpts||f)[t];return g&&At(g,n,r,s,i,o)()}))}}return l}function ad(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function fs(e){const t=Be(Wr),n=Be(Xo),r=R(()=>{const a=Xt(e.to);return t.resolve(a)}),o=R(()=>{const{matched:a}=r.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(mn.bind(null,u));if(h>-1)return h;const g=ds(a[c-2]);return c>1&&ds(u)===g&&f[f.length-1].path!==g?f.findIndex(mn.bind(null,a[c-2])):h}),l=R(()=>o.value>-1&&dd(n.params,r.value.params)),s=R(()=>o.value>-1&&o.value===n.matched.length-1&&Fi(n.params,r.value.params));function i(a={}){return fd(a)?t[Xt(e.replace)?"replace":"push"](Xt(e.to)).catch(Hn):Promise.resolve()}return{route:r,href:R(()=>r.value.href),isActive:l,isExactActive:s,navigate:i}}const cd=he({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:fs,setup(e,{slots:t}){const n=Qn(fs(e)),{options:r}=Be(Wr),o=R(()=>({[hs(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[hs(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&t.default(n);return e.custom?l:de("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},l)}}}),ud=cd;function fd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function dd(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!st(o)||o.length!==r.length||r.some((l,s)=>l!==o[s]))return!1}return!0}function ds(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const hs=(e,t,n)=>e??t??n,hd=he({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Be(Co),o=R(()=>e.route||r.value),l=Be(us,0),s=R(()=>{let c=Xt(l);const{matched:u}=o.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),i=R(()=>o.value.matched[s.value]);Zt(us,R(()=>s.value+1)),Zt(id,i),Zt(Co,o);const a=se();return De(()=>[a.value,i.value,e.name],([c,u,f],[h,g,v])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!mn(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(S=>S(c))},{flush:"post"}),()=>{const c=o.value,u=e.name,f=i.value,h=f&&f.components[u];if(!h)return ps(n.default,{Component:h,route:c});const g=f.props[u],v=g?g===!0?c.params:typeof g=="function"?g(c):g:null,P=de(h,pe({},v,t,{onVnodeUnmounted:T=>{T.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return ps(n.default,{Component:P,route:c})||P}}});function ps(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const pd=hd;function md(e){const t=Zf(e.routes,e),n=e.parseQuery||ld,r=e.stringifyQuery||cs,o=e.history,l=xn(),s=xn(),i=xn(),a=_n(gt);let c=gt;ln&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=io.bind(null,L=>""+L),f=io.bind(null,xf),h=io.bind(null,Un);function g(L,B){let D,q;return ji(L)?(D=t.getRecordMatcher(L),q=B):q=L,t.addRoute(q,D)}function v(L){const B=t.getRecordMatcher(L);B&&t.removeRoute(B)}function S(){return t.getRoutes().map(L=>L.record)}function P(L){return!!t.getRecordMatcher(L)}function T(L,B){if(B=pe({},B||a.value),typeof L=="string"){const p=ao(n,L,B.path),b=t.resolve({path:p.path},B),x=o.createHref(p.fullPath);return pe(p,b,{params:h(b.params),hash:Un(p.hash),redirectedFrom:void 0,href:x})}let D;if(L.path!=null)D=pe({},L,{path:ao(n,L.path,B.path).path});else{const p=pe({},L.params);for(const b in p)p[b]==null&&delete p[b];D=pe({},L,{params:f(p)}),B.params=f(B.params)}const q=t.resolve(D,B),ae=L.hash||"";q.params=u(h(q.params));const me=Tf(r,pe({},L,{hash:Ef(ae),path:q.path})),d=o.createHref(me);return pe({fullPath:me,hash:ae,query:r===cs?sd(L.query):L.query||{}},q,{redirectedFrom:void 0,href:d})}function k(L){return typeof L=="string"?ao(n,L,a.value.path):pe({},L)}function m(L,B){if(c!==L)return gn(8,{from:B,to:L})}function y(L){return N(L)}function H(L){return y(pe(k(L),{replace:!0}))}function $(L){const B=L.matched[L.matched.length-1];if(B&&B.redirect){const{redirect:D}=B;let q=typeof D=="function"?D(L):D;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=k(q):{path:q},q.params={}),pe({query:L.query,hash:L.hash,params:q.path!=null?{}:L.params},q)}}function N(L,B){const D=c=T(L),q=a.value,ae=L.state,me=L.force,d=L.replace===!0,p=$(D);if(p)return N(pe(k(p),{state:typeof p=="object"?pe({},ae,p.state):ae,force:me,replace:d}),B||D);const b=D;b.redirectedFrom=B;let x;return!me&&Af(r,q,D)&&(x=gn(16,{to:b,from:q}),ze(q,q,!0,!1)),(x?Promise.resolve(x):C(b,q)).catch(E=>mt(E)?mt(E,2)?E:$e(E):z(E,b,q)).then(E=>{if(E){if(mt(E,2))return N(pe({replace:d},k(E.to),{state:typeof E.to=="object"?pe({},ae,E.to.state):ae,force:me}),B||b)}else E=w(b,q,!0,d,ae);return W(b,q,E),E})}function _(L,B){const D=m(L,B);return D?Promise.reject(D):Promise.resolve()}function G(L){const B=kt.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(L):L()}function C(L,B){let D;const[q,ae,me]=gd(L,B);D=co(q.reverse(),"beforeRouteLeave",L,B);for(const p of q)p.leaveGuards.forEach(b=>{D.push(At(b,L,B))});const d=_.bind(null,L,B);return D.push(d),Oe(D).then(()=>{D=[];for(const p of l.list())D.push(At(p,L,B));return D.push(d),Oe(D)}).then(()=>{D=co(ae,"beforeRouteUpdate",L,B);for(const p of ae)p.updateGuards.forEach(b=>{D.push(At(b,L,B))});return D.push(d),Oe(D)}).then(()=>{D=[];for(const p of me)if(p.beforeEnter)if(st(p.beforeEnter))for(const b of p.beforeEnter)D.push(At(b,L,B));else D.push(At(p.beforeEnter,L,B));return D.push(d),Oe(D)}).then(()=>(L.matched.forEach(p=>p.enterCallbacks={}),D=co(me,"beforeRouteEnter",L,B,G),D.push(d),Oe(D))).then(()=>{D=[];for(const p of s.list())D.push(At(p,L,B));return D.push(d),Oe(D)}).catch(p=>mt(p,8)?p:Promise.reject(p))}function W(L,B,D){i.list().forEach(q=>G(()=>q(L,B,D)))}function w(L,B,D,q,ae){const me=m(L,B);if(me)return me;const d=B===gt,p=ln?history.state:{};D&&(q||d?o.replace(L.fullPath,pe({scroll:d&&p&&p.scroll},ae)):o.push(L.fullPath,ae)),a.value=L,ze(L,B,D,d),$e()}let V;function ee(){V||(V=o.listen((L,B,D)=>{if(!at.listening)return;const q=T(L),ae=$(q);if(ae){N(pe(ae,{replace:!0}),q).catch(Hn);return}c=q;const me=a.value;ln&&Vf(ts(me.fullPath,D.delta),Ur()),C(q,me).catch(d=>mt(d,12)?d:mt(d,2)?(N(d.to,q).then(p=>{mt(p,20)&&!D.delta&&D.type===Wn.pop&&o.go(-1,!1)}).catch(Hn),Promise.reject()):(D.delta&&o.go(-D.delta,!1),z(d,q,me))).then(d=>{d=d||w(q,me,!1),d&&(D.delta&&!mt(d,8)?o.go(-D.delta,!1):D.type===Wn.pop&&mt(d,20)&&o.go(-1,!1)),W(q,me,d)}).catch(Hn)}))}let le=xn(),O=xn(),Y;function z(L,B,D){$e(L);const q=O.list();return q.length?q.forEach(ae=>ae(L,B,D)):console.error(L),Promise.reject(L)}function Re(){return Y&&a.value!==gt?Promise.resolve():new Promise((L,B)=>{le.add([L,B])})}function $e(L){return Y||(Y=!L,ee(),le.list().forEach(([B,D])=>L?D(L):B()),le.reset()),L}function ze(L,B,D,q){const{scrollBehavior:ae}=e;if(!ln||!ae)return Promise.resolve();const me=!D&&Ff(ts(L.fullPath,0))||(q||!D)&&history.state&&history.state.scroll||null;return bn().then(()=>ae(L,B,me)).then(d=>d&&Nf(d)).catch(d=>z(d,L,B))}const Ne=L=>o.go(L);let yt;const kt=new Set,at={currentRoute:a,listening:!0,addRoute:g,removeRoute:v,hasRoute:P,getRoutes:S,resolve:T,options:e,push:y,replace:H,go:Ne,back:()=>Ne(-1),forward:()=>Ne(1),beforeEach:l.add,beforeResolve:s.add,afterEach:i.add,onError:O.add,isReady:Re,install(L){const B=this;L.component("RouterLink",ud),L.component("RouterView",pd),L.config.globalProperties.$router=B,Object.defineProperty(L.config.globalProperties,"$route",{enumerable:!0,get:()=>Xt(a)}),ln&&!yt&&a.value===gt&&(yt=!0,y(o.location).catch(ae=>{}));const D={};for(const ae in gt)Object.defineProperty(D,ae,{get:()=>a.value[ae],enumerable:!0});L.provide(Wr,B),L.provide(Xo,qs(D)),L.provide(Co,a);const q=L.unmount;kt.add(L),L.unmount=function(){kt.delete(L),kt.size<1&&(c=gt,V&&V(),V=null,a.value=gt,yt=!1,Y=!1),q()}}};function Oe(L){return L.reduce((B,D)=>B.then(()=>G(D)),Promise.resolve())}return at}function gd(e,t){const n=[],r=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let s=0;smn(c,i))?r.push(i):n.push(i));const a=e.matched[s];a&&(t.matched.find(c=>mn(c,a))||o.push(a))}return[n,r,o]}function nn(){return Be(Wr)}function bt(){return Be(Xo)}var Zo=Symbol(""),ht=()=>{const e=Be(Zo);if(!e)throw new Error("useClientData() is called without provider.");return e},vd=()=>ht().pageComponent,yn=()=>ht().pageData,pt=()=>ht().pageFrontmatter,_d=()=>ht().pageHead,bd=()=>ht().pageLang,yd=()=>ht().pageLayout,kn=()=>ht().routeLocale,kd=()=>ht().routes,Wi=()=>ht().siteData,el=()=>ht().siteLocaleData,wd=Symbol(""),Po=_n(ff),dn=_n(df),Ki=(e,t)=>{const n=ef(e,t);if(dn.value[n])return n;const r=encodeURI(n);if(dn.value[r])return r;const o=Po.value[n]||Po.value[r];return o||n},Kn=(e,t)=>{const{pathname:n,hashAndQueries:r}=Ri(e),o=Ki(n,t),l=o+r;return dn.value[o]?{...dn.value[o],path:l,notFound:!1}:{...dn.value["/404.html"],path:l,notFound:!0}},Ed=(e,t)=>{const{pathname:n,hashAndQueries:r}=Ri(e);return Ki(n,t)+r},Sd=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},Kr=he({name:"RouteLink",props:{to:{type:String,required:!0},active:Boolean,activeClass:{type:String,default:"route-link-active"}},slots:Object,setup(e,{slots:t}){const n=nn(),r=bt(),o=R(()=>e.to.startsWith("#")||e.to.startsWith("?")?e.to:`/qcloud-im-server-sdk-java/${Ed(e.to,r.path).substring(1)}`);return()=>{var l;return de("a",{class:["route-link",{[e.activeClass]:e.active}],href:o.value,onClick:(s={})=>{Sd(s)&&n.push(e.to).catch()}},(l=t.default)==null?void 0:l.call(t))}}}),wn=he({name:"AutoLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=sc(e,"config"),r=bt(),o=Wi(),l=R(()=>rr(n.value.link)),s=R(()=>n.value.target||(l.value?"_blank":void 0)),i=R(()=>s.value==="_blank"),a=R(()=>!l.value&&!i.value),c=R(()=>n.value.rel||(i.value?"noopener noreferrer":null)),u=R(()=>n.value.ariaLabel??n.value.text),f=R(()=>{if(n.value.exact)return!1;const g=Object.keys(o.value.locales);return g.length?g.every(v=>v!==n.value.link):n.value.link!=="/"}),h=R(()=>a.value?n.value.activeMatch?(n.value.activeMatch instanceof RegExp?n.value.activeMatch:new RegExp(n.value.activeMatch,"u")).test(r.path):f.value?r.path.startsWith(n.value.link):r.path===n.value.link:!1);return()=>{const{before:g,after:v,default:S}=t,P=(S==null?void 0:S(n.value))||[g==null?void 0:g(n.value),n.value.text,v==null?void 0:v(n.value)];return a.value?de(Kr,{class:"auto-link",to:n.value.link,active:h.value,"aria-label":u.value},()=>P):de("a",{class:"auto-link external-link",href:n.value.link,"aria-label":u.value,rel:c.value,target:s.value},P)}}}),tl=he({name:"ClientOnly",setup(e,t){const n=se(!1);return Ge(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),nl=he({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=vd(),n=R(()=>{if(!e.path)return t.value;const r=Kn(e.path);return Cc(()=>r.loader().then(({comp:o})=>o))});return()=>de(n.value)}}),Ld="Layout",xd="en-US",Ut=Qn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const r=tt(t.description)?t.description:n.description,o=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return sf(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||xd,resolvePageLayout:(e,t)=>{const n=tt(e.frontmatter.layout)?e.frontmatter.layout:Ld;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>tf(e,decodeURI(t)),resolveSiteLocaleData:({base:e,locales:t,...n},r)=>{var o;return{...n,...t[r],head:[...((o=t[r])==null?void 0:o.head)??[],...n.head??[]]}}}),Dt=(e={})=>e,rl=e=>zr(e)?e:`/qcloud-im-server-sdk-java/${Ii(e)}`;function qr(e){return $s()?(Ra(e),!0):!1}function dt(e){return typeof e=="function"?e():Xt(e)}const ol=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Cd=Object.prototype.toString,Pd=e=>Cd.call(e)==="[object Object]",To=()=>{};function qi(e,t){function n(...r){return new Promise((o,l)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(l)})}return n}const Gi=e=>e();function Td(e,t={}){let n,r,o=To;const l=i=>{clearTimeout(i),o(),o=To};return i=>{const a=dt(e),c=dt(t.maxWait);return n&&l(n),a<=0||c!==void 0&&c<=0?(r&&(l(r),r=null),Promise.resolve(i())):new Promise((u,f)=>{o=t.rejectOnCancel?f:u,c&&!r&&(r=setTimeout(()=>{n&&l(n),r=null,u(i())},c)),n=setTimeout(()=>{r&&l(r),r=null,u(i())},a)})}}function Ad(e=Gi){const t=se(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...l)=>{t.value&&e(...l)};return{isActive:$r(t),pause:n,resume:r,eventFilter:o}}function Rd(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function Od(e){return jr()}function Id(e,t=200,n={}){return qi(Td(t,n),e)}function Md(e,t,n={}){const{eventFilter:r=Gi,...o}=n;return De(e,qi(r,t),o)}function $d(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:l,pause:s,resume:i,isActive:a}=Ad(r);return{stop:Md(e,t,{...o,eventFilter:l}),pause:s,resume:i,isActive:a}}function ll(e,t=!0,n){Od()?Ge(e,n):t?e():bn(e)}function Hd(e,t,n={}){const{immediate:r=!0}=n,o=se(!1);let l=null;function s(){l&&(clearTimeout(l),l=null)}function i(){o.value=!1,s()}function a(...c){s(),o.value=!0,l=setTimeout(()=>{o.value=!1,l=null,e(...c)},dt(t))}return r&&(o.value=!0,ol&&a()),qr(i),{isPending:$r(o),start:a,stop:i}}function Nd(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=He(e),l=se(e);function s(i){if(arguments.length)return l.value=i,l.value;{const a=dt(n);return l.value=l.value===a?dt(r):a,l.value}}return o?s:[l,s]}function Yt(e){var t;const n=dt(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Nt=ol?window:void 0,Yi=ol?window.navigator:void 0;function it(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=Nt):[t,n,r,o]=e,!t)return To;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const l=[],s=()=>{l.forEach(u=>u()),l.length=0},i=(u,f,h,g)=>(u.addEventListener(f,h,g),()=>u.removeEventListener(f,h,g)),a=De(()=>[Yt(t),dt(o)],([u,f])=>{if(s(),!u)return;const h=Pd(f)?{...f}:f;l.push(...n.flatMap(g=>r.map(v=>i(u,g,v,h))))},{immediate:!0,flush:"post"}),c=()=>{a(),s()};return qr(c),c}function Vd(){const e=se(!1),t=jr();return t&&Ge(()=>{e.value=!0},t),e}function Gr(e){const t=Vd();return R(()=>(t.value,!!e()))}function sl(e,t={}){const{window:n=Nt}=t,r=Gr(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const l=se(!1),s=c=>{l.value=c.matches},i=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",s):o.removeListener(s))},a=wc(()=>{r.value&&(i(),o=n.matchMedia(dt(e)),"addEventListener"in o?o.addEventListener("change",s):o.addListener(s),l.value=o.matches)});return qr(()=>{a(),i(),o=void 0}),l}function ms(e,t={}){const{controls:n=!1,navigator:r=Yi}=t,o=Gr(()=>r&&"permissions"in r);let l;const s=typeof e=="string"?{name:e}:e,i=se(),a=()=>{l&&(i.value=l.state)},c=Rd(async()=>{if(o.value){if(!l)try{l=await r.permissions.query(s),it(l,"change",a),a()}catch{i.value="prompt"}return l}});return c(),n?{state:i,isSupported:o,query:c}:i}function Fd(e={}){const{navigator:t=Yi,read:n=!1,source:r,copiedDuring:o=1500,legacy:l=!1}=e,s=Gr(()=>t&&"clipboard"in t),i=ms("clipboard-read"),a=ms("clipboard-write"),c=R(()=>s.value||l),u=se(""),f=se(!1),h=Hd(()=>f.value=!1,o);function g(){s.value&&T(i.value)?t.clipboard.readText().then(k=>{u.value=k}):u.value=P()}c.value&&n&&it(["copy","cut"],g);async function v(k=dt(r)){c.value&&k!=null&&(s.value&&T(a.value)?await t.clipboard.writeText(k):S(k),u.value=k,f.value=!0,h.start())}function S(k){const m=document.createElement("textarea");m.value=k??"",m.style.position="absolute",m.style.opacity="0",document.body.appendChild(m),m.select(),document.execCommand("copy"),m.remove()}function P(){var k,m,y;return(y=(m=(k=document==null?void 0:document.getSelection)==null?void 0:k.call(document))==null?void 0:m.toString())!=null?y:""}function T(k){return k==="granted"||k==="prompt"}return{isSupported:c,text:u,copied:f,copy:v}}const hr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pr="__vueuse_ssr_handlers__",Dd=jd();function jd(){return pr in hr||(hr[pr]=hr[pr]||{}),hr[pr]}function Bd(e,t){return Dd[e]||t}function zd(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ud={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},gs="vueuse-storage";function Ji(e,t,n,r={}){var o;const{flush:l="pre",deep:s=!0,listenToStorageChanges:i=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:f=Nt,eventFilter:h,onError:g=C=>{console.error(C)},initOnMounted:v}=r,S=(u?_n:se)(typeof t=="function"?t():t);if(!n)try{n=Bd("getDefaultStorage",()=>{var C;return(C=Nt)==null?void 0:C.localStorage})()}catch(C){g(C)}if(!n)return S;const P=dt(t),T=zd(P),k=(o=r.serializer)!=null?o:Ud[T],{pause:m,resume:y}=$d(S,()=>$(S.value),{flush:l,deep:s,eventFilter:h});f&&i&&ll(()=>{it(f,"storage",_),it(f,gs,G),v&&_()}),v||_();function H(C,W){f&&f.dispatchEvent(new CustomEvent(gs,{detail:{key:e,oldValue:C,newValue:W,storageArea:n}}))}function $(C){try{const W=n.getItem(e);if(C==null)H(W,null),n.removeItem(e);else{const w=k.write(C);W!==w&&(n.setItem(e,w),H(W,w))}}catch(W){g(W)}}function N(C){const W=C?C.newValue:n.getItem(e);if(W==null)return a&&P!=null&&n.setItem(e,k.write(P)),P;if(!C&&c){const w=k.read(W);return typeof c=="function"?c(w,P):T==="object"&&!Array.isArray(w)?{...P,...w}:w}else return typeof W!="string"?W:k.read(W)}function _(C){if(!(C&&C.storageArea!==n)){if(C&&C.key==null){S.value=P;return}if(!(C&&C.key!==e)){m();try{(C==null?void 0:C.newValue)!==k.write(S.value)&&(S.value=N(C))}catch(W){g(W)}finally{C?bn(y):y()}}}}function G(C){_(C.detail)}return S}function Wd(e){return sl("(prefers-color-scheme: dark)",e)}function Kd(e,t,n={}){const{window:r=Nt,...o}=n;let l;const s=Gr(()=>r&&"ResizeObserver"in r),i=()=>{l&&(l.disconnect(),l=void 0)},a=R(()=>Array.isArray(e)?e.map(f=>Yt(f)):[Yt(e)]),c=De(a,f=>{if(i(),s.value&&r){l=new ResizeObserver(t);for(const h of f)h&&l.observe(h,o)}},{immediate:!0,flush:"post"}),u=()=>{i(),c()};return qr(u),{isSupported:s,stop:u}}function qd(e,t={width:0,height:0},n={}){const{window:r=Nt,box:o="content-box"}=n,l=R(()=>{var f,h;return(h=(f=Yt(e))==null?void 0:f.namespaceURI)==null?void 0:h.includes("svg")}),s=se(t.width),i=se(t.height),{stop:a}=Kd(e,([f])=>{const h=o==="border-box"?f.borderBoxSize:o==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(r&&l.value){const g=Yt(e);if(g){const v=g.getBoundingClientRect();s.value=v.width,i.value=v.height}}else if(h){const g=Array.isArray(h)?h:[h];s.value=g.reduce((v,{inlineSize:S})=>v+S,0),i.value=g.reduce((v,{blockSize:S})=>v+S,0)}else s.value=f.contentRect.width,i.value=f.contentRect.height},n);ll(()=>{const f=Yt(e);f&&(s.value="offsetWidth"in f?f.offsetWidth:t.width,i.value="offsetHeight"in f?f.offsetHeight:t.height)});const c=De(()=>Yt(e),f=>{s.value=f?t.width:0,i.value=f?t.height:0});function u(){a(),c()}return{width:s,height:i,stop:u}}function Gd(e={}){const{window:t=Nt,behavior:n="auto"}=e;if(!t)return{x:se(0),y:se(0)};const r=se(t.scrollX),o=se(t.scrollY),l=R({get(){return r.value},set(i){scrollTo({left:i,behavior:n})}}),s=R({get(){return o.value},set(i){scrollTo({top:i,behavior:n})}});return it(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:l,y:s}}function Yd(e={}){const{window:t=Nt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:l=!0}=e,s=se(n),i=se(r),a=()=>{t&&(l?(s.value=t.innerWidth,i.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,i.value=t.document.documentElement.clientHeight))};if(a(),ll(a),it("resize",a,{passive:!0}),o){const c=sl("(orientation: portrait)");De(c,()=>a())}return{width:s,height:i}}const vs=async(e,t)=>{const{path:n,query:r}=e.currentRoute.value,{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:r,hash:t}),e.options.scrollBehavior=o},Jd=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=nn();it("scroll",Id(()=>{var v,S;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)f.some(T=>T.hash===P.hash));for(let P=0;P=(((v=T.parentElement)==null?void 0:v.offsetTop)??0)-r,y=!k||s<(((S=k.parentElement)==null?void 0:S.offsetTop)??0)-r;if(!(m&&y))continue;const $=decodeURIComponent(o.currentRoute.value.hash),N=decodeURIComponent(T.hash);if($===N)return;if(u){for(let _=P+1;_{const t=kn();return R(()=>e[t.value]??{})},rh=()=>{const e=kd();return R(()=>Object.keys(e.value))},uo=(e,t)=>{var r;const n=(r=jr())==null?void 0:r.appContext.components;return n?e in n||nt(e)in n||Yn(nt(e))in n:!1},Xi=e=>new Promise(t=>setTimeout(t,e)),Zi=(e,t)=>tt(e)&&e.startsWith(t),oh=Object.keys,ea=e=>Zi(e,"/");var lh={"/":{backToTop:"返回顶部"}};const sh=he({name:"BackToTop",setup(){const e=pt(),t=Qi(lh),n=_n(),{height:r}=qd(n),{height:o}=Yd(),{y:l}=Gd(),s=R(()=>e.value.backToTop!==!1&&l.value>100),i=R(()=>l.value/(r.value-o.value)*100);return Ge(()=>{n.value=document.body}),()=>de(nr,{name:"back-to-top"},()=>s.value?de("button",{type:"button",class:"vp-back-to-top-button","aria-label":t.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[de("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":i.value},de("svg",de("circle",{cx:"26",cy:"26",r:"24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-dasharray":`${Math.PI*i.value*.48} ${Math.PI*(100-i.value)*.48}`}))),de("div",{class:"back-to-top-icon"})]):null)}}),ih=Dt({rootComponents:[sh]}),ah=Object.freeze(Object.defineProperty({__proto__:null,default:ih},Symbol.toStringTag,{value:"Module"})),ch=/language-(shellscript|shell|bash|sh|zsh)/,uh=({delay:e=500,duration:t=2e3,locales:n,selector:r,showInMobile:o,ignoreSelector:l=[],transform:s})=>{const i=sl("(max-width: 419px)"),a=R(()=>!i.value||o),c=Qi(n),u=yn(),f=P=>{var k;if(P.hasAttribute("copy-code-registered"))return;const T=document.createElement("button");T.type="button",T.classList.add("vp-copy-code-button"),T.setAttribute("aria-label",c.value.copy),T.setAttribute("data-copied",c.value.copied),(k=P.parentElement)==null||k.insertBefore(T,P),P.setAttribute("copy-code-registered","")};De(()=>[u.value.path,a.value],async()=>{document.body.classList.toggle("copy-code-disabled",!a.value),a.value&&(await bn(),await Xi(e),document.querySelectorAll(r.join(",")).forEach(f))},{immediate:!0});const{copy:g}=Fd({legacy:!0}),v=new WeakMap,S=(P,T,k)=>{const m=T.cloneNode(!0);l.length&&m.querySelectorAll(l.join(",")).forEach(H=>H.remove()),s&&s(m);let y=m.textContent||"";ch.test(P.className)&&(y=y.replace(/^ *(\$|>) /gm,"")),g(y).then(()=>{if(t<=0)return;k.classList.add("copied"),clearTimeout(v.get(k));const H=setTimeout(()=>{k.classList.remove("copied"),k.blur(),v.delete(k)},t);v.set(k,H)})};it("click",P=>{const T=P.target;if(a.value&&T.matches('div[class*="language-"] > button.vp-copy-code-button')){const k=T.parentElement,m=T.nextElementSibling;if(!k||!m)return;S(k,m,T)}})};var fh={"/":{copy:"复制代码",copied:"已复制"}},dh=['.theme-default-content div[class*="language-"] pre'];const hh=Dt({setup:()=>{uh({selector:dh,locales:fh,duration:2e3,delay:500,showInMobile:!1})}}),ph=Object.freeze(Object.defineProperty({__proto__:null,default:hh},Symbol.toStringTag,{value:"Module"}));/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var Wt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(w){function V(){}w(V,V)},o=function(w){var V=w.target;if(V===G){v();return}m.indexOf(V)!==-1&&S({target:V})},l=function(){if(!(H||!_.original)){var w=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs($-w)>N.scrollOffset&&setTimeout(v,150)}},s=function(w){var V=w.key||w.keyCode;(V==="Escape"||V==="Esc"||V===27)&&v()},i=function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},V=w;if(w.background&&(G.style.background=w.background),w.container&&w.container instanceof Object&&(V.container=Wt({},N.container,w.container)),w.template){var ee=yr(w.template)?w.template:document.querySelector(w.template);V.template=ee}return N=Wt({},N,V),m.forEach(function(le){le.dispatchEvent(on("medium-zoom:update",{detail:{zoom:C}}))}),C},a=function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Wt({},N,w))},c=function(){for(var w=arguments.length,V=Array(w),ee=0;ee0?V.reduce(function(O,Y){return[].concat(O,bs(Y))},[]):m;return le.forEach(function(O){O.classList.remove("medium-zoom-image"),O.dispatchEvent(on("medium-zoom:detach",{detail:{zoom:C}}))}),m=m.filter(function(O){return le.indexOf(O)===-1}),C},f=function(w,V){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return m.forEach(function(le){le.addEventListener("medium-zoom:"+w,V,ee)}),y.push({type:"medium-zoom:"+w,listener:V,options:ee}),C},h=function(w,V){var ee=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return m.forEach(function(le){le.removeEventListener("medium-zoom:"+w,V,ee)}),y=y.filter(function(le){return!(le.type==="medium-zoom:"+w&&le.listener.toString()===V.toString())}),C},g=function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},V=w.target,ee=function(){var O={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Y=void 0,z=void 0;if(N.container)if(N.container instanceof Object)O=Wt({},O,N.container),Y=O.width-O.left-O.right-N.margin*2,z=O.height-O.top-O.bottom-N.margin*2;else{var Re=yr(N.container)?N.container:document.querySelector(N.container),$e=Re.getBoundingClientRect(),ze=$e.width,Ne=$e.height,yt=$e.left,kt=$e.top;O=Wt({},O,{width:ze,height:Ne,left:yt,top:kt})}Y=Y||O.width-N.margin*2,z=z||O.height-N.margin*2;var at=_.zoomedHd||_.original,Oe=_s(at)?Y:at.naturalWidth||Y,L=_s(at)?z:at.naturalHeight||z,B=at.getBoundingClientRect(),D=B.top,q=B.left,ae=B.width,me=B.height,d=Math.min(Math.max(ae,Oe),Y)/ae,p=Math.min(Math.max(me,L),z)/me,b=Math.min(d,p),x=(-q+(Y-ae)/2+N.margin+O.left)/b,E=(-D+(z-me)/2+N.margin+O.top)/b,I="scale("+b+") translate3d("+x+"px, "+E+"px, 0)";_.zoomed.style.transform=I,_.zoomedHd&&(_.zoomedHd.style.transform=I)};return new r(function(le){if(V&&m.indexOf(V)===-1){le(C);return}var O=function ze(){H=!1,_.zoomed.removeEventListener("transitionend",ze),_.original.dispatchEvent(on("medium-zoom:opened",{detail:{zoom:C}})),le(C)};if(_.zoomed){le(C);return}if(V)_.original=V;else if(m.length>0){var Y=m;_.original=Y[0]}else{le(C);return}if(_.original.dispatchEvent(on("medium-zoom:open",{detail:{zoom:C}})),$=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,H=!0,_.zoomed=vh(_.original),document.body.appendChild(G),N.template){var z=yr(N.template)?N.template:document.querySelector(N.template);_.template=document.createElement("div"),_.template.appendChild(z.content.cloneNode(!0)),document.body.appendChild(_.template)}if(_.original.parentElement&&_.original.parentElement.tagName==="PICTURE"&&_.original.currentSrc&&(_.zoomed.src=_.original.currentSrc),document.body.appendChild(_.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),_.original.classList.add("medium-zoom-image--hidden"),_.zoomed.classList.add("medium-zoom-image--opened"),_.zoomed.addEventListener("click",v),_.zoomed.addEventListener("transitionend",O),_.original.getAttribute("data-zoom-src")){_.zoomedHd=_.zoomed.cloneNode(),_.zoomedHd.removeAttribute("srcset"),_.zoomedHd.removeAttribute("sizes"),_.zoomedHd.removeAttribute("loading"),_.zoomedHd.src=_.zoomed.getAttribute("data-zoom-src"),_.zoomedHd.onerror=function(){clearInterval(Re),console.warn("Unable to reach the zoom image target "+_.zoomedHd.src),_.zoomedHd=null,ee()};var Re=setInterval(function(){_.zoomedHd.complete&&(clearInterval(Re),_.zoomedHd.classList.add("medium-zoom-image--opened"),_.zoomedHd.addEventListener("click",v),document.body.appendChild(_.zoomedHd),ee())},10)}else if(_.original.hasAttribute("srcset")){_.zoomedHd=_.zoomed.cloneNode(),_.zoomedHd.removeAttribute("sizes"),_.zoomedHd.removeAttribute("loading");var $e=_.zoomedHd.addEventListener("load",function(){_.zoomedHd.removeEventListener("load",$e),_.zoomedHd.classList.add("medium-zoom-image--opened"),_.zoomedHd.addEventListener("click",v),document.body.appendChild(_.zoomedHd),ee()})}else ee()})},v=function(){return new r(function(w){if(H||!_.original){w(C);return}var V=function ee(){_.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(_.zoomed),_.zoomedHd&&document.body.removeChild(_.zoomedHd),document.body.removeChild(G),_.zoomed.classList.remove("medium-zoom-image--opened"),_.template&&document.body.removeChild(_.template),H=!1,_.zoomed.removeEventListener("transitionend",ee),_.original.dispatchEvent(on("medium-zoom:closed",{detail:{zoom:C}})),_.original=null,_.zoomed=null,_.zoomedHd=null,_.template=null,w(C)};H=!0,document.body.classList.remove("medium-zoom--opened"),_.zoomed.style.transform="",_.zoomedHd&&(_.zoomedHd.style.transform=""),_.template&&(_.template.style.transition="opacity 150ms",_.template.style.opacity=0),_.original.dispatchEvent(on("medium-zoom:close",{detail:{zoom:C}})),_.zoomed.addEventListener("transitionend",V)})},S=function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},V=w.target;return _.original?v():g({target:V})},P=function(){return N},T=function(){return m},k=function(){return _.original},m=[],y=[],H=!1,$=0,N=n,_={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?N=t:(t||typeof t=="string")&&c(t),N=Wt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},N);var G=gh(N.background);document.addEventListener("click",o),document.addEventListener("keyup",s),document.addEventListener("scroll",l),window.addEventListener("resize",v);var C={open:g,close:v,toggle:S,update:i,clone:a,attach:c,detach:u,on:f,off:h,getOptions:P,getImages:T,getZoomedImage:k};return C};function bh(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var yh=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";bh(yh);const kh=Symbol("mediumZoom");var wh={};const Eh=".theme-default-content > img, .theme-default-content :not(a) > img",Sh=wh,Lh=300,xh=Dt({enhance({app:e,router:t}){const n=_h(Sh);n.refresh=(r=Eh)=>{n.detach(),n.attach(r)},e.provide(kh,n),t.afterEach(()=>{Xi(Lh).then(()=>n.refresh())})}}),Ch=Object.freeze(Object.defineProperty({__proto__:null,default:xh},Symbol.toStringTag,{value:"Module"}));/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const ce={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ce.isStarted();e=fo(e,ce.settings.minimum,1),ce.status=e===1?null:e;const n=ce.render(!t),r=n.querySelector(ce.settings.barSelector),o=ce.settings.speed,l=ce.settings.easing;return n.offsetWidth,Ph(s=>{gr(r,{transform:"translate3d("+ys(e)+"%,0,0)",transition:"all "+o+"ms "+l}),e===1?(gr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(()=>{gr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(()=>{ce.remove(),s()},o)},o)):setTimeout(()=>s(),o)}),ce},isStarted:()=>typeof ce.status=="number",start:()=>{ce.status||ce.set(0);const e=()=>{setTimeout(()=>{ce.status&&(ce.trickle(),e())},ce.settings.trickleSpeed)};return ce.settings.trickle&&e(),ce},done:e=>!e&&!ce.status?ce:ce.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ce.status;return t?(typeof e!="number"&&(e=(1-t)*fo(Math.random()*t,.1,.95)),t=fo(t+e,0,.994),ce.set(t)):ce.start()},trickle:()=>ce.inc(Math.random()*ce.settings.trickleRate),render:e=>{if(ce.isRendered())return document.getElementById("nprogress");ks(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ce.settings.template;const n=t.querySelector(ce.settings.barSelector),r=e?"-100":ys(ce.status||0),o=document.querySelector(ce.settings.parent);return gr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&ks(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ws(document.documentElement,"nprogress-busy"),ws(document.querySelector(ce.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Th(e)},isRendered:()=>!!document.getElementById("nprogress")},fo=(e,t,n)=>en?n:e,ys=e=>(-1+e)*100,Ph=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),gr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(s){return s.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(i,a){return a.toUpperCase()})}function r(s){const i=document.body.style;if(s in i)return s;let a=e.length;const c=s.charAt(0).toUpperCase()+s.slice(1);let u;for(;a--;)if(u=e[a]+c,u in i)return u;return s}function o(s){return s=n(s),t[s]??(t[s]=r(s))}function l(s,i,a){i=o(i),s.style[i]=a}return function(s,i){for(const a in i){const c=i[a];c!==void 0&&Object.prototype.hasOwnProperty.call(i,a)&&l(s,a,c)}}}(),ta=(e,t)=>(typeof e=="string"?e:il(e)).indexOf(" "+t+" ")>=0,ks=(e,t)=>{const n=il(e),r=n+t;ta(n,t)||(e.className=r.substring(1))},ws=(e,t)=>{const n=il(e);if(!ta(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},il=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Th=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},Ah=()=>{Ge(()=>{const e=nn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ce.start()}),e.afterEach(n=>{t.add(n.path),ce.done()})})},Rh=Dt({setup(){Ah()}}),Oh=Object.freeze(Object.defineProperty({__proto__:null,default:Rh},Symbol.toStringTag,{value:"Module"})),Ih=JSON.parse(`{"repo":"doocs/qcloud-im-server-sdk-java","logo":"https://avatars.githubusercontent.com/u/43716716?s=200&v=4","open":true,"contributorsText":"贡献者","docsDir":"docs","editLinkText":"编辑","lastUpdatedText":"最近更新时间","locales":{"/":{"tip":"说明","warning":"注意","danger":"警告","selectLanguageName":"English"}},"sidebar":[{"text":"指南","children":["/guide/README.md","/guide/quickstart.md","/guide/account.md","/guide/message.md","/guide/member.md","/guide/profile.md","/guide/sns.md","/guide/recent_contact.md","/guide/group.md","/guide/operation_1.md","/guide/operation_2.md","/guide/robot.md","/guide/audit.md","/guide/official_account.md"]}],"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"editLink":true,"lastUpdated":true,"contributors":true,"notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Mh=se(Ih),na=()=>Mh,ra=Symbol(""),$h=()=>{const e=Be(ra);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Hh=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Nh=Dt({enhance({app:e}){const t=na(),n=e._context.provides[Zo],r=R(()=>Hh(t.value,n.routeLocale.value));e.provide(ra,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Vh=Object.freeze(Object.defineProperty({__proto__:null,default:Nh},Symbol.toStringTag,{value:"Module"})),Fh=()=>na(),Ae=()=>$h(),oa=Symbol(""),al=()=>{const e=Be(oa);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Dh=()=>{const e=Ae(),t=Wd(),n=Ji("vuepress-color-scheme",e.value.colorMode),r=R({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});Zt(oa,r),jh(r)},jh=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Ge(()=>{De(e,t,{immediate:!0})}),Dr(()=>t())};let ho=null,Cn=null;const Bh={wait:()=>ho,pending:()=>{ho=new Promise(e=>Cn=e)},resolve:()=>{Cn==null||Cn(),ho=null,Cn=null}},la=()=>Bh,vn=(e,t)=>{const{notFound:n,meta:r,path:o}=Kn(e,t);return n?{text:o,link:o}:{text:r.title||o,link:o}},Es=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),zh=(e,t)=>{if(t.hash===e)return!0;const n=Es(t.path),r=Es(e);return n===r},sa=(e,t)=>e.link&&zh(e.link,t)?!0:"children"in e?e.children.some(n=>sa(n,t)):!1,ia=e=>!Xu(e)&&!rr(e),aa=e=>!zr(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Uh={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Wh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=aa(e);return n!==null?Uh[n]:null},Kh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const l=Wh({docsRepo:e,editLinkPattern:o});return l?l.replace(/:repo/,zr(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,Ii(`${Oi(n)}/${r}`)):null},hn=(e="",t="")=>ea(t)||rr(t)?t:`${af(e)}${t}`,ca=Symbol("sidebarItems"),cl=()=>{const e=Be(ca);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},qh=()=>{const e=Ae(),t=pt(),n=yn(),r=bt(),o=kn(),l=R(()=>t.value.home?!1:t.value.sidebar??e.value.sidebar??"heading"),s=R(()=>t.value.sidebarDepth??e.value.sidebarDepth??2),i=R(()=>Gh(l.value,s.value,n.value,r.path,o.value));Zt(ca,i)},Gh=(e,t,n,r,o)=>e===!1?[]:e==="heading"?ua(t,n):Array.isArray(e)?fa(e,t,n,r,o):Jo(e)?Jh(e,t,n,r):[],Yh=(e,t)=>({text:t.title,link:t.link,children:ul(e,t.children)}),ul=(e,t)=>e>0?t.map(n=>Yh(e-1,n)):[],ua=(e,t)=>[{text:t.title,children:ul(e,t.headers)}],fa=(e,t,n,r,o="")=>{const l=(s,i)=>{var c;const a=tt(s)?vn(hn(i,s)):tt(s.link)?{...s,link:ia(s.link)?vn(hn(i,s.link)).link:s.link}:s;if("children"in a)return{...a,children:a.children.map(u=>l(u,hn(i,a.prefix)))};if(a.link===r){const u=((c=n.headers[0])==null?void 0:c.level)===1?n.headers[0].children:n.headers;return{...a,children:ul(t,u)}}return a};return e.map(s=>l(s,o))},Jh=(e,t,n,r)=>{const o=oh(e).sort((l,s)=>s.length-l.length);for(const l of o)if(Zi(decodeURI(r),l)){const s=e[l];return s?s==="heading"?ua(t,n):fa(s,t,n,r,l):[]}return console.warn(`${decodeURI(r)} is missing sidebar config.`),[]},Qh=he({__name:"Badge",props:{type:{default:"tip"},text:{default:""},vertical:{default:void 0}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),ke=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};function Xh(e,t,n,r,o,l){return U(),X("span",{class:Ke(["vp-badge",n.type]),style:Jn({verticalAlign:n.vertical})},[we(e.$slots,"default",{},()=>[Ht(Ee(n.text),1)])],6)}const Zh=ke(Qh,[["render",Xh],["__file","Badge.vue"]]),ep=he({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=se([]),r=se(-1),o=Ji("vuepress-code-group",{}),l=R(()=>n.value.map(c=>c.innerText).join(","));Ge(()=>{De(()=>o.value[l.value],(c=-1)=>{r.value!==c&&(r.value=c)},{immediate:!0}),De(r,c=>{o.value[l.value]!==c&&(o.value[l.value]=c)})});const s=(c=r.value)=>{c{c>0?r.value=c-1:r.value=n.value.length-1,n.value[r.value].focus()},a=(c,u)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),r.value=u):c.key==="ArrowRight"?(c.preventDefault(),s(u)):c.key==="ArrowLeft"&&(c.preventDefault(),i(u))};return()=>{var u;const c=(((u=t.default)==null?void 0:u.call(t))||[]).filter(f=>f.type.name==="CodeGroupItem").map(f=>(f.props===null&&(f.props={}),f));return c.length===0?null:(r.value<0||r.value>c.length-1?(r.value=c.findIndex(f=>f.props.active===""||f.props.active===!0),r.value===-1&&(r.value=0)):c.forEach((f,h)=>{f.props.active=h===r.value}),de("div",{class:"code-group"},[de("div",{class:"code-group-nav",role:"tablist"},c.map((f,h)=>{const g=h===r.value;return de("button",{ref:v=>{v&&(n.value[h]=v)},class:{"code-group-nav-tab":!0,active:g},role:"tab",ariaSelected:g,onClick:()=>r.value=h,onKeydown:v=>a(v,h)},f.props.title)})),c]))}}}),tp=he({name:"CodeGroupItem",__name:"CodeGroupItem",props:{title:{},active:{type:Boolean}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function np(e,t,n,r,o,l){return U(),X("div",{class:Ke(["code-group-item",{active:n.active}]),role:"tabpanel"},[we(e.$slots,"default")],2)}const rp=ke(tp,[["render",np],["__file","CodeGroupItem.vue"]]),op=he({__name:"VPHomeFeatures",setup(e,{expose:t}){t();const n=pt(),r=R(()=>n.value.features??[]),o={frontmatter:n,features:r};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),lp={key:0,class:"vp-features"};function sp(e,t,n,r,o,l){return r.features.length?(U(),X("div",lp,[(U(!0),X(ve,null,Mt(r.features,s=>(U(),X("div",{key:s.title,class:"vp-feature"},[te("h2",null,Ee(s.title),1),te("p",null,Ee(s.details),1)]))),128))])):Te("",!0)}const ip=ke(op,[["render",sp],["__file","VPHomeFeatures.vue"]]),ap=he({__name:"VPHomeFooter",setup(e,{expose:t}){t();const n=pt(),r=R(()=>n.value.footer),o=R(()=>n.value.footerHtml),l={frontmatter:n,footer:r,footerHtml:o};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),cp=["innerHTML"],up=["textContent"];function fp(e,t,n,r,o,l){return r.footer?(U(),X(ve,{key:0},[r.footerHtml?(U(),X("div",{key:0,class:"vp-footer",innerHTML:r.footer},null,8,cp)):(U(),X("div",{key:1,class:"vp-footer",textContent:Ee(r.footer)},null,8,up))],64)):Te("",!0)}const dp=ke(ap,[["render",fp],["__file","VPHomeFooter.vue"]]),hp=he({__name:"VPHomeHero",setup(e,{expose:t}){t();const n=pt(),r=el(),o=al(),l=R(()=>o.value&&n.value.heroImageDark!==void 0?n.value.heroImageDark:n.value.heroImage),s=R(()=>n.value.heroAlt||a.value||"hero"),i=R(()=>n.value.heroHeight||280),a=R(()=>n.value.heroText===null?null:n.value.heroText||r.value.title||"Hello"),c=R(()=>n.value.tagline===null?null:n.value.tagline||r.value.description||"Welcome to your VuePress site"),u=R(()=>Array.isArray(n.value.actions)?n.value.actions.map(({text:g,link:v,type:S="primary"})=>({text:g,link:v,type:S})):[]),h={frontmatter:n,siteLocale:r,isDarkMode:o,heroImage:l,heroAlt:s,heroHeight:i,heroText:a,tagline:c,actions:u,HomeHeroImage:()=>{if(!l.value)return null;const g=de("img",{class:"vp-hero-image",src:rl(l.value),alt:s.value,height:i.value});return n.value.heroImageDark===void 0?g:de(tl,()=>g)},get AutoLink(){return wn}};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}}),pp={class:"vp-hero"},mp={key:0,id:"main-title"},gp={key:1,class:"vp-hero-description"},vp={key:2,class:"vp-hero-actions"};function _p(e,t,n,r,o,l){return U(),X("header",pp,[ne(r.HomeHeroImage),r.heroText?(U(),X("h1",mp,Ee(r.heroText),1)):Te("",!0),r.tagline?(U(),X("p",gp,Ee(r.tagline),1)):Te("",!0),r.actions.length?(U(),X("p",vp,[(U(!0),X(ve,null,Mt(r.actions,s=>(U(),Se(r.AutoLink,{key:s.text,class:Ke(["vp-hero-action-button",[s.type]]),config:s},null,8,["class","config"]))),128))])):Te("",!0)])}const bp=ke(hp,[["render",_p],["__file","VPHomeHero.vue"]]),yp=he({__name:"VPHome",setup(e,{expose:t}){t();const n={VPHomeFeatures:ip,VPHomeFooter:dp,VPHomeHero:bp,get Content(){return nl}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),kp={class:"vp-home"},wp={class:"theme-default-content"};function Ep(e,t,n,r,o,l){return U(),X("main",kp,[ne(r.VPHomeHero),ne(r.VPHomeFeatures),te("div",wp,[ne(r.Content)]),ne(r.VPHomeFooter)])}const Sp=ke(yp,[["render",Ep],["__file","VPHome.vue"]]),Lp="719px",xp={mobile:Lp};var qn;(function(e){e.MOBILE="mobile"})(qn||(qn={}));const Cp={[qn.MOBILE]:Number.parseInt(xp.mobile.replace("px",""),10)},da=(e,t)=>{const n=Cp[e];Number.isInteger(n)&&(it("orientationchange",()=>t(n),!1),it("resize",()=>t(n),!1),Ge(()=>{t(n)}))},Pp=he({__name:"VPNavbarBrand",setup(e,{expose:t}){t();const n=kn(),r=el(),o=Ae(),l=al(),s=R(()=>o.value.home||n.value),i=R(()=>r.value.title),a=R(()=>l.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),c=R(()=>o.value.logoAlt??i.value),u=R(()=>i.value.toLocaleUpperCase().trim()===c.value.toLocaleUpperCase().trim()),h={routeLocale:n,siteLocale:r,themeLocale:o,isDarkMode:l,navbarBrandLink:s,navbarBrandTitle:i,navbarBrandLogo:a,navbarBrandLogoAlt:c,navBarLogoAltMatchesTitle:u,NavbarBrandLogo:()=>{if(!a.value)return null;const g=de("img",{class:"vp-site-logo",src:rl(a.value),alt:c.value});return o.value.logoDark===void 0?g:de(tl,()=>g)},get RouteLink(){return Kr}};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}}),Tp=["aria-hidden"];function Ap(e,t,n,r,o,l){return U(),Se(r.RouteLink,{to:r.navbarBrandLink},{default:Ce(()=>[ne(r.NavbarBrandLogo),r.navbarBrandTitle?(U(),X("span",{key:0,class:Ke(["vp-site-name",{"vp-hide-mobile":r.navbarBrandLogo}]),"aria-hidden":r.navBarLogoAltMatchesTitle},Ee(r.navbarBrandTitle),11,Tp)):Te("",!0)]),_:1},8,["to"])}const Rp=ke(Pp,[["render",Ap],["__file","VPNavbarBrand.vue"]]),ha=(e,t="")=>tt(e)?vn(hn(t,e)):"children"in e?{...e,children:e.children.map(n=>ha(n,hn(t,e.prefix)))}:{...e,link:ia(e.link)?vn(hn(t,e.link)).link:e.link},Op=()=>{const e=Ae();return R(()=>(e.value.navbar||[]).map(t=>ha(t)))},Ip=()=>{const e=Ae(),t=R(()=>e.value.repo),n=R(()=>t.value?aa(t.value):null),r=R(()=>t.value&&!zr(t.value)?`https://github.com/${t.value}`:t.value),o=R(()=>r.value?e.value.repoLabel?e.value.repoLabel:n.value===null?"Source":n.value:null);return R(()=>!r.value||!o.value?[]:[{text:o.value,link:r.value}])},Mp=()=>{const e=bt(),t=rh(),n=kn(),r=Wi(),o=el(),l=Fh(),s=Ae();return R(()=>{const i=Object.keys(r.value.locales);if(i.length<2)return[];const a=e.path,c=e.fullPath;return[{text:`${s.value.selectLanguageText}`,ariaLabel:`${s.value.selectLanguageAriaLabel??s.value.selectLanguageText}`,children:i.map(f=>{var T,k;const h=((T=r.value.locales)==null?void 0:T[f])??{},g=((k=l.value.locales)==null?void 0:k[f])??{},v=`${h.lang}`,S=g.selectLanguageName??v;if(v===o.value.lang)return{text:S,activeMatch:".",link:e.fullPath};const P=a.replace(n.value,f);return{text:S,link:t.value.some(m=>m===P)?c.replace(a,P):g.home??f}})}]})},$p=he({__name:"VPDropdownTransition",setup(e,{expose:t}){t();const o={setHeight:l=>{l.style.height=l.scrollHeight+"px"},unsetHeight:l=>{l.style.height=""}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Hp(e,t,n,r,o,l){return U(),Se(nr,{name:"vp-dropdown",onEnter:r.setHeight,onAfterEnter:r.unsetHeight,onBeforeLeave:r.setHeight},{default:Ce(()=>[we(e.$slots,"default")]),_:3})}const pa=ke($p,[["render",Hp],["__file","VPDropdownTransition.vue"]]),Np=he({__name:"VPNavbarDropdown",props:{item:{}},setup(e,{expose:t}){t();const n=e,{item:r}=zo(n),o=bt(),l=se(!1),s=R(()=>r.value.ariaLabel||r.value.text),i=(u,f)=>f[f.length-1]===u,a=u=>{const f=u.detail===0;l.value=f?!l.value:!1};De(()=>o.path,()=>{l.value=!1});const c={props:n,item:r,route:o,open:l,dropdownAriaLabel:s,isLastItemOfArray:i,handleDropdown:a,VPDropdownTransition:pa,get AutoLink(){return wn}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),Vp=["aria-label"],Fp={class:"title"},Dp=te("span",{class:"arrow down"},null,-1),jp=["aria-label"],Bp={class:"title"},zp={class:"vp-navbar-dropdown"},Up={class:"vp-navbar-dropdown-subtitle"},Wp={key:1},Kp={class:"vp-navbar-dropdown-subitem-wrapper"};function qp(e,t,n,r,o,l){return U(),X("div",{class:Ke(["vp-navbar-dropdown-wrapper",{open:r.open}])},[te("button",{class:"vp-navbar-dropdown-title",type:"button","aria-label":r.dropdownAriaLabel,onClick:r.handleDropdown},[te("span",Fp,Ee(r.item.text),1),Dp],8,Vp),te("button",{class:"vp-navbar-dropdown-title-mobile",type:"button","aria-label":r.dropdownAriaLabel,onClick:t[0]||(t[0]=s=>r.open=!r.open)},[te("span",Bp,Ee(r.item.text),1),te("span",{class:Ke(["arrow",r.open?"down":"right"])},null,2)],8,jp),ne(r.VPDropdownTransition,null,{default:Ce(()=>[Lr(te("ul",zp,[(U(!0),X(ve,null,Mt(r.item.children,s=>(U(),X("li",{key:s.text,class:"vp-navbar-dropdown-item"},["children"in s?(U(),X(ve,{key:0},[te("h4",Up,[s.link?(U(),Se(r.AutoLink,{key:0,config:s,onFocusout:i=>r.isLastItemOfArray(s,r.item.children)&&s.children.length===0&&(r.open=!1)},null,8,["config","onFocusout"])):(U(),X("span",Wp,Ee(s.text),1))]),te("ul",Kp,[(U(!0),X(ve,null,Mt(s.children,i=>(U(),X("li",{key:i.link,class:"vp-navbar-dropdown-subitem"},[ne(r.AutoLink,{config:i,onFocusout:a=>r.isLastItemOfArray(i,s.children)&&r.isLastItemOfArray(s,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"])]))),128))])],64)):(U(),Se(r.AutoLink,{key:1,config:s,onFocusout:i=>r.isLastItemOfArray(s,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"]))]))),128))],512),[[Rr,r.open]])]),_:1})],2)}const Gp=ke(Np,[["render",qp],["__file","VPNavbarDropdown.vue"]]),Yp=he({__name:"VPNavbarItems",setup(e,{expose:t}){t();const n=Op(),r=Mp(),o=Ip(),l=se(!1),s=R(()=>Ae().value.navbarLabel??"site navigation"),i=R(()=>[...n.value,...r.value,...o.value]);da(qn.MOBILE,c=>{l.value=window.innerWidth(U(),X("div",{key:s.text,class:"vp-navbar-item"},["children"in s?(U(),Se(r.VPNavbarDropdown,{key:0,class:Ke({mobile:r.isMobile}),item:s},null,8,["class","item"])):(U(),Se(r.AutoLink,{key:1,config:s},null,8,["config"]))]))),128))],8,Jp)):Te("",!0)}const ma=ke(Yp,[["render",Qp],["__file","VPNavbarItems.vue"]]),Xp={},Zp={class:"dark-icon",viewBox:"0 0 32 32"},em=te("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),tm=[em];function nm(e,t){return U(),X("svg",Zp,tm)}const rm=ke(Xp,[["render",nm],["__file","VPDarkIcon.vue"]]),om={},lm={class:"light-icon",viewBox:"0 0 32 32"},sm=iu('',9),im=[sm];function am(e,t){return U(),X("svg",lm,im)}const cm=ke(om,[["render",am],["__file","VPLightIcon.vue"]]),um=he({__name:"VPToggleColorModeButton",setup(e,{expose:t}){t();const n=Ae(),r=al(),l={themeLocale:n,isDarkMode:r,toggleColorMode:()=>{r.value=!r.value},VPDarkIcon:rm,VPLightIcon:cm};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),fm=["title"];function dm(e,t,n,r,o,l){return U(),X("button",{class:"vp-toggle-color-mode-button",title:r.themeLocale.toggleColorMode,onClick:r.toggleColorMode},[Lr(ne(r.VPLightIcon,null,null,512),[[Rr,!r.isDarkMode]]),Lr(ne(r.VPDarkIcon,null,null,512),[[Rr,r.isDarkMode]])],8,fm)}const hm=ke(um,[["render",dm],["__file","VPToggleColorModeButton.vue"]]),pm=he({__name:"VPToggleSidebarButton",emits:["toggle"],setup(e,{expose:t}){t();const r={themeLocale:Ae()};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),mm=["title"],gm=te("div",{class:"icon","aria-hidden":"true"},[te("span"),te("span"),te("span")],-1),vm=[gm];function _m(e,t,n,r,o,l){return U(),X("div",{class:"vp-toggle-sidebar-button",title:r.themeLocale.toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=s=>e.$emit("toggle"))},vm,8,mm)}const bm=ke(pm,[["render",_m],["__file","VPToggleSidebarButton.vue"]]),ym=he({__name:"VPNavbar",emits:["toggle-sidebar"],setup(e,{expose:t}){t();const n=Ae(),r=se(null),o=se(null),l=se(0),s=R(()=>l.value?{maxWidth:l.value+"px"}:{}),i=(c,u)=>{var g,v,S;const f=(S=(v=(g=c==null?void 0:c.ownerDocument)==null?void 0:g.defaultView)==null?void 0:v.getComputedStyle(c,null))==null?void 0:S[u],h=Number.parseInt(f,10);return Number.isNaN(h)?0:h};da(qn.MOBILE,c=>{var f;const u=i(r.value,"paddingLeft")+i(r.value,"paddingRight");window.innerWidthe.$emit("toggle-sidebar"))}),te("span",wm,[ne(r.VPNavbarBrand)],512),te("div",{class:"vp-navbar-items-wrapper",style:Jn(r.linksWrapperStyle)},[we(e.$slots,"before"),ne(r.VPNavbarItems,{class:"vp-hide-mobile"}),we(e.$slots,"after"),r.themeLocale.colorModeSwitch?(U(),Se(r.VPToggleColorModeButton,{key:0})):Te("",!0),ne(s)],4)],512)}const Sm=ke(ym,[["render",Em],["__file","VPNavbar.vue"]]),Lm=()=>{const e=Ae(),t=yn(),n=pt();return R(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})},xm=()=>{const e=Ae(),t=yn(),n=pt();return R(()=>{if(!(n.value.editLink??e.value.editLink??!0))return null;const{repo:o,docsRepo:l=o,docsBranch:s="main",docsDir:i="",editLinkText:a}=e.value;if(!l)return null;const c=Kh({docsRepo:l,docsBranch:s,docsDir:i,filePathRelative:t.value.filePathRelative,editLinkPattern:n.value.editLinkPattern??e.value.editLinkPattern});return c?{text:a??"Edit this page",link:c}:null})},Cm=()=>{const e=Ae(),t=yn(),n=pt();return R(()=>{var l,s;return!(n.value.lastUpdated??e.value.lastUpdated??!0)||!((l=t.value.git)!=null&&l.updatedTime)?null:new Date((s=t.value.git)==null?void 0:s.updatedTime).toLocaleString()})},Pm={},Tm={class:"edit-icon",viewBox:"0 0 1024 1024"},Am=te("g",{fill:"currentColor"},[te("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),te("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})],-1),Rm=[Am];function Om(e,t){return U(),X("svg",Tm,Rm)}const Im=ke(Pm,[["render",Om],["__file","VPEditIcon.vue"]]),Mm=he({__name:"VPPageMeta",setup(e,{expose:t}){t();const n=Ae(),r=xm(),o=Cm(),l=Lm(),s={themeLocale:n,editLink:r,lastUpdated:o,contributors:l,VPEditIcon:Im,get AutoLink(){return wn}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),$m={class:"vp-page-meta"},Hm={key:0,class:"vp-meta-item edit-link"},Nm={class:"vp-meta-item git-info"},Vm={key:0,class:"vp-meta-item last-updated"},Fm={class:"meta-item-label"},Dm={class:"meta-item-info"},jm={key:1,class:"vp-meta-item contributors"},Bm={class:"meta-item-label"},zm={class:"meta-item-info"},Um=["title"];function Wm(e,t,n,r,o,l){const s=Wo("ClientOnly");return U(),X("footer",$m,[r.editLink?(U(),X("div",Hm,[ne(r.AutoLink,{class:"label",config:r.editLink},{before:Ce(()=>[ne(r.VPEditIcon)]),_:1},8,["config"])])):Te("",!0),te("div",Nm,[r.lastUpdated?(U(),X("div",Vm,[te("span",Fm,Ee(r.themeLocale.lastUpdatedText)+": ",1),ne(s,null,{default:Ce(()=>[te("span",Dm,Ee(r.lastUpdated),1)]),_:1})])):Te("",!0),r.contributors&&r.contributors.length?(U(),X("div",jm,[te("span",Bm,Ee(r.themeLocale.contributorsText)+": ",1),te("span",zm,[(U(!0),X(ve,null,Mt(r.contributors,(i,a)=>(U(),X(ve,{key:a},[te("span",{class:"contributor",title:`email: ${i.email}`},Ee(i.name),9,Um),a!==r.contributors.length-1?(U(),X(ve,{key:0},[Ht(", ")],64)):Te("",!0)],64))),128))])])):Te("",!0)])])}const Km=ke(Mm,[["render",Wm],["__file","VPPageMeta.vue"]]),qm=()=>{const e=nn(),t=bt();return n=>{n&&(ea(n)?t.path!==n&&e.push(n):rr(n)?window==null||window.open(n):e.push(encodeURI(n)))}},Ss=(e,t)=>e===!1?!1:tt(e)?vn(e,t):Jo(e)?{...e,link:vn(e.link,t).link}:null,Ao=(e,t,n)=>{const r=e.findIndex(l=>l.link===t);if(r!==-1){const l=e[r+n];return l?l.link?l:"prefix"in l&&!Kn(l.prefix).notFound?{...l,link:l.prefix}:null:null}for(const l of e)if("children"in l){const s=Ao(l.children,t,n);if(s)return s}const o=e.findIndex(l=>"prefix"in l&&l.prefix===t);if(o!==-1){const l=e[o+n];return l?l.link?l:"prefix"in l&&!Kn(l.prefix).notFound?{...l,link:l.prefix}:null:null}return null},Gm=()=>{const e=pt(),t=Ae(),n=cl(),r=bt(),o=R(()=>{const s=Ss(e.value.prev,r.path);return s===!1?null:s??(t.value.prev===!1?null:Ao(n.value,r.path,-1))}),l=R(()=>{const s=Ss(e.value.next,r.path);return s===!1?null:s??(t.value.next===!1?null:Ao(n.value,r.path,1))});return{prevLink:o,nextLink:l}},Ym=he({__name:"VPPageNav",setup(e,{expose:t}){t();const n=Ae(),r=qm(),{prevLink:o,nextLink:l}=Gm(),s=R(()=>Ae().value.pageNavbarLabel??"page navigation");it("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?l.value&&(r(l.value.link),a.preventDefault()):a.key==="ArrowLeft"&&o.value&&(r(o.value.link),a.preventDefault()))});const i={themeLocale:n,navigate:r,prevLink:o,nextLink:l,navbarLabel:s,get AutoLink(){return wn}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Jm=["aria-label"],Qm={class:"hint"},Xm=te("span",{class:"arrow left"},null,-1),Zm={class:"link"},eg={class:"hint"},tg=te("span",{class:"arrow right"},null,-1),ng={class:"link"};function rg(e,t,n,r,o,l){return r.prevLink||r.nextLink?(U(),X("nav",{key:0,class:"vp-page-nav","aria-label":r.navbarLabel},[r.prevLink?(U(),Se(r.AutoLink,{key:0,class:"prev",config:r.prevLink},{default:Ce(()=>[te("div",Qm,[Xm,Ht(" "+Ee(r.themeLocale.prev??"Prev"),1)]),te("div",Zm,[te("span",null,Ee(r.prevLink.text),1)])]),_:1},8,["config"])):Te("",!0),r.nextLink?(U(),Se(r.AutoLink,{key:1,class:"next",config:r.nextLink},{default:Ce(()=>[te("div",eg,[Ht(Ee(r.themeLocale.next??"Next")+" ",1),tg]),te("div",ng,[te("span",null,Ee(r.nextLink.text),1)])]),_:1},8,["config"])):Te("",!0)],8,Jm)):Te("",!0)}const og=ke(Ym,[["render",rg],["__file","VPPageNav.vue"]]),lg=he({__name:"VPPage",setup(e,{expose:t}){t();const n={VPPageMeta:Km,VPPageNav:og,get Content(){return nl}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),sg={class:"vp-page"},ig={class:"theme-default-content"};function ag(e,t,n,r,o,l){return U(),X("main",sg,[we(e.$slots,"top"),te("div",ig,[we(e.$slots,"content-top"),ne(r.Content),we(e.$slots,"content-bottom")]),ne(r.VPPageMeta),ne(r.VPPageNav),we(e.$slots,"bottom")])}const cg=ke(lg,[["render",ag],["__file","VPPage.vue"]]),ug=he({__name:"VPSidebarItem",props:{item:{},depth:{default:0}},setup(e,{expose:t}){t();const n=e,{item:r,depth:o}=zo(n),l=bt(),s=nn(),i=R(()=>"collapsible"in r.value&&r.value.collapsible),a=R(()=>sa(r.value,l)),c=R(()=>({"vp-sidebar-item":!0,"vp-sidebar-heading":o.value===0,active:a.value,collapsible:i.value})),u=R(()=>i.value?a.value:!0),[f,h]=Nd(u.value),g=P=>{i.value&&(P.preventDefault(),h())},v=s.afterEach(P=>{bn(()=>{f.value=u.value})});Fr(()=>{v()});const S={props:n,item:r,depth:o,route:l,router:s,collapsible:i,isActive:a,itemClass:c,isOpenDefault:u,isOpen:f,toggleIsOpen:h,onClick:g,unregisterRouterHook:v,VPDropdownTransition:pa,get AutoLink(){return wn}};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}}),fg={class:"vp-sidebar-children"};function dg(e,t,n,r,o,l){const s=Wo("VPSidebarItem",!0);return U(),X("li",null,[r.item.link?(U(),Se(r.AutoLink,{key:0,class:Ke(r.itemClass),config:r.item},null,8,["class","config"])):(U(),X("p",{key:1,tabindex:"0",class:Ke(r.itemClass),onClick:r.onClick,onKeydown:Wu(r.onClick,["enter"])},[Ht(Ee(r.item.text)+" ",1),r.collapsible?(U(),X("span",{key:0,class:Ke(["arrow",r.isOpen?"down":"right"])},null,2)):Te("",!0)],34)),"children"in r.item&&r.item.children.length?(U(),Se(r.VPDropdownTransition,{key:2},{default:Ce(()=>[Lr(te("ul",fg,[(U(!0),X(ve,null,Mt(r.item.children,i=>(U(),Se(s,{key:`${r.depth}${i.text}${i.link}`,item:i,depth:r.depth+1},null,8,["item","depth"]))),128))],512),[[Rr,r.isOpen]])]),_:1})):Te("",!0)])}const hg=ke(ug,[["render",dg],["__file","VPSidebarItem.vue"]]),pg=he({__name:"VPSidebarItems",setup(e,{expose:t}){t();const n=bt(),r=cl();Ge(()=>{De(()=>n.hash,l=>{const s=document.querySelector(".vp-sidebar");if(!s)return;const i=document.querySelector(`.vp=sidebar a.vp-sidebar-item[href="${n.path}${l}"]`);if(!i)return;const{top:a,height:c}=s.getBoundingClientRect(),{top:u,height:f}=i.getBoundingClientRect();ua+c&&i.scrollIntoView(!1)})});const o={route:n,sidebarItems:r,VPSidebarItem:hg};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),mg={key:0,class:"vp-sidebar-items"};function gg(e,t,n,r,o,l){return r.sidebarItems.length?(U(),X("ul",mg,[(U(!0),X(ve,null,Mt(r.sidebarItems,s=>(U(),Se(r.VPSidebarItem,{key:`${s.text}${s.link}`,item:s},null,8,["item"]))),128))])):Te("",!0)}const vg=ke(pg,[["render",gg],["__file","VPSidebarItems.vue"]]),_g=he({__name:"VPSidebar",setup(e,{expose:t}){t();const n={VPNavbarItems:ma,VPSidebarItems:vg};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),bg={class:"vp-sidebar"};function yg(e,t,n,r,o,l){return U(),X("aside",bg,[ne(r.VPNavbarItems),we(e.$slots,"top"),ne(r.VPSidebarItems),we(e.$slots,"bottom")])}const kg=ke(_g,[["render",yg],["__file","VPSidebar.vue"]]),wg=he({__name:"Layout",setup(e,{expose:t}){t();const n=yn(),r=pt(),o=Ae(),l=R(()=>r.value.navbar!==!1&&o.value.navbar!==!1),s=cl(),i=se(!1),a=m=>{i.value=typeof m=="boolean"?m:!i.value},c={x:0,y:0},u=m=>{c.x=m.changedTouches[0].clientX,c.y=m.changedTouches[0].clientY},f=m=>{const y=m.changedTouches[0].clientX-c.x,H=m.changedTouches[0].clientY-c.y;Math.abs(y)>Math.abs(H)&&Math.abs(y)>40&&(y>0&&c.x<=80?a(!0):a(!1))},h=R(()=>r.value.externalLinkIcon??o.value.externalLinkIcon??!0),g=R(()=>[{"no-navbar":!l.value,"no-sidebar":!s.value.length,"sidebar-open":i.value,"external-link-icon":h.value},r.value.pageClass]);let v;Ge(()=>{v=nn().afterEach(()=>{a(!1)})}),Dr(()=>{v()});const S=la(),P=S.resolve,T=S.pending,k={page:n,frontmatter:r,themeLocale:o,shouldShowNavbar:l,sidebarItems:s,isSidebarOpen:i,toggleSidebar:a,touchStart:c,onTouchStart:u,onTouchEnd:f,enableExternalLinkIcon:h,containerClass:g,get unregisterRouterHook(){return v},set unregisterRouterHook(m){v=m},scrollPromise:S,onBeforeEnter:P,onBeforeLeave:T,VPHome:Sp,VPNavbar:Sm,VPPage:cg,VPSidebar:kg};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}});function Eg(e,t,n,r,o,l){return U(),X("div",{class:Ke(["vp-theme-container",r.containerClass]),onTouchstart:r.onTouchStart,onTouchend:r.onTouchEnd},[we(e.$slots,"navbar",{},()=>[r.shouldShowNavbar?(U(),Se(r.VPNavbar,{key:0,onToggleSidebar:r.toggleSidebar},{before:Ce(()=>[we(e.$slots,"navbar-before")]),after:Ce(()=>[we(e.$slots,"navbar-after")]),_:3})):Te("",!0)]),te("div",{class:"vp-sidebar-mask",onClick:t[0]||(t[0]=s=>r.toggleSidebar(!1))}),we(e.$slots,"sidebar",{},()=>[ne(r.VPSidebar,null,{top:Ce(()=>[we(e.$slots,"sidebar-top")]),bottom:Ce(()=>[we(e.$slots,"sidebar-bottom")]),_:3})]),we(e.$slots,"page",{},()=>[r.frontmatter.home?(U(),Se(r.VPHome,{key:0})):(U(),Se(nr,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:r.onBeforeEnter,onBeforeLeave:r.onBeforeLeave},{default:Ce(()=>[(U(),Se(r.VPPage,{key:r.page.path},{top:Ce(()=>[we(e.$slots,"page-top")]),"content-top":Ce(()=>[we(e.$slots,"page-content-top")]),"content-bottom":Ce(()=>[we(e.$slots,"page-content-bottom")]),bottom:Ce(()=>[we(e.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34)}const Sg=ke(wg,[["render",Eg],["__file","Layout.vue"]]),Lg=he({__name:"NotFound",setup(e,{expose:t}){t();const n=kn(),r=Ae(),o=r.value.notFound??["Not Found"],l=()=>o[Math.floor(Math.random()*o.length)],s=r.value.home??n.value,i=r.value.backToHome??"Back to home",a={routeLocale:n,themeLocale:r,messages:o,getMsg:l,homeLink:s,homeText:i,get RouteLink(){return Kr}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),xg={class:"theme-container"},Cg={class:"page"},Pg={class:"theme-default-content"},Tg=te("h1",null,"404",-1);function Ag(e,t,n,r,o,l){return U(),X("div",xg,[te("main",Cg,[te("div",Pg,[Tg,te("blockquote",null,Ee(r.getMsg()),1),ne(r.RouteLink,{to:r.homeLink},{default:Ce(()=>[Ht(Ee(r.homeText),1)]),_:1},8,["to"])])])])}const Rg=ke(Lg,[["render",Ag],["__file","NotFound.vue"]]),Og=Dt({enhance({app:e,router:t}){uo("Badge")||e.component("Badge",Zh),uo("CodeGroup")||e.component("CodeGroup",ep),uo("CodeGroupItem")||e.component("CodeGroupItem",rp),e.component("VPSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?de(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await la().wait(),n(...r))},setup(){Dh(),qh()},layouts:{Layout:Sg,NotFound:Rg}}),Ig=Object.freeze(Object.defineProperty({__proto__:null,default:Og},Symbol.toStringTag,{value:"Module"})),Mg=e=>e instanceof Element?document.activeElement===e&&(["TEXTAREA","SELECT","INPUT"].includes(e.tagName)||e.hasAttribute("contenteditable")):!1,$g=(e,t)=>t.some(n=>{if(tt(n))return n===e.key;const{key:r,ctrl:o=!1,shift:l=!1,alt:s=!1}=n;return r===e.key&&o===e.ctrlKey&&l===e.shiftKey&&s===e.altKey}),Hg=/[^\x00-\x7F]/,Ng=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),Ls=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),xs=(e,t)=>{const n=t.join(" "),r=Ng(e);if(Hg.test(e))return r.some(s=>n.toLowerCase().indexOf(s)>-1);const o=e.endsWith(" ");return new RegExp(r.map((s,i)=>r.length===i+1&&!o?`(?=.*\\b${Ls(s)})`:`(?=.*\\b${Ls(s)}\\b)`).join("")+".+","gi").test(n)},Vg=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const n=r=>{e.value&&$g(r,t.value)&&!Mg(r.target)&&(r.preventDefault(),e.value.focus())};Ge(()=>{document.addEventListener("keydown",n)}),Fr(()=>{document.removeEventListener("keydown",n)})},Fg=[{title:"介绍",headers:[{level:2,title:"前提条件",slug:"前提条件",link:"#前提条件",children:[]},{level:2,title:"SDK 环境依赖",slug:"sdk-环境依赖",link:"#sdk-环境依赖",children:[]},{level:2,title:"SDK 源码",slug:"sdk-源码",link:"#sdk-源码",children:[]},{level:2,title:"项目贡献者",slug:"项目贡献者",link:"#项目贡献者",children:[]}],path:"/guide/",pathLocale:"/",extraFields:[]},{title:"账号管理",headers:[{level:2,title:"导入单个账号",slug:"导入单个账号",link:"#导入单个账号",children:[]},{level:2,title:"导入多个账号",slug:"导入多个账号",link:"#导入多个账号",children:[]},{level:2,title:"删除账号",slug:"删除账号",link:"#删除账号",children:[]},{level:2,title:"查询账号",slug:"查询账号",link:"#查询账号",children:[]},{level:2,title:"失效账号登录状态",slug:"失效账号登录状态",link:"#失效账号登录状态",children:[]},{level:2,title:"查询账号在线状态",slug:"查询账号在线状态",link:"#查询账号在线状态",children:[]}],path:"/guide/account.html",pathLocale:"/",extraFields:[]},{title:"内容审核",headers:[{level:2,title:"添加敏感词(本地审核)",slug:"添加敏感词-本地审核",link:"#添加敏感词-本地审核",children:[]},{level:2,title:"删除敏感词(本地审核)",slug:"删除敏感词-本地审核",link:"#删除敏感词-本地审核",children:[]},{level:2,title:"获取敏感词(本地审核)",slug:"获取敏感词-本地审核",link:"#获取敏感词-本地审核",children:[]},{level:2,title:"主动审核接口(云端审核)",slug:"主动审核接口-云端审核",link:"#主动审核接口-云端审核",children:[]},{level:2,title:"主动批量审核接口(云端审核)",slug:"主动批量审核接口-云端审核",link:"#主动批量审核接口-云端审核",children:[]},{level:2,title:"获取词库列表(云端审核)",slug:"获取词库列表-云端审核",link:"#获取词库列表-云端审核",children:[]},{level:2,title:"获取敏感词(云端审核)",slug:"获取敏感词-云端审核",link:"#获取敏感词-云端审核",children:[]},{level:2,title:"添加敏感词(云端审核)",slug:"添加敏感词-云端审核",link:"#添加敏感词-云端审核",children:[]},{level:2,title:"删除敏感词(云端审核)",slug:"删除敏感词-云端审核",link:"#删除敏感词-云端审核",children:[]}],path:"/guide/audit.html",pathLocale:"/",extraFields:[]},{title:"群组管理",headers:[{level:2,title:"获取 App 中的所有群组",slug:"获取-app-中的所有群组",link:"#获取-app-中的所有群组",children:[]},{level:2,title:"创建群组",slug:"创建群组",link:"#创建群组",children:[]},{level:2,title:"获取群详细资料",slug:"获取群详细资料",link:"#获取群详细资料",children:[]},{level:2,title:"获取群成员详细资料",slug:"获取群成员详细资料",link:"#获取群成员详细资料",children:[]},{level:2,title:"修改群基础资料",slug:"修改群基础资料",link:"#修改群基础资料",children:[]},{level:2,title:"增加群成员",slug:"增加群成员",link:"#增加群成员",children:[]},{level:2,title:"删除群成员",slug:"删除群成员",link:"#删除群成员",children:[]},{level:2,title:"修改群成员资料",slug:"修改群成员资料",link:"#修改群成员资料",children:[]},{level:2,title:"解散群组",slug:"解散群组",link:"#解散群组",children:[]},{level:2,title:"获取用户所加入的群组",slug:"获取用户所加入的群组",link:"#获取用户所加入的群组",children:[]},{level:2,title:"查询用户在群组中的身份",slug:"查询用户在群组中的身份",link:"#查询用户在群组中的身份",children:[]},{level:2,title:"批量禁言和取消禁言",slug:"批量禁言和取消禁言",link:"#批量禁言和取消禁言",children:[]},{level:2,title:"获取被禁言群成员列表",slug:"获取被禁言群成员列表",link:"#获取被禁言群成员列表",children:[]},{level:2,title:"在群组中发送普通消息",slug:"在群组中发送普通消息",link:"#在群组中发送普通消息",children:[]},{level:2,title:"在群组中发送系统通知",slug:"在群组中发送系统通知",link:"#在群组中发送系统通知",children:[]},{level:2,title:"转让群主",slug:"转让群主",link:"#转让群主",children:[]},{level:2,title:"撤回群消息",slug:"撤回群消息",link:"#撤回群消息",children:[]},{level:2,title:"导入群基础资料",slug:"导入群基础资料",link:"#导入群基础资料",children:[]},{level:2,title:"导入群消息",slug:"导入群消息",link:"#导入群消息",children:[]},{level:2,title:"导入群成员",slug:"导入群成员",link:"#导入群成员",children:[]},{level:2,title:"设置成员未读消息计数",slug:"设置成员未读消息计数",link:"#设置成员未读消息计数",children:[]},{level:2,title:"删除指定用户发送的消息",slug:"删除指定用户发送的消息",link:"#删除指定用户发送的消息",children:[]},{level:2,title:"拉取群历史消息",slug:"拉取群历史消息",link:"#拉取群历史消息",children:[]},{level:2,title:"获取直播群在线人数",slug:"获取直播群在线人数",link:"#获取直播群在线人数",children:[]},{level:2,title:"获取直播群在线列表",slug:"获取直播群在线列表",link:"#获取直播群在线列表",children:[]},{level:2,title:"设置直播群成员标记",slug:"设置直播群成员标记",link:"#设置直播群成员标记",children:[]},{level:2,title:"获取群自定义属性",slug:"获取群自定义属性",link:"#获取群自定义属性",children:[]},{level:2,title:"修改群自定义属性",slug:"修改群自定义属性",link:"#修改群自定义属性",children:[]},{level:2,title:"清空群自定义属性",slug:"清空群自定义属性",link:"#清空群自定义属性",children:[]},{level:2,title:"重置群自定义属性",slug:"重置群自定义属性",link:"#重置群自定义属性",children:[]},{level:2,title:"修改群聊历史消息",slug:"修改群聊历史消息",link:"#修改群聊历史消息",children:[]},{level:2,title:"直播群广播消息",slug:"直播群广播消息",link:"#直播群广播消息",children:[]},{level:2,title:"拉取群消息已读回执信息",slug:"拉取群消息已读回执信息",link:"#拉取群消息已读回执信息",children:[]},{level:2,title:"拉取群消息已读回执详情",slug:"拉取群消息已读回执详情",link:"#拉取群消息已读回执详情",children:[]},{level:2,title:"创建话题",slug:"创建话题",link:"#创建话题",children:[]},{level:2,title:"获取话题资料",slug:"获取话题资料",link:"#获取话题资料",children:[]},{level:2,title:"修改话题资料",slug:"修改话题资料",link:"#修改话题资料",children:[]},{level:2,title:"导入话题基础资料",slug:"导入话题基础资料",link:"#导入话题基础资料",children:[]},{level:2,title:"解散话题",slug:"解散话题",link:"#解散话题",children:[]},{level:2,title:"获取封禁群成员列表",slug:"获取封禁群成员列表",link:"#获取封禁群成员列表",children:[]},{level:2,title:"群成员封禁",slug:"群成员封禁",link:"#群成员封禁",children:[]},{level:2,title:"群成员解封",slug:"群成员解封",link:"#群成员解封",children:[]},{level:2,title:"拉取群消息扩展",slug:"拉取群消息扩展",link:"#拉取群消息扩展",children:[]},{level:2,title:"设置群消息扩展",slug:"设置群消息扩展",link:"#设置群消息扩展",children:[]},{level:2,title:"获取群计数器",slug:"获取群计数器",link:"#获取群计数器",children:[]},{level:2,title:"更新群计数器",slug:"更新群计数器",link:"#更新群计数器",children:[]},{level:2,title:"删除群计数器",slug:"删除群计数器",link:"#删除群计数器",children:[]},{level:2,title:"设置/取消直播群管理员",slug:"设置-取消直播群管理员",link:"#设置-取消直播群管理员",children:[]},{level:2,title:"获取直播群管理员列表",slug:"获取直播群管理员列表",link:"#获取直播群管理员列表",children:[]},{level:2,title:"查询用户是否在直播群内",slug:"查询用户是否在直播群内",link:"#查询用户是否在直播群内",children:[]}],path:"/guide/group.html",pathLocale:"/",extraFields:[]},{title:"全员推送",headers:[{level:2,title:"全员推送",slug:"全员推送-1",link:"#全员推送-1",children:[]},{level:2,title:"设置应用属性名称",slug:"设置应用属性名称",link:"#设置应用属性名称",children:[]},{level:2,title:"获取应用属性名称",slug:"获取应用属性名称",link:"#获取应用属性名称",children:[]},{level:2,title:"获取用户属性",slug:"获取用户属性",link:"#获取用户属性",children:[]},{level:2,title:"设置用户属性",slug:"设置用户属性",link:"#设置用户属性",children:[]},{level:2,title:"删除用户属性",slug:"删除用户属性",link:"#删除用户属性",children:[]},{level:2,title:"获取用户标签",slug:"获取用户标签",link:"#获取用户标签",children:[]},{level:2,title:"添加用户标签",slug:"添加用户标签",link:"#添加用户标签",children:[]},{level:2,title:"删除用户标签",slug:"删除用户标签",link:"#删除用户标签",children:[]},{level:2,title:"删除所有用户标签",slug:"删除所有用户标签",link:"#删除所有用户标签",children:[]}],path:"/guide/member.html",pathLocale:"/",extraFields:[]},{title:"单聊消息",headers:[{level:2,title:"单发单聊消息",slug:"单发单聊消息",link:"#单发单聊消息",children:[]},{level:2,title:"批量发单聊消息",slug:"批量发单聊消息",link:"#批量发单聊消息",children:[]},{level:2,title:"导入单聊消息",slug:"导入单聊消息",link:"#导入单聊消息",children:[]},{level:2,title:"查询单聊消息",slug:"查询单聊消息",link:"#查询单聊消息",children:[]},{level:2,title:"撤回单聊消息",slug:"撤回单聊消息",link:"#撤回单聊消息",children:[]},{level:2,title:"设置单聊消息已读",slug:"设置单聊消息已读",link:"#设置单聊消息已读",children:[]},{level:2,title:"查询单聊未读消息计数",slug:"查询单聊未读消息计数",link:"#查询单聊未读消息计数",children:[]},{level:2,title:"修改单聊历史消息",slug:"修改单聊历史消息",link:"#修改单聊历史消息",children:[]},{level:2,title:"拉取单聊消息扩展",slug:"拉取单聊消息扩展",link:"#拉取单聊消息扩展",children:[]},{level:2,title:"设置单聊消息扩展",slug:"设置单聊消息扩展",link:"#设置单聊消息扩展",children:[]},{level:2,title:"单向删除单聊历史消息",slug:"单向删除单聊历史消息",link:"#单向删除单聊历史消息",children:[]},{level:2,title:"清空群聊历史消息",slug:"清空群聊历史消息",link:"#清空群聊历史消息",children:[]}],path:"/guide/message.html",pathLocale:"/",extraFields:[]},{title:"公众号管理",headers:[{level:2,title:"创建公众号",slug:"创建公众号",link:"#创建公众号",children:[]},{level:2,title:"销毁公众号",slug:"销毁公众号",link:"#销毁公众号",children:[]},{level:2,title:"修改公众号资料",slug:"修改公众号资料",link:"#修改公众号资料",children:[]},{level:2,title:"获取公众号详细资料",slug:"获取公众号详细资料",link:"#获取公众号详细资料",children:[]},{level:2,title:"获取公众号的订阅成员资料",slug:"获取公众号的订阅成员资料",link:"#获取公众号的订阅成员资料",children:[]},{level:2,title:"添加订阅者",slug:"添加订阅者",link:"#添加订阅者",children:[]},{level:2,title:"删除订阅者",slug:"删除订阅者",link:"#删除订阅者",children:[]},{level:2,title:"修改订阅者资料",slug:"修改订阅者资料",link:"#修改订阅者资料",children:[]},{level:2,title:"获取订阅的公众号列表",slug:"获取订阅的公众号列表",link:"#获取订阅的公众号列表",children:[]},{level:2,title:"公众号用户发送广播消息",slug:"公众号用户发送广播消息",link:"#公众号用户发送广播消息",children:[]},{level:2,title:"拉取公众号用户历史消息",slug:"拉取公众号用户历史消息",link:"#拉取公众号用户历史消息",children:[]},{level:2,title:"撤回公众号消息",slug:"撤回公众号消息",link:"#撤回公众号消息",children:[]}],path:"/guide/official_account.html",pathLocale:"/",extraFields:[]},{title:"全局禁言管理",headers:[{level:2,title:"设置全局禁言",slug:"设置全局禁言",link:"#设置全局禁言",children:[]},{level:2,title:"查询全局禁言",slug:"查询全局禁言",link:"#查询全局禁言",children:[]}],path:"/guide/operation_1.html",pathLocale:"/",extraFields:[]},{title:"运营管理",headers:[{level:2,title:"拉取运营数据",slug:"拉取运营数据",link:"#拉取运营数据",children:[]},{level:2,title:"下载最近消息记录",slug:"下载最近消息记录",link:"#下载最近消息记录",children:[]},{level:2,title:"获取服务器 IP 地址",slug:"获取服务器-ip-地址",link:"#获取服务器-ip-地址",children:[]},{level:2,title:"聊天文件封禁",slug:"聊天文件封禁",link:"#聊天文件封禁",children:[]},{level:2,title:"聊天文件解封",slug:"聊天文件解封",link:"#聊天文件解封",children:[]},{level:2,title:"聊天文件签名",slug:"聊天文件签名",link:"#聊天文件签名",children:[]}],path:"/guide/operation_2.html",pathLocale:"/",extraFields:[]},{title:"资料管理",headers:[{level:2,title:"设置资料",slug:"设置资料",link:"#设置资料",children:[]},{level:2,title:"拉取资料",slug:"拉取资料",link:"#拉取资料",children:[]}],path:"/guide/profile.html",pathLocale:"/",extraFields:[]},{title:"快速上手",headers:[{level:2,title:"安装",slug:"安装",link:"#安装",children:[{level:3,title:"Maven",slug:"maven",link:"#maven",children:[]},{level:3,title:"Gradle",slug:"gradle",link:"#gradle",children:[]},{level:3,title:"下载 JAR",slug:"下载-jar",link:"#下载-jar",children:[]}]},{level:2,title:"初始化",slug:"初始化",link:"#初始化",children:[]},{level:2,title:"使用示例",slug:"使用示例",link:"#使用示例",children:[]}],path:"/guide/quickstart.html",pathLocale:"/",extraFields:[]},{title:"最近联系人",headers:[{level:2,title:"拉取会话列表",slug:"拉取会话列表",link:"#拉取会话列表",children:[]},{level:2,title:"删除单个会话",slug:"删除单个会话",link:"#删除单个会话",children:[]},{level:2,title:"创建会话分组数据",slug:"创建会话分组数据",link:"#创建会话分组数据",children:[]},{level:2,title:"更新会话分组数据",slug:"更新会话分组数据",link:"#更新会话分组数据",children:[]},{level:2,title:"删除会话分组数据",slug:"删除会话分组数据",link:"#删除会话分组数据",children:[]},{level:2,title:"创建或更新会话标记数据",slug:"创建或更新会话标记数据",link:"#创建或更新会话标记数据",children:[]},{level:2,title:"搜索会话分组标记",slug:"搜索会话分组标记",link:"#搜索会话分组标记",children:[]},{level:2,title:"拉取会话分组标记数据",slug:"拉取会话分组标记数据",link:"#拉取会话分组标记数据",children:[]}],path:"/guide/recent_contact.html",pathLocale:"/",extraFields:[]},{title:"机器人",headers:[{level:2,title:"创建机器人",slug:"创建机器人",link:"#创建机器人",children:[]},{level:2,title:"删除机器人",slug:"删除机器人",link:"#删除机器人",children:[]},{level:2,title:"拉取所有机器人",slug:"拉取所有机器人",link:"#拉取所有机器人",children:[]}],path:"/guide/robot.html",pathLocale:"/",extraFields:[]},{title:"关系链管理",headers:[{level:2,title:"添加好友",slug:"添加好友",link:"#添加好友",children:[]},{level:2,title:"导入好友",slug:"导入好友",link:"#导入好友",children:[]},{level:2,title:"更新好友",slug:"更新好友",link:"#更新好友",children:[]},{level:2,title:"删除好友",slug:"删除好友",link:"#删除好友",children:[]},{level:2,title:"删除所有好友",slug:"删除所有好友",link:"#删除所有好友",children:[]},{level:2,title:"校验好友",slug:"校验好友",link:"#校验好友",children:[]},{level:2,title:"拉取好友",slug:"拉取好友",link:"#拉取好友",children:[]},{level:2,title:"拉取指定好友",slug:"拉取指定好友",link:"#拉取指定好友",children:[]},{level:2,title:"添加黑名单",slug:"添加黑名单",link:"#添加黑名单",children:[]},{level:2,title:"删除黑名单",slug:"删除黑名单",link:"#删除黑名单",children:[]},{level:2,title:"拉取黑名单",slug:"拉取黑名单",link:"#拉取黑名单",children:[]},{level:2,title:"校验黑名单",slug:"校验黑名单",link:"#校验黑名单",children:[]},{level:2,title:"添加分组",slug:"添加分组",link:"#添加分组",children:[]},{level:2,title:"删除分组",slug:"删除分组",link:"#删除分组",children:[]},{level:2,title:"拉取分组",slug:"拉取分组",link:"#拉取分组",children:[]}],path:"/guide/sns.html",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Dg=se(Fg),jg=()=>Dg,Bg=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:r})=>{const o=R(()=>e.value.filter(l=>l.pathLocale===t.value));return R(()=>{const l=n.value.trim().toLowerCase();if(!l)return[];const s=[],i=(a,c)=>{xs(l,[c.title])&&s.push({link:`${a.path}#${c.slug}`,title:a.title,header:c.title});for(const u of c.children){if(s.length>=r.value)return;i(a,u)}};for(const a of o.value){if(s.length>=r.value)break;if(xs(l,[a.title,...a.extraFields])){s.push({link:a.path,title:a.title});continue}for(const c of a.headers){if(s.length>=r.value)break;i(a,c)}}return s})},zg=e=>{const t=se(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Ug=he({name:"SearchBox",props:{locales:{type:Object,default:()=>({})},hotKeys:{type:Array,default:()=>[]},maxSuggestions:{type:Number,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:r}=zo(e),o=nn(),l=kn(),s=jg(),i=se(null),a=se(!1),c=se(""),u=R(()=>t.value[l.value]??{}),f=Bg({searchIndex:s,routeLocale:l,query:c,maxSuggestions:r}),{focusIndex:h,focusNext:g,focusPrev:v}=zg(f);Vg({input:i,hotKeys:n});const S=R(()=>a.value&&!!f.value.length),P=()=>{S.value&&v()},T=()=>{S.value&&g()},k=m=>{if(!S.value)return;const y=f.value[m];y&&o.push(y.link).then(()=>{c.value="",h.value=0})};return()=>de("form",{class:"search-box",role:"search"},[de("input",{ref:i,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>a.value=!0,onBlur:()=>a.value=!1,onInput:m=>c.value=m.target.value,onKeydown:m=>{switch(m.key){case"ArrowUp":{P();break}case"ArrowDown":{T();break}case"Enter":{m.preventDefault(),k(h.value);break}}}}),S.value&&de("ul",{class:"suggestions",onMouseleave:()=>h.value=-1},f.value.map(({link:m,title:y,header:H},$)=>de("li",{class:["suggestion",{focus:h.value===$}],onMouseenter:()=>h.value=$,onMousedown:()=>k($)},de("a",{href:m,onClick:N=>N.preventDefault()},[de("span",{class:"page-title"},y),H&&de("span",{class:"page-header"},`> ${H}`)]))))])}});var Wg=["s","/"],Kg={};const qg=Kg,Gg=Wg,Yg=5,Jg=Dt({enhance({app:e}){e.component("SearchBox",t=>de(Ug,{locales:qg,hotKeys:Gg,maxSuggestions:Yg,...t}))}}),Qg=Object.freeze(Object.defineProperty({__proto__:null,default:Jg},Symbol.toStringTag,{value:"Module"})),vr=[nh,ah,ph,Ch,Oh,Vh,Ig,Qg].map(e=>e.default).filter(Boolean),Xg=JSON.parse('{"base":"/qcloud-im-server-sdk-java/","lang":"zh-CN","title":"腾讯云 IM 服务端 Java SDK 使用文档","description":"腾讯云 IM 服务端 SDK API 文档 Java 版","head":[["link",{"rel":"icon","href":"https://avatars.githubusercontent.com/u/43716716?s=200&v=4"}]],"locales":{}}');var Tn=_n(Xg),Zg=zf,ev=()=>{const e=md({history:Zg(Oi("/qcloud-im-server-sdk-java/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===gt){const r=Kn(t.fullPath);if(r.path!==t.fullPath)return r.path;const o=await r.loader();t.meta={...r.meta,_pageChunk:o}}else t.path===n.path&&(t.meta=n.meta)}),e},tv=e=>{e.component("ClientOnly",tl),e.component("Content",nl),e.component("RouteLink",Kr)},nv=(e,t,n)=>{const r=R(()=>t.currentRoute.value.path),o=rc((P,T)=>({get(){return P(),t.currentRoute.value.meta._pageChunk},set(k){t.currentRoute.value.meta._pageChunk=k,T()}})),l=R(()=>Ut.resolveLayouts(n)),s=R(()=>Ut.resolveRouteLocale(Tn.value.locales,r.value)),i=R(()=>Ut.resolveSiteLocaleData(Tn.value,s.value)),a=R(()=>o.value.comp),c=R(()=>o.value.data),u=R(()=>c.value.frontmatter),f=R(()=>Ut.resolvePageHeadTitle(c.value,i.value)),h=R(()=>Ut.resolvePageHead(f.value,u.value,i.value)),g=R(()=>Ut.resolvePageLang(c.value,i.value)),v=R(()=>Ut.resolvePageLayout(c.value,l.value)),S={layouts:l,pageData:c,pageComponent:a,pageFrontmatter:u,pageHead:h,pageHeadTitle:f,pageLang:g,pageLayout:v,redirects:Po,routeLocale:s,routePath:r,routes:dn,siteData:Tn,siteLocaleData:i};return e.provide(Zo,S),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>u.value},$head:{get:()=>h.value},$headTitle:{get:()=>f.value},$lang:{get:()=>g.value},$page:{get:()=>c.value},$routeLocale:{get:()=>s.value},$site:{get:()=>Tn.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>rl}}),S},rv=()=>{const e=_d(),t=bd();let n=[];const r=()=>{e.value.forEach(s=>{const i=ov(s);i&&n.push(i)})},o=()=>{const s=[];return e.value.forEach(i=>{const a=lv(i);a&&s.push(a)}),s},l=()=>{document.documentElement.lang=t.value;const s=o();n.forEach((i,a)=>{const c=s.findIndex(u=>i.isEqualNode(u));c===-1?(i.remove(),delete n[a]):s.splice(c,1)}),s.forEach(i=>document.head.appendChild(i)),n=[...n.filter(i=>!!i),...s]};Zt(wd,l),Ge(()=>{r(),De(e,l,{immediate:!1})})},ov=([e,t,n=""])=>{const r=Object.entries(t).map(([i,a])=>tt(a)?`[${i}=${JSON.stringify(a)}]`:a===!0?`[${i}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(i=>i.innerText===n)||null},lv=([e,t,n])=>{if(!tt(e))return null;const r=document.createElement(e);return Jo(t)&&Object.entries(t).forEach(([o,l])=>{tt(l)?r.setAttribute(o,l):l===!0&&r.setAttribute(o,"")}),tt(n)&&r.appendChild(document.createTextNode(n)),r},sv=Gu,iv=async()=>{var n;const e=sv({name:"Vuepress",setup(){var l;rv();for(const s of vr)(l=s.setup)==null||l.call(s);const r=vr.flatMap(({rootComponents:s=[]})=>s.map(i=>de(i))),o=yd();return()=>[de(o.value),r]}}),t=ev();tv(e),nv(e,t,vr);for(const r of vr)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:Tn}));return e.use(t),{app:e,router:t}};iv().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{ke as _,te as a,Ht as b,X as c,iv as createVueApp,ne as d,iu as e,U as o,Wo as r,Ce as w}; diff --git a/assets/audit.html-K88uvqOh.js b/assets/audit.html-K88uvqOh.js new file mode 100644 index 00000000..df0bf095 --- /dev/null +++ b/assets/audit.html-K88uvqOh.js @@ -0,0 +1,77 @@ +import{_ as n,c as s,o as a,e as t}from"./app-DbaUbv7J.js";const p={},e=t(`

内容审核

添加敏感词(本地审核)

开启本地审核后,在 App 后台可以主动调用 REST API 接口,增删改查本地审核相关词库。

使用示例:

LocalAuditWord word = new LocalAuditWord();
+word.setFilterType(AuditFilterType.REPLACE);
+word.setWordType(AuditWordType.SENSITIVE_WORDS);
+word.setKeyword("caonima");
+word.setReplacedContent("****");
+AddLocalAuditKeywordsRequest request = AddLocalAuditKeywordsRequest.builder()
+        .sdkAppId(1400594307)
+        .localAuditWords(Collections.singletonList(word)).build();
+
+AddLocalAuditKeywordsResult result = client.audit.addLocalAuditKeywords(request);
+

删除敏感词(本地审核)

开启本地审核后,在 App 后台可以主动调用 REST API 接口,增删改查本地审核相关词库。

使用示例:

DeleteLocalAuditKeywordsRequest request = new DeleteLocalAuditKeywordsRequest();
+request.setSdkAppId(1400594307);
+LocalAuditWord word = new LocalAuditWord();
+word.setId(1L);
+word.setReplacedContent("****");
+word.setKeyword("caonima");
+word.setWordType(AuditWordType.SENSITIVE_WORDS);
+word.setFilterType(AuditFilterType.REPLACE);
+request.setLocalAuditWords(Collections.singletonList(word));
+
+DeleteLocalAuditKeywordsResult result = client.audit.deleteLocalAuditKeywords(request);
+

获取敏感词(本地审核)

开启本地审核后,在 App 后台可以主动调用 REST API 接口,增删改查本地审核相关词库。

使用示例:

GetLocalAuditKeywordsRequest request = GetLocalAuditKeywordsRequest.builder().keyword("caonima")
+        .filterType(AuditFilterType.REPLACE)
+        .limit(1).offset(0).sdkAppId(1400594307).build();
+
+GetLocalAuditKeywordsResult result = client.audit.getLocalAuditKeywords(request);
+

主动审核接口(云端审核)

开启云端审核后,在 App 后台可以主动调用 REST API 接口,送审音视图文等相关内容,其中图文同步返回机审结果,音视频通过异步回调的形式返回机审结果。

使用示例:

ContentModerationRequest request = ContentModerationRequest.builder().content("122")
+        .contentType(AuditContentType.TEXT)
+        .auditName(AuditNameType.C2C)
+        .build();
+
+ContentModerationResult result = client.audit.contentModeration(request);
+

主动批量审核接口(云端审核)

开启云端审核后,在 App 后台可以主动调用 REST API 接口,批量送审图文等相关内容,音视频审核请查看主动审核接口。

使用示例:

BatchContentModerationRequest request = new BatchContentModerationRequest();
+request.setAuditName(AuditNameType.GROUP);
+AuditContentItem item1 = new AuditContentItem();
+item1.setContent("f*ck uuu");
+item1.setContentId(323245334);
+item1.setContentType(AuditContentType.TEXT);
+AuditContentItem item2 = AuditContentItem.builder()
+        .contentId(435545)
+        .contentType(AuditContentType.TEXT)
+        .content("cnm").build();
+request.setContents(Arrays.asList(item1, item2));
+
+BatchContentModerationResult result = client.audit.batchContentModeration(request);
+

获取词库列表(云端审核)

开启云端审核后,在 App 后台可以主动调用 REST API 接口,增删改查云端审核相关词库。

使用示例:

GetCloudAuditKeyWordsIdsRequest request = GetCloudAuditKeyWordsIdsRequest.builder()
+        .limit(1)
+        .offset(0)
+        .sdkAppId(1400594307)
+        .build();
+
+GetCloudAuditKeywordsIdsResult result = client.audit.getCloudAuditKeywordsIds(request);
+

获取敏感词(云端审核)

开启云端审核后,在 App 后台可以主动调用 REST API 接口,增删改查云端审核相关词库。

使用示例:

GetCloudAuditKeyWordsRequest request = GetCloudAuditKeyWordsRequest.builder()
+        .libId("fd")
+        .limit(1)
+        .offset(0)
+        .sdkAppId(1400594307)
+        .build();
+
+GetCloudAuditKeywordsResult result = client.audit.getCloudAuditKeywords(request);
+

添加敏感词(云端审核)

开启云端审核后,在 App 后台可以主动调用 RESTA PI 接口,增删改查云端审核相关词库。

使用示例:

UserKeyword userKeyword = new UserKeyword();
+userKeyword.setContent("caonima");
+userKeyword.setLabel(ContentModerationLabel.COMPOSITE);
+AddCloudAuditKeywordsRequest request = AddCloudAuditKeywordsRequest.builder()
+        .sdkAppId(1400594307)
+        .libId("fd")
+        .userKeywords(Collections.singletonList(userKeyword))
+        .build();
+
+AddCloudAuditKeywordsResult result = client.audit.addCloudAuditKeywords(request);
+

删除敏感词(云端审核)

开启云端审核后,在 App 后台可以主动调用 REST API 接口,增删改查云端审核相关词库。

使用示例:

DeleteCloudAuditKeywordsRequest request = DeleteCloudAuditKeywordsRequest.builder()
+        .sdkAppId(1400594307)
+        .libId("fd")
+        .keywords(Arrays.asList("caonima", "wtf")).build();
+
+DeleteCloudAuditKeywordsResult result = client.audit.deleteCloudAuditKeywords(request);
+
`,37),c=[e];function o(l,u){return a(),s("div",null,c)}const d=n(p,[["render",o],["__file","audit.html.vue"]]),k=JSON.parse('{"path":"/guide/audit.html","title":"内容审核","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"添加敏感词(本地审核)","slug":"添加敏感词-本地审核","link":"#添加敏感词-本地审核","children":[]},{"level":2,"title":"删除敏感词(本地审核)","slug":"删除敏感词-本地审核","link":"#删除敏感词-本地审核","children":[]},{"level":2,"title":"获取敏感词(本地审核)","slug":"获取敏感词-本地审核","link":"#获取敏感词-本地审核","children":[]},{"level":2,"title":"主动审核接口(云端审核)","slug":"主动审核接口-云端审核","link":"#主动审核接口-云端审核","children":[]},{"level":2,"title":"主动批量审核接口(云端审核)","slug":"主动批量审核接口-云端审核","link":"#主动批量审核接口-云端审核","children":[]},{"level":2,"title":"获取词库列表(云端审核)","slug":"获取词库列表-云端审核","link":"#获取词库列表-云端审核","children":[]},{"level":2,"title":"获取敏感词(云端审核)","slug":"获取敏感词-云端审核","link":"#获取敏感词-云端审核","children":[]},{"level":2,"title":"添加敏感词(云端审核)","slug":"添加敏感词-云端审核","link":"#添加敏感词-云端审核","children":[]},{"level":2,"title":"删除敏感词(云端审核)","slug":"删除敏感词-云端审核","link":"#删除敏感词-云端审核","children":[]}],"git":{"updatedTime":1698719394000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":1},{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":1}]},"filePathRelative":"guide/audit.md"}');export{d as comp,k as data}; diff --git a/assets/create_identifier-DkS_S2BP.png b/assets/create_identifier-DkS_S2BP.png new file mode 100644 index 0000000000000000000000000000000000000000..78be6e951103b5a5c2d39fcdd6d5abdcb3b29b2c GIT binary patch literal 38335 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 t_RBvVeg6K~d4u$$UDYb@==-E群组管理

获取 App 中的所有群组

App 管理员可以通过该接口获取 App 中所有群组的 ID。

说明

即时通信 IM 内置多种群组类型,详情请参见 群组系统

使用示例:

GetAppIdGroupListRequest request = GetAppIdGroupListRequest.builder()
+        .limit(10)
+        .groupType(GroupType.PUBLIC)
+        .next(0)
+        .build();
+
+GetAppIdGroupListResult result = client.group.getAppIdGroupList(request);
+

创建群组

App 管理员可以通过该接口创建群组。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持,用户(包括群主)使用 AVChatroom(直播群)时必须操作 SDK 主动申请进群
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

CreateGroupRequest request = CreateGroupRequest.builder()
+        .type(GroupType.PUBLIC)
+        .name("TestGroup")
+        .ownerAccount("user1")
+        .groupId("MyFirstGroup")
+        .introduction("This is group Introduction")
+        .notification("This is group Notification")
+        .faceUrl("https://avatars.githubusercontent.com/u/43716716?s=200&v=4")
+        .maxMemberCount(500)
+        .applyJoinOption(ApplyJoinOption.FREE_ACCESS)
+        .inviteJoinOption(InviteJoinOption.DISABLE_INVITE)
+        .build();
+
+CreateGroupResult result = client.group.createGroup(request);
+

获取群详细资料

App 管理员可以根据群组 ID 获取群组的详细信息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

List<String> groupIdList = Collections.singletonList("MyFirstGroup");
+GetGroupInfoRequest request = new GetGroupInfoRequest(groupIdList);
+
+GetGroupInfoResult result = client.group.getGroupInfo(request);
+

获取群成员详细资料

App 管理员可以根据群组 ID 获取群组成员的资料。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持,使用 Next 字段分批获取

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

因 Community(社群)人数较多,分页获取方式改用 Next 分批方法。

使用示例:

GetGroupMemberInfoRequest request = GetGroupMemberInfoRequest.builder()
+        .groupId("MyFirstGroup")
+        .limit(100)
+        .offset(0)
+        .build();
+
+GetGroupMemberInfoResult result = client.group.getGroupMemberInfo(request);
+

修改群基础资料

App 管理员可以通过该接口修改指定群组的基础信息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

ModifyGroupBaseInfoRequest request = ModifyGroupBaseInfoRequest.builder()
+        .groupId("MyFirstGroup")
+        .name("groupName")
+        .introduction("my first group")
+        .notification("hello world!")
+        .faceUrl("https://avatars.githubusercontent.com/u/43716716?s=200&v=4")
+        .maxMemberNum(500)
+        .applyJoinOption(ApplyJoinOption.NEED_PERMISSION)
+        .muteAllMember(MuteAllMember.OFF)
+        .build();
+
+ModifyGroupBaseInfoResult result = client.group.modifyGroupBaseInfo(request);
+

增加群成员

App 管理员可以通过该接口向指定的群中添加新成员。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持增加群成员,对此类型群组进行操作时会返回 10007 错误。用户加入此类型群组的唯一方式是用户申请加群。

使用示例:

MemberRequestItem item = new MemberRequestItem("user2");
+List<MemberRequestItem> memberList = Collections.singletonList(item);
+AddGroupMemberRequest request = AddGroupMemberRequest.builder()
+        .groupId("MyFirstGroup")
+        .memberList(memberList)
+        .silence(1)
+        .build();
+
+AddGroupMemberResult result = client.group.addGroupMember(request);
+

删除群成员

App 管理员可以通过该接口删除群成员。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持删除群成员,对这种类型的群组进行操作时会返回 10004 错误。如果管理员希望达到删除群成员的效果,可以通过设置 批量禁言和取消禁言 的方式实现。

使用示例:

List<String> toDelAccount = Collections.singletonList("user2");
+DeleteGroupMemberRequest request = DeleteGroupMemberRequest.builder()
+        .groupId("MyFirstGroup")
+        .memberToDelAccount(toDelAccount)
+        .build();
+
+DeleteGroupMemberResult result = client.group.deleteGroupMember(request);
+

修改群成员资料

App 管理员可以通过该接口修改群成员资料。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不存储群成员资料,所以不能修改成员资料。只能修改管理员和群主的成员资料,修改普通成员资料时会返回 10007 错误。

使用示例:

ModifyGroupMemberInfoRequest request = ModifyGroupMemberInfoRequest.builder()
+        .groupId("MyFirstGroup")
+        .memberAccount("doocs")
+        .nameCard("hello World!")
+        .build();
+
+ModifyGroupMemberInfoResult result = client.group.modifyGroupMemberInfo(request);
+

解散群组

App 管理员通过该接口解散群。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

DestroyGroupRequest request = new DestroyGroupRequest("MyFirstGroup");
+
+DestroyGroupResult result = client.group.destroyGroup(request);
+

获取用户所加入的群组

App 管理员可以通过本接口获取某一用户加入的群信息。默认不获取用户已加入但未激活好友工作群(Work)以及直播群(AVChatRoom)群信息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群),但默认不返回已加入但未激活的此类型群信息
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持,但默认不返回此类型群信息。如果指定拉取 AVChatRoom 类型群信息,获得的群信息可能不完整,AVChatRoom 并不存储所有的群成员资料。
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetJoinedGroupListRequest request = new GetJoinedGroupListRequest("doocs");
+
+GetJoinGroupListResult result = client.group.getJoinGroupList(request);
+

查询用户在群组中的身份

App 管理员可以通过该接口获取一批用户在群内的身份,即“成员角色”。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持该接口,对此类型群组进行操作将返回 10007 错误;但可以通过 获取群组成员详细资料 达到查询“成员角色”的效果。

使用示例:

List<String> userAccount = Collections.singletonList("doocs");
+GetRoleInGroupRequest request = GetRoleInGroupRequest.builder()
+        .groupId("MyFirstGroup")
+        .userAccount(userAccount)
+        .build();
+
+GetRoleInGroupResult result = client.group.getRoleInGroup(request);
+

批量禁言和取消禁言

  • App 管理员禁止指定群组中某些用户在一段时间内发言。
  • App 管理员取消对某些用户的禁言。
  • 被禁言用户退出群组之后再进入同一群组,禁言仍然有效。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

Private(即新版本中的 Work,好友工作群)类型不支持禁言。

使用示例:

List<String> membersAccount = Collections.singletonList("doocs");
+ForbidSendMsgRequest request = ForbidSendMsgRequest.builder()
+        .groupId("MyFirstGroup")
+        .membersAccount(membersAccount)
+        .muteTime(200L)
+        .build();
+
+ForbidSendMsgResult result = client.group.forbidSendMsg(request);
+

获取被禁言群成员列表

App 管理员可以根据群组 ID 获取群组中被禁言的用户列表。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupMutedAccountRequest request = new GetGroupMutedAccountRequest("MyFirstGroup");
+
+GetGroupMutedAccountResult result = client.group.getGroupMutedAccount(request);
+

在群组中发送普通消息

App 管理员可以通过该接口在群组中发送普通消息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("red packet");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+SendGroupMsgRequest request = SendGroupMsgRequest.builder()
+        .groupId("MyFirstGroup")
+        .random(1314)
+        .msgBody(msgBody)
+        .onlineOnlyFlag(OnlineOnlyFlag.YES)
+        .build();
+
+SendGroupMsgResult result = client.group.sendGroupMsg(request);
+

在群组中发送系统通知

App 管理员可以通过该接口在群组中发送系统通知。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持,仅支持面向全员
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

  • 非直播群支持向群组中的一部分指定成员发送系统通知,而 AVChatRoom(直播群)只支持向群组中所有成员发送系统通知。
  • 客户端接收系统通知接口(V2TIMGroupListener.onReceiveRESTCustomData)请参见 AndroidiOS

使用示例:

List<String> toMembersAccount = Collections.singletonList("doocs");
+SendGroupSystemNotificationRequest request = SendGroupSystemNotificationRequest.builder()
+        .groupId("MyFirstGroup")
+        .content("hello world")
+        .toMembersAccount(toMembersAccount)
+        .build();
+
+SendGroupSystemNotificationResult result = client.group.sendGroupSystemNotification(request);
+

转让群主

  • App 管理员可以通过该接口将群主身份转移给他人。
  • 没有群主的群,App 管理员可以通过此接口指定他人作为群主。
  • 新群主必须为群内成员。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持(见说明)
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持转让群主,对该类型的群组进行操作时会返回 10007 错误。

使用示例:

ChangeGroupOwnerRequest request = ChangeGroupOwnerRequest.builder()
+        .groupId("MyFirstGroup")
+        .newOwnerAccount("doocs")
+        .build();
+
+ChangeGroupOwnerResult result = client.group.changeGroupOwner(request);
+

撤回群消息

App 管理员通过该接口撤回指定群组的消息,消息需要在漫游有效期以内。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

List<MsgSeqItem> msgSeqList = Collections.singletonList(new MsgSeqItem(0L));
+GroupMsgRecallRequest request = GroupMsgRecallRequest.builder()
+        .groupId("MyFirstGroup")
+        .msgSeqList(msgSeqList)
+        .build();
+
+GroupMsgRecallResult result = client.group.groupMsgRecall(request);
+

导入群基础资料

App 管理员可以通过该接口导入群组,不会触发回调、不会下发通知; 当 App 需要从其他即时通信系统迁移到即时通信 IM 时,使用该协议导入存量群组数据。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持导入群基础资料,对此类型的群组进行操作时会返回 10007 错误;如果需要达到导入群组基础资料的效果,可以通过 创建群组修改群基础资料 的方式实现。

使用示例:

ImportGroupRequest request = ImportGroupRequest.builder()
+        .type(GroupType.PUBLIC)
+        .name("groupName")
+        .build();
+
+ImportGroupResult result = client.group.importGroup(request);
+

导入群消息

  • 该 API 接口的作用是导入群组的消息,不会触发回调、不会下发通知。
  • 当 App 需要从其他即时通信系统迁移到即时通信 IM 时,使用该协议导入存量群消息数据。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)不支持导入群消息,对此类型的群组进行操作时会返回 10007 错误;因为此类型群组所适用的场景不支持查看入群前的历史消息,所以没有提供这一功能。

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("hello world");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+GroupMsgItem item = GroupMsgItem.builder()
+        .fromAccount("doocs")
+        .sendTime(1628062005)
+        .msgBody(msgBody)
+        .build();
+List<GroupMsgItem> msgList = Collections.singletonList(item);
+ImportGroupMsgRequest request = ImportGroupMsgRequest.builder()
+        .groupId("newGroup")
+        .msgList(msgList)
+        .build();
+
+ImportGroupMsgResult result = client.group.importGroupMsg(request);
+

导入群成员

  • 该 API 接口的作用是导入群组成员,不会触发回调、不会下发通知。
  • 当 App 需要从其他即时通信系统迁移到即时通信 IM 时,使用该协议导入存量群成员数据。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群)所适用的场景一般不需要导入成员,因此不支持导入群成员功能,对此类型的群组进行操作时会返回 10007 错误。

使用示例:

MemberItem item = MemberItem.builder()
+        .memberAccount("doocs")
+        .joinTime(1628062005)
+        .role(MemberRole.ADMIN)
+        .unreadMsgNum(1)
+        .build();
+List<MemberItem> members = Collections.singletonList(item);
+ImportGroupMemberRequest request = ImportGroupMemberRequest.builder()
+        .groupId("groupName")
+        .memberList(members)
+        .build();
+
+ImportGroupMemberResult result = client.group.importGroupMember(request);
+

设置成员未读消息计数

  • App 管理员使用该接口设置群组成员未读消息数,不会触发回调、不会下发通知。
  • 当 App 需要从其他即时通信系统迁移到即时通信 IM 时,使用该协议设置群成员的未读消息计数。

说明

该文档仅限迁移用户使用,线上用户不能使用。

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

ChatRoom 和 AVChatroom(直播群)的客户端不支持未读消息计数,所以对这两种类型的群组成员设置未读消息计数是无效的(但是不会返回错误)。

使用示例:

SetUnreadMsgNumRequest result = SetUnreadMsgNumRequest.builder()
+        .groupId("MyFirstGroup")
+        .memberAccount("doocs")
+        .unreadMsgNum(1)
+        .build();
+
+SetUnreadMsgNumResult result = client.group.setUnreadMsgNum(request);
+

删除指定用户发送的消息

该 API 接口的作用是撤回最近 1000 条消息中指定用户发送的消息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

  • AVChatRoom(直播群)不支持历史消息存储(此处撤回消息指撤回历史消息存储中的消息),对这此类型群组中的用户撤回消息是无效的(但是不会返回错误)。
  • 该接口目前只支持静默撤回,在服务端对该消息打上撤回标记,并不会通知到客户端,只有拉漫游时才知道该消息被撤回。

使用示例:

DeleteGroupMsgBySenderRequest request = DeleteGroupMsgBySenderRequest.builder()
+        .groupId("MyFirstGroup")
+        .senderAccount("doocs")
+        .build();
+
+DeleteGroupMsgBySenderResult result = client.group.deleteGroupMsgBySender(request);
+

拉取群历史消息

App 管理员可以通过该接口拉取群组的历史消息。

背景说明:

  • 即时通信 IM 的群消息是按 Seq 排序的,按照 server 收到群消息的顺序分配 Seq,先发的群消息 Seq 小,后发的 Seq 大。
  • 如果用户想拉取一个群的全量消息,首次拉取时不用填拉取 Seq,Server 会自动返回最新的消息,以后拉取时拉取 Seq 填上次返回的最小 Seq 减 1。
  • 如果返回消息的 IsPlaceMsg 为 1,表示这个 Seq 的消息或者过期、或者存储失败、或者被删除了。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群)
AVChatRoom不支持
Community(社群)支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

AVChatRoom(直播群) 不支持历史消息存储,所以不支持调用此接口。

使用示例:

GroupMsgGetSimpleRequest request = GroupMsgGetSimpleRequest.builder()
+        .groupId("MyFirstGroup")
+        .reqMsgNumber(1)
+        .reqMsgNumber(20)
+        .build();
+
+GroupMsgGetSimpleResult result = client.group.groupMsgGetSimple(request);
+

获取直播群在线人数

App 管理员可以根据群组 ID 获取直播群在线人数。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

注意

  • 在线人数总体更新粒度为 10s。
  • 当群人数大于等于 300 或群内有 Web 端用户的时候,出现群成员上下线或者进退群的时候,由于当前 10s 周期内已经统计了用户在线状态的原因,会在下一个 10s 周期才会统计到剔除状态用户变更的在线人数,所以会出现调用接口 10s - 20s 才会更新的现象。
  • 当群人数小于 300 人且群内没有 Web 端用户的时候,用户进退群会触发即时更新在线人数。

使用示例:

GetOnlineMemberNumRequest request = new GetOnlineMemberNumRequest("MyFirstAVChatRoom");
+
+GetOnlineMemberNumResult result = client.group.getOnlineMemberNum(request);
+

获取直播群在线列表

App 管理员可以根据群组 ID 获取直播群在线列表。

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统。 :::

注意

  • 此功能需 旗舰版套餐,并且已开通“直播群在线成员列表”功能(控制台“群功能配置”)。
  • 在线列表总体更新粒度为 10s。
  • 当直播群中超过 1000 人时,接口仅返回最新进群并且在线的 1000 人。
  • 当群人数大于等于 300 或群内有 Web 端用户的时候,出现群成员上下线或者进退群的时候,由于当前 10s 周期内已经统计了用户在线状态的原因,会在下一个 10s 周期才会统计到剔除状态用户变更的在线人数,所以会出现调用接口 10s - 20s 才会更新的现象。
  • 当群人数小于 300 人且群内没有 Web 端用户的时候,用户进退群会触发即时更新在线人数。

使用示例:

GetMembersRequest request = GetMembersRequest.builder()
+        .groupId("MyFirstGroup")
+        .timestamp(0)
+        .build();
+
+GetMembersResult result = client.group.getMembers(request);
+

设置直播群成员标记

App 管理员和群主可以对直播群成员设置不同的标记以区分不同类型的群成员。该功能需旗舰版,并且在 IM 控制台“群功能配置”中开通“直播群在线成员列表”功能。其他套餐版本调用该 API 将返回失败。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

ModifyGroupUserInfoRequest request = new ModifyGroupUserInfoRequest();
+request.setCommandType(1);
+GroupMemberItem item = new GroupMemberItem();
+item.setMarks(Arrays.asList(1001, 1002));
+item.setMemberAccount("test1");
+request.setMemberList(Collections.singletonList(item));
+request.setGroupId("MyFirstGroup");
+
+ModifyGroupUserInfoResult result = client.group.modifyGroupUserInfo(request);
+

获取群自定义属性

App 管理员可以通过该接口获取群自定义属性。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupAttrRequest request = new GetGroupAttrRequest("MyFirstGroup");
+
+GetGroupAttrResult result = client.group.getGroupAttr(request);
+

修改群自定义属性

App 管理员可以通过该接口修改群自定义属性。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GroupAttr groupAttr = new GroupAttr();
+groupAttr.setKey("isOpen");
+groupAttr.setValue("yes");
+List<GroupAttr> groupAttrs = Collections.singletonList(groupAttr);
+ModifyGroupAttrRequest request = ModifyGroupAttrRequest.builder()
+        .groupId("MyFirstGroup")
+        .groupAttrs(groupAttrs)
+        .build();
+
+ModifyGroupAttrResult result = client.group.modifyGroupAttr(request);
+

清空群自定义属性

App 管理员可以通过该接口清空群自定义属性。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持
Community不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

ClearGroupAttrRequest request = new ClearGroupAttrRequest("MyFirstGroup");
+
+ClearGroupAttrResult result = client.group.clearGroupAttr(request);
+

重置群自定义属性

App 管理员可以通过该接口重置群自定义属性。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持
Public支持
ChatRoom支持
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

SetGroupAttrRequest request = new SetGroupAttrRequest();
+request.setGroupId("MyFirstGroup");
+GroupAttr groupAttr = new GroupAttr();
+groupAttr.setKey("isOpen");
+groupAttr.setValue("yes");
+List<GroupAttr> groupAttrs = Collections.singletonList(groupAttr);
+request.setGroupAttrs(groupAttrs);
+
+SetGroupAttrResult result = client.group.setGroupAttr(request);
+

修改群聊历史消息

  • 管理员修改群聊历史消息
  • 可以单独修改消息中的 MsgBody 或 CloudCustomData 字段,也可以同时修改这两个字段。以请求中指定的字段值覆盖历史消息对应的字段。
  • 不支持修改直播群的历史消息

注意

使用该接口修改消息后,被修改的消息不能恢复,请谨慎调用该接口。

使用示例:

ModifyGroupMsgRequest request = new ModifyGroupMsgRequest();
+request.setGroupId("MyFirstGroup");
+request.setMsgSeq(123L);
+TIMTextMsgElement msg = new TIMTextMsgElement("hello world");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+request.setMsgBody(msgBody);
+request.setMsgBody(msgBody);
+
+ModifyGroupMsgResult result = client.group.modifyGroupMsg(request);
+

直播群广播消息

App 管理员可以通过该接口向所有直播群下发广播消息。

注意

直播群广播消息功能支持需要终端 SDK 6.5.2803 增强版及以上版本、Web SDK v2.21.0 及以上版本,需 购买旗舰版套餐包 并在 控制台>群功能配置>群功能配置>直播群广播消息 打开开关后方可使用。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群))
AVChatRoom支持,发给所有直播群
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

SendBroadcastMsgRequest request = new SendBroadcastMsgRequest();
+request.setFromAccount("test1");
+TIMTextMsgElement msg = new TIMTextMsgElement("hello world");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+request.setMsgBody(msgBody);
+request.setRandom(1223L);
+
+SendBroadcastMsgResult result = client.group.sendBroadcastMsg(request);
+

拉取群消息已读回执信息

App 管理员可以通过该接口拉取群消息已读回执信息。

注意

该功能仅对旗舰版客户开放,需 购买旗舰版套餐包 并在 控制台>登录与消息>群消息已读回执 打开开关后方可使用。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群))
AVChatRoom不支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupMsgReceiptRequest request = new GetGroupMsgReceiptRequest();
+request.setGroupId("MyFirstGroup");
+MsgSeqItem seqItem = new MsgSeqItem();
+seqItem.setMsgSeq(123L);
+request.setMsgSeqList(Collections.singletonList(seqItem));
+
+GetGroupMsgReceiptResult result = client.group.getGroupMsgReceipt(request);
+

拉取群消息已读回执详情

App 管理员可以通过该接口拉取群消息已读或未读成员列表。

注意

该功能仅对旗舰版客户开放,需 购买旗舰版套餐包 并在 控制台>登录与消息>群消息已读回执 打开开关后方可使用。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private支持,同新版本中的 Work(好友工作群)
Public支持
ChatRoom支持,同新版本中的 Meeting(临时会议群))
AVChatRoom不支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupMsgReceiptDetailRequest request = new GetGroupMsgReceiptDetailRequest();
+request.setGroupId("MyFirstGroup");
+request.setMsgSeq(123L);
+request.setNum(12);
+request.setCursor("");
+request.setFlag(12);
+
+GetGroupMsgReceiptDetailResult result = client.group.getGroupMsgReceiptDetail(request);
+

创建话题

App 管理员可以通过该接口创建话题。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持
Public不支持
ChatRoom不支持
AVChatRoom不支持
Community(社群)只有支持话题的社群才适用此 API

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

CreateGroupTopicRequest request = new CreateGroupTopicRequest();
+request.setGroupId("MyFirstGroup");
+request.setTopicName("test");
+request.setFaceUrl("");
+
+CreateGroupTopicResult result = client.group.createGroupTopic(request);
+

获取话题资料

App 管理员可以通过该接口获取话题资料。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持
Public不支持
ChatRoom不支持
AVChatRoom不支持
Community(社群)只有支持话题的社群才适用此 API

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupTopicRequest request = new GetGroupTopicRequest();
+request.setGroupId("MyFirstGroup");
+request.setFromAccount("1400187352");
+
+GetGroupTopicResult result = client.group.getGroupTopic(request);
+

修改话题资料

App 管理员可以通过该接口修改话题资料。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持
Public不支持
ChatRoom不支持
AVChatRoom不支持
Community(社群)只有支持话题的社群才适用此 API

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

ModifyGroupTopicRequest request = new ModifyGroupTopicRequest();
+request.setGroupId("MyFirstGroup");
+request.setTopicName("test");
+request.setFaceUrl("");
+
+ModifyGroupTopicResult result = client.group.modifyGroupTopic(request);
+

导入话题基础资料

App 管理员可以通过该接口导入话题,不会触发回调、不会下发通知;当 App 需要从其他即时通信系统迁移到即时通信 IM 时,使用该协议导入存量话题数据。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持
Public不支持
ChatRoom不支持
AVChatRoom不支持
Community(社群)只有支持话题的社群才适用此 API

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

ImportGroupTopicRequest request = new ImportGroupTopicRequest();
+request.setGroupId("MyFirstGroup");
+request.setTopicName("test");
+request.setFromAccount("123");
+
+ImportGroupTopicResult result = client.group.importGroupTopic(request);
+

解散话题

App 管理员可以通过该接口解散话题。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持
Public不支持
ChatRoom不支持
AVChatRoom不支持
Community(社群)只有支持话题的社群才适用此 API

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

DestroyGroupTopicRequest request = new DestroyGroupTopicRequest();
+request.setGroupId("MyFirstGroup");
+
+DestroyGroupTopicResult result = client.group.destroyGroupTopic(request);
+

获取封禁群成员列表

App 管理员可以通过该接口获取对应直播群的封禁成员列表。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

GetGroupBanMemberRequest request = new GetGroupBanMemberRequest();
+request.setGroupId("MyFirstGroup");
+request.setLimit(10);
+request.setOffset(0);
+
+GetGroupBanMemberResult result = client.group.getGroupBanMember(request);
+

群成员封禁

App 管理员可以通过该接口向直播群封禁成员,封禁后成员无法接收消息,并且封禁时间内无法再次进群。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

BanGroupMemberRequest request = new BanGroupMemberRequest();
+request.setGroupId("MyFirstGroup");
+request.setDuration(1000L);
+request.setMembersAccount(Arrays.asList("test1", "bingo"));
+request.setDescription("test");
+
+BanGroupMemberResult result = client.group.banGroupMember(request);
+

群成员解封

App 管理员可以通过该接口向直播群解封成员,解封后,之前封禁的成员可重新进群获取消息。

说明

适用的群组类型

群组类型 ID是否支持此 REST API
Private不支持,同新版本中的 Work(好友工作群)
Public不支持
ChatRoom不支持,同新版本中的 Meeting(临时会议群)
AVChatRoom支持
Community(社群)不支持

即时通信 IM 内置上述群组类型,详情介绍请参见 群组系统

使用示例:

UnbanGroupMemberRequest request = new UnbanGroupMemberRequest();
+request.setGroupId("MyFirstGroup");
+request.setMembersAccount(Arrays.asList("test1", "bingo"));
+
+UnbanGroupMemberResult result = client.group.unbanGroupMember(request);
+

拉取群消息扩展

App 管理员和群成员可以拉取消息扩展,消息扩展为一组自定义的键值对。

注意

  • 此功能需 旗舰版套餐,并且已开通“消息扩展功能”功能(控制台“登录与消息”配置)。
  • 单条群消息可设置的最大键值对数量为 300 条。
  • 被设置的群消息需要在发送时指定“支持消息扩展”,参见 在群组中发送普通消息

使用示例:

GroupGetKeyValuesRequest request = GroupGetKeyValuesRequest.builder()
+        .groupId("MyFirstGroup")
+        .msgSeq(1L)
+        .build();
+
+GroupGetKeyValuesResult result = client.group.groupGetKeyValues(request);
+

设置群消息扩展

App 管理员和群成员可以为群聊普通消息设置消息扩展,消息扩展为一组自定义的键值对。

注意

  • 此功能需 旗舰版套餐,并且已开通“消息扩展功能”功能(控制台“登录与消息”配置)。
  • 单条群消息可设置的最大键值对数量为 300 条。
  • 被设置的群消息需要在发送时指定“支持消息扩展”,参见 在群组中发送普通消息

使用示例:

GroupSetKeyValuesRequest request = GroupSetKeyValuesRequest.builder()
+        .groupId("MyFirstGroup")
+        .msgSeq(1L)
+        .extensionList(Collections.singletonList(KeyValueSeq.builder()
+                .key("test")
+                .value("test")
+                .build()))
+        .build();
+
+GroupSetKeyValuesResult result = client.group.groupSetKeyValues(request);
+

获取群计数器

App 管理员可以通过该接口获取群计数器。

注意

使用示例:

GetGroupCounterRequest request = GetGroupCounterRequest.builder()
+        .groupId("MyFirstGroup")
+        .build();
+
+GetGroupCounterResult result = client.group.getGroupCounter(request);
+

更新群计数器

App 管理员可以通过该接口更新(设置、递增、递减)群计数器。

注意

使用示例:

List<GroupCounterItem> groupCounter = new ArrayList<>();
+GroupCounterItem item = new GroupCounterItem();
+item.setKey("x");
+item.setValue(1L);
+groupCounter.add(item);
+UpdateGroupCounterRequest request = UpdateGroupCounterRequest.builder()
+        .groupId("MyFirstGroup")
+        .groupCounter(groupCounter)
+        .mode(GroupCounterMode.SET)
+        .build();
+
+UpdateGroupCounterResult result = client.group.updateGroupCounter(request);
+

删除群计数器

App 管理员可以通过该接口删除群计数器。

注意

使用示例:

DeleteGroupCounterRequest request = DeleteGroupCounterRequest.builder()
+        .groupId("MyFirstGroup")
+        .build();
+
+DeleteGroupCounterResult result = client.group.deleteGroupCounter(request);
+

设置/取消直播群管理员

App 管理员可以为直播群设置和取消管理员,当设置管理员时,被设置的账号可以不需要在直播群里,被设置为管理员之后,该账号即使离开直播群再重新进群也仍然是管理员。需要取消管理员身份时,需要调用本接口取消该用户的管理员身份。该功能需旗舰版,并且在 IM 控制台“群功能配置”中开通“直播群在线成员列表”功能。

使用示例:

ModifyAdminRequest request = ModifyAdminRequest.builder()
+        .groupId("MyFirstGroup")
+        .commandType(1)
+        .adminAccount(Arrays.asList("test1", "bingo"))
+        .build();
+
+ModifyAdminResult result = client.group.modifyAdmin(request);
+

获取直播群管理员列表

App 管理员可以根据群组 ID 获取直播群管理员列表。该功能仅限旗舰版用户在 IM 控制台“群功能配置”中开启“直播群在线成员列表”后方可使用。

使用示例:

GetAdminListRequest request = GetAdminListRequest.builder()
+        .groupId("MyFirstGroup")
+        .build();
+
+GetAdminListResult result = client.group.getAdminList(request);
+

查询用户是否在直播群内

App 管理员可以根据群组 ID 查询一批用户是否在直播群内。该功能需旗舰版,并且在 IM 控制台“群功能配置”中开通“直播群在线成员列表”功能。

使用示例:

CheckMembersRequest request = CheckMembersRequest.builder()
+        .groupId("MyFirstGroup")
+        .memberAccount(Arrays.asList("test1", "bingo"))
+        .build();
+
+CheckMembersResult result = client.group.checkMembers(request);
+
`,257),o=[e];function c(l,i){return a(),s("div",null,o)}const r=n(p,[["render",c],["__file","group.html.vue"]]),d=JSON.parse('{"path":"/guide/group.html","title":"群组管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"获取 App 中的所有群组","slug":"获取-app-中的所有群组","link":"#获取-app-中的所有群组","children":[]},{"level":2,"title":"创建群组","slug":"创建群组","link":"#创建群组","children":[]},{"level":2,"title":"获取群详细资料","slug":"获取群详细资料","link":"#获取群详细资料","children":[]},{"level":2,"title":"获取群成员详细资料","slug":"获取群成员详细资料","link":"#获取群成员详细资料","children":[]},{"level":2,"title":"修改群基础资料","slug":"修改群基础资料","link":"#修改群基础资料","children":[]},{"level":2,"title":"增加群成员","slug":"增加群成员","link":"#增加群成员","children":[]},{"level":2,"title":"删除群成员","slug":"删除群成员","link":"#删除群成员","children":[]},{"level":2,"title":"修改群成员资料","slug":"修改群成员资料","link":"#修改群成员资料","children":[]},{"level":2,"title":"解散群组","slug":"解散群组","link":"#解散群组","children":[]},{"level":2,"title":"获取用户所加入的群组","slug":"获取用户所加入的群组","link":"#获取用户所加入的群组","children":[]},{"level":2,"title":"查询用户在群组中的身份","slug":"查询用户在群组中的身份","link":"#查询用户在群组中的身份","children":[]},{"level":2,"title":"批量禁言和取消禁言","slug":"批量禁言和取消禁言","link":"#批量禁言和取消禁言","children":[]},{"level":2,"title":"获取被禁言群成员列表","slug":"获取被禁言群成员列表","link":"#获取被禁言群成员列表","children":[]},{"level":2,"title":"在群组中发送普通消息","slug":"在群组中发送普通消息","link":"#在群组中发送普通消息","children":[]},{"level":2,"title":"在群组中发送系统通知","slug":"在群组中发送系统通知","link":"#在群组中发送系统通知","children":[]},{"level":2,"title":"转让群主","slug":"转让群主","link":"#转让群主","children":[]},{"level":2,"title":"撤回群消息","slug":"撤回群消息","link":"#撤回群消息","children":[]},{"level":2,"title":"导入群基础资料","slug":"导入群基础资料","link":"#导入群基础资料","children":[]},{"level":2,"title":"导入群消息","slug":"导入群消息","link":"#导入群消息","children":[]},{"level":2,"title":"导入群成员","slug":"导入群成员","link":"#导入群成员","children":[]},{"level":2,"title":"设置成员未读消息计数","slug":"设置成员未读消息计数","link":"#设置成员未读消息计数","children":[]},{"level":2,"title":"删除指定用户发送的消息","slug":"删除指定用户发送的消息","link":"#删除指定用户发送的消息","children":[]},{"level":2,"title":"拉取群历史消息","slug":"拉取群历史消息","link":"#拉取群历史消息","children":[]},{"level":2,"title":"获取直播群在线人数","slug":"获取直播群在线人数","link":"#获取直播群在线人数","children":[]},{"level":2,"title":"获取直播群在线列表","slug":"获取直播群在线列表","link":"#获取直播群在线列表","children":[]},{"level":2,"title":"设置直播群成员标记","slug":"设置直播群成员标记","link":"#设置直播群成员标记","children":[]},{"level":2,"title":"获取群自定义属性","slug":"获取群自定义属性","link":"#获取群自定义属性","children":[]},{"level":2,"title":"修改群自定义属性","slug":"修改群自定义属性","link":"#修改群自定义属性","children":[]},{"level":2,"title":"清空群自定义属性","slug":"清空群自定义属性","link":"#清空群自定义属性","children":[]},{"level":2,"title":"重置群自定义属性","slug":"重置群自定义属性","link":"#重置群自定义属性","children":[]},{"level":2,"title":"修改群聊历史消息","slug":"修改群聊历史消息","link":"#修改群聊历史消息","children":[]},{"level":2,"title":"直播群广播消息","slug":"直播群广播消息","link":"#直播群广播消息","children":[]},{"level":2,"title":"拉取群消息已读回执信息","slug":"拉取群消息已读回执信息","link":"#拉取群消息已读回执信息","children":[]},{"level":2,"title":"拉取群消息已读回执详情","slug":"拉取群消息已读回执详情","link":"#拉取群消息已读回执详情","children":[]},{"level":2,"title":"创建话题","slug":"创建话题","link":"#创建话题","children":[]},{"level":2,"title":"获取话题资料","slug":"获取话题资料","link":"#获取话题资料","children":[]},{"level":2,"title":"修改话题资料","slug":"修改话题资料","link":"#修改话题资料","children":[]},{"level":2,"title":"导入话题基础资料","slug":"导入话题基础资料","link":"#导入话题基础资料","children":[]},{"level":2,"title":"解散话题","slug":"解散话题","link":"#解散话题","children":[]},{"level":2,"title":"获取封禁群成员列表","slug":"获取封禁群成员列表","link":"#获取封禁群成员列表","children":[]},{"level":2,"title":"群成员封禁","slug":"群成员封禁","link":"#群成员封禁","children":[]},{"level":2,"title":"群成员解封","slug":"群成员解封","link":"#群成员解封","children":[]},{"level":2,"title":"拉取群消息扩展","slug":"拉取群消息扩展","link":"#拉取群消息扩展","children":[]},{"level":2,"title":"设置群消息扩展","slug":"设置群消息扩展","link":"#设置群消息扩展","children":[]},{"level":2,"title":"获取群计数器","slug":"获取群计数器","link":"#获取群计数器","children":[]},{"level":2,"title":"更新群计数器","slug":"更新群计数器","link":"#更新群计数器","children":[]},{"level":2,"title":"删除群计数器","slug":"删除群计数器","link":"#删除群计数器","children":[]},{"level":2,"title":"设置/取消直播群管理员","slug":"设置-取消直播群管理员","link":"#设置-取消直播群管理员","children":[]},{"level":2,"title":"获取直播群管理员列表","slug":"获取直播群管理员列表","link":"#获取直播群管理员列表","children":[]},{"level":2,"title":"查询用户是否在直播群内","slug":"查询用户是否在直播群内","link":"#查询用户是否在直播群内","children":[]}],"git":{"updatedTime":1721718509000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":19},{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":3},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":3},{"name":"Joel","email":"34619326+joelcho@users.noreply.github.com","commits":1},{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":1}]},"filePathRelative":"guide/group.md"}');export{r as comp,d as data}; diff --git a/assets/index.html-BKsdjYkY.js b/assets/index.html-BKsdjYkY.js new file mode 100644 index 00000000..6ff2f552 --- /dev/null +++ b/assets/index.html-BKsdjYkY.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i}from"./app-DbaUbv7J.js";const a={};function l(o,s){return i(),e("div")}const m=t(a,[["render",l],["__file","index.html.vue"]]),c=JSON.parse('{"path":"/","title":"首页","lang":"zh-CN","frontmatter":{"home":true,"title":"首页","heroImage":"https://avatars.githubusercontent.com/u/43716716","tagline":null,"actions":[{"text":"快速上手","link":"/guide/quickstart.html","type":"primary"},{"text":"项目简介","link":"/guide/","type":"secondary"}],"features":[{"title":"账号管理","details":"导入、删除、查询账号等"},{"title":"单聊消息","details":"发送、查询、撤回、已读消息等"},{"title":"全员推送","details":"设置、获取应用属性、用户属性、用户标签等"},{"title":"资料管理","details":"设置、拉取资料"},{"title":"关系链管理","details":"添加、导入、更新、删除、校验好友等"},{"title":"最近联系人","details":"拉取、删除会话等"},{"title":"群组管理","details":"管理群组、群成员、群消息通知等"},{"title":"全局禁言管理","details":"设置、查询全局禁言等"},{"title":"机器人","details":"创建、删除、拉取机器人等"},{"title":"内容审核","details":"本地审核、云端审核等"},{"title":"公众号管理","details":"创建、销毁、修改公众号等"}],"footer":"Apache-2.0 Licensed | Copyright © 2021-present Doocs"},"headers":[],"git":{"updatedTime":1704879157000,"contributors":[{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":2},{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":1},{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":1},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1}]},"filePathRelative":"README.md"}');export{m as comp,c as data}; diff --git a/assets/index.html-Ckrxg8R_.js b/assets/index.html-Ckrxg8R_.js new file mode 100644 index 00000000..6fd106b5 --- /dev/null +++ b/assets/index.html-Ckrxg8R_.js @@ -0,0 +1 @@ +import{_ as o,r as n,c as r,a as e,b as a,d as c,e as s,o as i}from"./app-DbaUbv7J.js";const l="/qcloud-im-server-sdk-java/assets/create_identifier-DkS_S2BP.png",d={},m=e("h1",{id:"介绍",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#介绍"},[e("span",null,"介绍")])],-1),p=s('

前提条件

说明

“App 管理员”是对 App 具有最高管理权限的角色,可调用 REST API 接口,进行创建/解散群组、发送全员推送消息等操作。每个应用最多支持配置 10 个管理员。

SDK 环境依赖

  • Java 8 及以上版本
  • Maven

SDK 源码

SDK 源码请参见 GitHub

项目贡献者

',9);function h(u,b){const t=n("Badge");return i(),r("div",null,[m,e("p",null,[a("本文档基于腾讯云 IM Server SDK Java "),c(t,{type:"tip",text:"v0.4.06",vertical:"top"}),a(" 编写。")]),p])}const k=o(d,[["render",h],["__file","index.html.vue"]]),_=JSON.parse('{"path":"/guide/","title":"介绍","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"前提条件","slug":"前提条件","link":"#前提条件","children":[]},{"level":2,"title":"SDK 环境依赖","slug":"sdk-环境依赖","link":"#sdk-环境依赖","children":[]},{"level":2,"title":"SDK 源码","slug":"sdk-源码","link":"#sdk-源码","children":[]},{"level":2,"title":"项目贡献者","slug":"项目贡献者","link":"#项目贡献者","children":[]}],"git":{"updatedTime":1724225353000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":46},{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":17},{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":3},{"name":"Antenbabby","email":"18116874+Antenbabby@users.noreply.github.com","commits":2},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":2},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1},{"name":"yu","email":"502400992@qq.com","commits":1}]},"filePathRelative":"guide/README.md"}');export{k as comp,_ as data}; diff --git a/assets/member.html-O2w6aVtX.js b/assets/member.html-O2w6aVtX.js new file mode 100644 index 00000000..530fbf29 --- /dev/null +++ b/assets/member.html-O2w6aVtX.js @@ -0,0 +1,70 @@ +import{_ as s,c as n,o as a,e as t}from"./app-DbaUbv7J.js";const p={},e=t(`

全员推送

全员推送

全员推送,用户运营利器,不仅支持全员发送特定内容,还可根据标签、属性,针对特定用户群体发送个性化内容,如会员活动、区域通知等,助力拉新、转化、促活等各个阶段运营工作的有效进行。

  • 支持全员推送。
  • 支持按用户属性推送。
  • 支持按用户标签推送。
  • 管理员推送消息,接收方看到消息发送者是管理员。
  • 管理员指定某一账号向其他账号推送消息,接收方看到发送者不是管理员,而是管理员指定的账号。
  • 支持消息离线存储,不支持漫游。
  • 由于全员推送需要下发的账号数量巨大,下发完全部账号需要一定时间(根据账号总数而定,一般在一分钟内)。
  • 支持只推在线用户,需要将 MsgLifeTime 参数设置为 0。

说明

“全员推送”为 IM 旗舰版功能,购买旗舰版套餐包 后可使用,详见 价格说明

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("hi, beauty");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+ImPushRequest request = ImPushRequest.builder()
+        .msgRandom(9312457L)
+        .msgBody(msgBody)
+        .fromAccount("admin")
+        .msgLifeTime(120)
+        .build();
+
+ImPushResult result = client.member.imPush(request);
+

设置应用属性名称

每个应用可以设置自定义的用户属性,最多可以有 10 个。通过本接口可以设置每个属性的名称,设置完成后,即可用于按用户属性推送等。

使用示例:

Map<String, String> attrNames = new HashMap<>(3);
+attrNames.put("0", "sex");
+attrNames.put("1", "city");
+attrNames.put("2", "country");
+ImSetAttrNameRequest request = new ImSetAttrNameRequest(attrNames);
+
+ImSetAttrNameResult result = client.member.imSetAttrName(request);
+

获取应用属性名称

管理员获取应用属性名称。使用前请先 设置应用属性名称

使用示例:

ImGetAttrNameRequest request = new ImGetAttrNameRequest();
+
+ImGetAttrNameResult result = client.member.imGetAttrName(request);
+

获取用户属性

获取用户属性(必须以管理员账号调用);每次最多只能获取 100 个用户的属性。使用前请先 设置应用属性名称

使用示例:

List<String> toAccount = Arrays.asList("test1", "test2");
+ImGetAttrRequest request = new ImGetAttrRequest(toAccount);
+
+ImGetAttrResult result = client.member.imGetAttr(request);
+

设置用户属性

管理员给用户设置属性。每次最多只能给 100 个用户设置属性。使用前请先 设置应用属性名称

使用示例:

Map<String, Object> attrs = new HashMap<>();
+attrs.put("sex", "attr1");
+attrs.put("city", "attr2");
+UserAttrItem item = new UserAttrItem("test1", attrs);
+List<UserAttrItem> userAttrs = Collections.singletonList(item);
+ImSetAttrRequest request = new ImSetAttrRequest(userAttrs);
+
+ImSetAttrResult result = client.member.imSetAttr(request);
+

删除用户属性

管理员给用户删除属性。注意每次最多只能给 100 个用户删除属性。使用前请先 设置应用属性名称

使用示例:

Map<String, Object> attrs = new HashMap<>();
+attrs.put("sex", "attr1");
+attrs.put("city", "attr2");
+UserAttrItem item = UserAttrItem.builder()
+        .toAccount("test1")
+        .attrs(attrs)
+        .build();
+List<UserAttrItem> userAttrs = Collections.singletonList(item);
+ImRemoveAttrRequest request = new ImRemoveAttrRequest(userAttrs);
+
+ImRemoveAttrResult result = client.member.imRemoveAttr(request);
+

获取用户标签

获取用户标签(必须以管理员账号调用)。每次最多只能获取 100 个用户的标签。

使用示例:

List<String> toAccount = Arrays.asList("test1", "test2");
+ImGetTagRequest request = new ImGetTagRequest(toAccount);
+
+ImGetTagResult result = client.member.imGetTag(request);
+

添加用户标签

管理员给用户添加标签。

注意

  • 每次请求最多只能给 100 个用户添加标签,请求体中单个用户添加标签数最多为 10 个。
  • 单个用户可设置最大标签数为 100 个,若用户当前标签超过 100,则添加新标签之前请先删除旧标签。
  • 单个标签最大长度为 50 字节。

使用示例:

List<String> tags = Arrays.asList("a", "b");
+UserTagItem item = UserTagItem.builder()
+        .toAccount("test1")
+        .tags(tags)
+        .build();
+List<UserTagItem> userTags = Collections.singletonList(item);
+ImAddTagRequest request = new ImAddTagRequest(userTags);
+
+ImAddTagResult result = client.member.imAddTag(request);
+

删除用户标签

管理员给用户删除标签。注意每次最多只能给 100 个用户删除标签。

使用示例:

List<String> tags = Arrays.asList("a", "b");
+UserTagItem item = UserTagItem.builder()
+        .toAccount("test1")
+        .tags(tags)
+        .build();
+List<UserTagItem> userTags = Collections.singletonList(item);
+ImRemoveTagRequest request = new ImRemoveTagRequest(userTags);
+
+ImRemoveTagResult result = client.member.imRemoveTag(request);
+

删除所有用户标签

管理员给用户删除所有标签。注意每次最多只能给 100 个用户删除所有标签。

使用示例:

List<String> toAccount = Arrays.asList("test1", "test2");
+ImRemoveAllTagsRequest request = new ImRemoveAllTagsRequest(toAccount);
+
+ImRemoveAllTagsResult result = client.member.imRemoveAllTags(request);
+
`,44),c=[e];function l(o,i){return a(),n("div",null,c)}const r=s(p,[["render",l],["__file","member.html.vue"]]),k=JSON.parse('{"path":"/guide/member.html","title":"全员推送","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"全员推送","slug":"全员推送-1","link":"#全员推送-1","children":[]},{"level":2,"title":"设置应用属性名称","slug":"设置应用属性名称","link":"#设置应用属性名称","children":[]},{"level":2,"title":"获取应用属性名称","slug":"获取应用属性名称","link":"#获取应用属性名称","children":[]},{"level":2,"title":"获取用户属性","slug":"获取用户属性","link":"#获取用户属性","children":[]},{"level":2,"title":"设置用户属性","slug":"设置用户属性","link":"#设置用户属性","children":[]},{"level":2,"title":"删除用户属性","slug":"删除用户属性","link":"#删除用户属性","children":[]},{"level":2,"title":"获取用户标签","slug":"获取用户标签","link":"#获取用户标签","children":[]},{"level":2,"title":"添加用户标签","slug":"添加用户标签","link":"#添加用户标签","children":[]},{"level":2,"title":"删除用户标签","slug":"删除用户标签","link":"#删除用户标签","children":[]},{"level":2,"title":"删除所有用户标签","slug":"删除所有用户标签","link":"#删除所有用户标签","children":[]}],"git":{"updatedTime":1696847753000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":4},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1},{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":1},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":1}]},"filePathRelative":"guide/member.md"}');export{r as comp,k as data}; diff --git a/assets/message.html-BCdU9V6P.js b/assets/message.html-BCdU9V6P.js new file mode 100644 index 00000000..4059dc54 --- /dev/null +++ b/assets/message.html-BCdU9V6P.js @@ -0,0 +1,122 @@ +import{_ as n,c as s,o as a,e as t}from"./app-DbaUbv7J.js";const p={},e=t(`

单聊消息

单发单聊消息

  • 管理员向账号发消息,接收方看到消息发送者是管理员。
  • 管理员指定某一账号向其他账号发消息,接收方看到发送者不是管理员,而是管理员指定的账号。
  • 该接口不会检查发送者和接收者的好友关系(包括黑名单),同时不会检查接收者是否被禁言。
  • 该接口默认不会检查接收者对发送者是否设置了免打扰,如需检查,请在"SendMsgControl"字段填上"WithMuteNotifications"。
  • 单聊消息 MsgSeq 字段的作用及说明:该字段在发送消息时由用户自行指定,该值可以重复,非后台生成,非全局唯一。与群聊消息的 MsgSeq 字段不同,群聊消息的 MsgSeq 由后台生成,每个群都维护一个 MsgSeq,从 1 开始严格递增。单聊消息历史记录对同一个会话的消息先以时间戳排序,同秒内的消息再以 MsgSeq 排序。

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("hello world");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+SendMsgRequest request = SendMsgRequest.builder()
+        .fromAccount("test1")
+        .toAccount("test2")
+        .msgRandom(123L)
+        .msgBody(msgBody)
+        .syncOtherMachine(SyncOtherMachine.YES)
+        .msgTimeStamp(1631934058)
+        .msgLifeTime(604800)
+        .build();
+
+SendMsgResult result = client.message.sendMsg(request);
+

批量发单聊消息

  • 支持一次对最多 500 个用户进行单发消息。
  • 与单发消息相比,该接口更适用于营销类消息、系统通知 tips 等时效性较强的消息。
  • 若消息不需要计入未读数,也不需要存储聊天记录,则可将 MsgLifeTime 字段设置为 0,这样可以带来更快的消息下发速度。
  • 管理员指定某一账号向目标账号批量发消息,接收方看到发送者不是管理员,而是管理员指定的账号。
  • 该接口不触发回调请求。
  • 该接口不会检查发送者和接收者的好友关系(包括黑名单),同时不会检查接收者是否被禁言。
  • 该接口默认不会检查接收者对发送者是否设置了免打扰,如需检查,请在"SendMsgControl"字段填上"WithMuteNotifications"。
  • 单聊消息 MsgSeq 字段的作用及说明:该字段在发送消息时由用户自行指定,该值可以重复,非后台生成,非全局唯一。与群聊消息的 MsgSeq 字段不同,群聊消息的 MsgSeq 由后台生成,每个群都维护一个 MsgSeq,从 1 开始严格递增。单聊消息历史记录对同一个会话的消息先以时间戳排序,同秒内的消息再以 MsgSeq 排序。

使用示例:

List<String> toAccount = Arrays.asList("test1", "test2");
+TIMTextMsgElement msg = new TIMTextMsgElement("hi bingo");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+BatchSendMsgRequest request = BatchSendMsgRequest
+        .builder()
+        .toAccount(toAccount)
+        .msgRandom(123L)
+        .msgBody(msgBody)
+        .syncOtherMachine(SyncOtherMachine.NO)
+        .msgSeq(28460L)
+        .build();
+
+BatchSendMsgResult result = client.message.batchSendMsg(request);
+

导入单聊消息

  • 导入历史单聊消息到即时通信 IM。
  • 平滑过渡期间,将原有即时通信实时单聊消息导入到即时通信 IM。
  • 该接口会更新会话。
  • 该接口不会触发回调。
  • 对于同一个单聊会话的消息,该接口会根据 MsgSeq , MsgRandom , MsgTimeStamp 字段的值对导入的消息进行去重。仅当这三个字段的值都对应相同时,才判定消息是重复的,消息是否重复与消息内容本身无关。 另外,若两条消息的 MsgSeq , MsgRandom , MsgTimeStamp 字段对应相同,而 from_account 和 to_account 相反,则这两条消息也认为是重复的。
  • 重复导入的消息不会覆盖之前已导入的消息(即消息内容以首次导入的为准)。
  • 单聊消息 MsgSeq 字段的作用及说明:该字段在发送消息时由用户自行指定,该值可以重复,非后台生成,非全局唯一。与群聊消息的 MsgSeq 字段不同,群聊消息的 MsgSeq 由后台生成,每个群都维护一个 MsgSeq,从 1 开始严格递增。单聊消息历史记录对同一个会话的消息先以时间戳排序,同秒内的消息再以 MsgSeq 排序。

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("hello bingo");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+ImportMsgRequest request = ImportMsgRequest.builder()
+        .fromAccount("bingo")
+        .toAccount("test1")
+        .msgRandom(122L)
+        .msgTimeStamp(1557387418)
+        .msgBody(msgBody)
+        .build();
+
+ImportMsgResult result = client.message.importMsg(request);
+

查询单聊消息

  • 管理员按照时间范围查询某单聊会话的消息记录。
  • 查询的单聊会话由请求中的 From_Account 和 To_Account 指定。查询结果包含会话双方互相发送的消息,具体每条消息的发送方和接收方由每条消息里的 From_Account 和 To_Account 指定。
  • 一般情况下,请求中的 From_Account 和 To_Account 字段值互换,查询结果不变。但通过 单发单聊消息批量发单聊消息 接口发送的消息,如果指定 SyncOtherMachine 值为 2,则需要指定正确的 From_Account 和 To_Account 字段值才能查询到该消息。 例如,通过 单发单聊消息 接口指定账号 A 给账号 B 发一条消息,同时指定 SyncOtherMachine 值为 2。则调用本接口时,From_Account 必须设置为账号 B,To_Account 必须设置为账号 A 才能查询到该消息。
  • 查询结果包含被撤回的消息,由消息里的 MsgFlagBits 字段标识。
  • 若想通过 撤回单聊消息 接口撤回某条消息,可先用本接口查询出该消息的 MsgKey,然后再调用撤回接口进行撤回。
  • 可查询的消息记录的时间范围取决于漫游消息存储时长,默认是 7 天。支持在控制台修改消息漫游时长,延长消息漫游时长是增值服务。具体请参考 漫游消息存储
  • 若请求时间段内的消息总大小超过应答包体大小限制(目前为 13K)时,则需要续拉。您可以通过应答中的 Complete 字段查看是否已拉取请求的全部消息。

使用示例:

AdminGetRoamMsgRequest request = AdminGetRoamMsgRequest.builder()
+        .fromAccount("test1")
+        .toAccount("test2")
+        .maxCnt(123)
+        .minTime(1631934000)
+        .maxTime(1631934060)
+        .build();
+
+AdminRoamMsgResult result = client.message.getRoamMsg(request);
+
+List<MsgListItem> msgList = result.getMsgList();
+if (msgList != null && msgList.size() > 0) {
+    for (MsgListItem item : msgList) {
+        List<TIMMsgElement> msgBody = item.getMsgBody();
+        if (msgBody != null && msgList.size() > 0) {
+            for (TIMMsgElement msgElement : msgBody) {
+                // 根据 msgType 强转为对应的子类
+                if (Objects.equals(msgElement.getMsgType(), MsgType.TIM_CUSTOM_ELEM)) {
+                    TIMCustomMsgElement t = (TIMCustomMsgElement) msgElement;
+                    System.out.println(t.getMsgContent().getDesc());
+                } else if (Objects.equals(msgElement.getMsgType(), MsgType.TIM_TEXT_ELEM)) {
+                    TIMTextMsgElement t = (TIMTextMsgElement) msgElement;
+                    System.out.println(t.getMsgContent().getText());
+                }
+            }
+        }
+    }
+}
+

撤回单聊消息

  • 管理员撤回单聊消息。
  • 该接口可以撤回所有单聊消息,包括客户端发出的单聊消息,由 单发批量发 接口发出的单聊消息。
  • 若需要撤回由客户端发出的单聊消息,您可以开通 发单聊消息之前回调发单聊消息之后回调 ,通过该回调接口记录每条单聊消息的 MsgKey ,然后填在本接口的 MsgKey 字段进行撤回。您也可以通过 查询单聊消息 查询出待撤回的单聊消息的 MsgKey 后,填在本接口的 MsgKey 字段进行撤回。
  • 若需要撤回由 单发批量发 接口发出的单聊消息,需要记录这些接口回包里的 MsgKey 字段以进行撤回。
  • 调用该接口撤回消息后,该条消息的离线、漫游存储,以及消息发送方和接收方的客户端的本地缓存都会被撤回。
  • 该接口可撤回的单聊消息没有时间限制,即可以撤回任何时间的单聊消息。

注意

使用该接口撤回单聊消息后,被撤回的消息不能恢复,请谨慎调用该接口。

使用示例:

AdminMsgWithdrawRequest request = AdminMsgWithdrawRequest.builder()
+        .fromAccount("test1")
+        .toAccount("bingo")
+        .msgKey("31906_833502_1572869830")
+        .build();
+
+AdminMsgWithdrawResult result = client.message.msgWithdraw(request);
+

设置单聊消息已读

  • 设置用户的某个单聊会话的消息已读。

使用示例:

AdminSetMsgReadRequest request = AdminSetMsgReadRequest.builder()
+        .reportAccount("test1")
+        .peerAccount("test2")
+        .build();
+
+AdminSetMsgReadResult result = client.message.setMsgRead(request);
+

查询单聊未读消息计数

App 后台可以通过该接口查询特定账号的单聊总未读数(包含所有的单聊会话)或者单个单聊会话的未读数。

使用示例:

GetC2cUnreadMsgRequest request = new GetC2cUnreadMsgRequest("test2");
+List<String> peerAccount = Arrays.asList("test1", "bingo");
+request.setPeerAccount(peerAccount);
+
+C2cUnreadMsgNumResult result = client.message.getC2cUnreadMsgNum(request);
+

修改单聊历史消息

  • 管理员修改单聊历史消息。
  • 可以单独修改消息中的 MsgBody 或 CloudCustomData 字段,也可以同时修改这两个字段。以请求中指定的字段值覆盖历史消息对应的字段。
  • 待修改的单聊消息的 MsgKey 可通过以下方式获取:

注意

使用该接口修改消息后,被修改的消息不能恢复,请谨慎调用该接口。

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("test modify c2c msg");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+ModifyC2cMsgRequest request = ModifyC2cMsgRequest.builder()
+        .fromAccount("test1")
+        .toAccount("test2")
+        .msgKey("1353691732_123_1653995506")
+        .msgBody(msgBody)
+        .build();
+
+ModifyC2cMsgResult result = client.message.modifyC2cMsg(request);
+

拉取单聊消息扩展

App 管理员和会话成员可以拉取消息扩展,消息扩展为一组自定义的键值对。

注意

  • 此功能需 旗舰版套餐,并且已开通“消息扩展功能”功能(控制台“登录与消息”配置)。
  • 单条单聊消息可设置的最大键值对数量为 300 条。
  • 被设置的单聊消息需要在发送时指定“支持消息扩展”,参见 单发单聊消息

使用示例:

GetKeyValuesRequest request = GetKeyValuesRequest.builder()
+        .fromAccount("test1")
+        .toAccount("bingo")
+        .msgKey("1353691732_123_1653995506")
+        .startSeq(1L)
+        .build();
+
+GetKeyValuesResult result = client.message.getKeyValues(request);
+

设置单聊消息扩展

App 管理员和会话成员可以为单聊普通消息设置消息扩展,消息扩展为一组自定义的键值对。

注意

  • 此功能需 旗舰版套餐,并且已开通“消息扩展功能”功能(控制台“登录与消息”配置)。
  • 单条单聊消息可设置的最大键值对数量为 300 条。
  • 被设置的单聊消息需要在发送时指定“支持消息扩展”,参见 单发单聊消息

使用示例:

SetKeyValuesRequest request = SetKeyValuesRequest.builder()
+        .fromAccount("test1")
+        .toAccount("bingo")
+        .msgKey("1353691732_123_1653995506")
+        .build();
+
+SetKeyValuesResult result = client.message.setKeyValues(request);
+

单向删除单聊历史消息

  • App 管理员调用该接口单向删除一个单聊会话的多条消息。
  • 只能以消息的发送方或接收方的身份去删除单聊会话的历史消息。
  • 只能单向删除(以会话其中一方的身份去删除某条消息后,自己看不到这条消息,会话的对方仍然可以看到这条消息)

使用示例:

DeleteC2cMsgRambleRequest request = DeleteC2cMsgRambleRequest.builder()
+        .operatorAccount("test1")
+        .peerAccount("test2")
+        .msgKeyList(Collections.singletonList("1353691732_123_1653995506"))
+        .build();
+
+DeleteC2cMsgRambleResult result = client.message.deleteC2cMsgRamble(request);
+

清空群聊历史消息

该 API 接口的作用是清空群聊中用户发送的历史消息。

此接口通过打标记实现 SDK 无法拉取的效果,并没有真的执行删除操作,Admin 用户仍然可以通过“拉取群聊历史消息”接口拉取已清空的历史消息。

使用示例:

ClearGroupMsgRequest request = ClearGroupMsgRequest.builder()
+        .groupId("test_group")
+        .msgSeq(123L)
+        .build();
+
+ClearGroupMsgResult result = client.message.clearGroupMsg(request);
+
`,54),c=[e];function l(o,i){return a(),s("div",null,c)}const k=n(p,[["render",l],["__file","message.html.vue"]]),r=JSON.parse('{"path":"/guide/message.html","title":"单聊消息","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"单发单聊消息","slug":"单发单聊消息","link":"#单发单聊消息","children":[]},{"level":2,"title":"批量发单聊消息","slug":"批量发单聊消息","link":"#批量发单聊消息","children":[]},{"level":2,"title":"导入单聊消息","slug":"导入单聊消息","link":"#导入单聊消息","children":[]},{"level":2,"title":"查询单聊消息","slug":"查询单聊消息","link":"#查询单聊消息","children":[]},{"level":2,"title":"撤回单聊消息","slug":"撤回单聊消息","link":"#撤回单聊消息","children":[]},{"level":2,"title":"设置单聊消息已读","slug":"设置单聊消息已读","link":"#设置单聊消息已读","children":[]},{"level":2,"title":"查询单聊未读消息计数","slug":"查询单聊未读消息计数","link":"#查询单聊未读消息计数","children":[]},{"level":2,"title":"修改单聊历史消息","slug":"修改单聊历史消息","link":"#修改单聊历史消息","children":[]},{"level":2,"title":"拉取单聊消息扩展","slug":"拉取单聊消息扩展","link":"#拉取单聊消息扩展","children":[]},{"level":2,"title":"设置单聊消息扩展","slug":"设置单聊消息扩展","link":"#设置单聊消息扩展","children":[]},{"level":2,"title":"单向删除单聊历史消息","slug":"单向删除单聊历史消息","link":"#单向删除单聊历史消息","children":[]},{"level":2,"title":"清空群聊历史消息","slug":"清空群聊历史消息","link":"#清空群聊历史消息","children":[]}],"git":{"updatedTime":1704879157000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":9},{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":1},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":1}]},"filePathRelative":"guide/message.md"}');export{k as comp,r as data}; diff --git a/assets/official_account.html-nq3_CNXB.js b/assets/official_account.html-nq3_CNXB.js new file mode 100644 index 00000000..20e33648 --- /dev/null +++ b/assets/official_account.html-nq3_CNXB.js @@ -0,0 +1,66 @@ +import{_ as s,c as n,o as a,e as t}from"./app-DbaUbv7J.js";const e={},p=t(`

公众号管理

创建公众号

App 管理员可以通过该接口创建公众号。

使用示例:

CreateOfficialAccountRequest request = new CreateOfficialAccountRequest();
+request.setOwnerAccount("test");
+request.setName("test_official_account");
+
+CreateOfficialAccountResult result = client.officialAccount.createOfficialAccount(request);
+

销毁公众号

App 管理员可以通过该接口销毁公众号。

使用示例:

DestroyOfficialAccountRequest request = new DestroyOfficialAccountRequest();
+request.setOfficialAccount("test_official_account_user_id");
+
+DestroyOfficialAccountResult result = client.officialAccount.destroyOfficialAccount(request);
+

修改公众号资料

App 管理员可以通过该接口修改公众号的相关信息,如公众号的名称、头像、简介等

使用示例:

ModifyOfficialAccountBaseInfoRequest request = new ModifyOfficialAccountBaseInfoRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setName("test_official_account2");
+
+ModifyOfficialAccountBaseInfoResult result = client.officialAccount.modifyOfficialAccountBaseInfo(request);
+

获取公众号详细资料

App 管理员可以通过该接口获取公众号的相关资料信息。

使用示例:

GetOfficialAccountInfoRequest request = new GetOfficialAccountInfoRequest();
+request.setOfficialAccountIdList(Collections.singletonList(new OfficialAccountItem("test_official_account_user_id")));
+
+GetOfficialAccountInfoResult result = client.officialAccount.getOfficialAccountInfo(request);
+

获取公众号的订阅成员资料

App 管理员可以通过该接口获取订阅某个公众号的所有用户信息.

使用示例:

GetSubscriberInfoRequest request = new GetSubscriberInfoRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setLimit(10);
+request.setNext("");
+
+GetSubscriberInfoResult result = client.officialAccount.getSubscriberInfo(request);
+

添加订阅者

App 管理员可以通过该接口使用户订阅某个公众号,成为公众号的订阅成员。

使用示例:

AddSubscriberRequest request = new AddSubscriberRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setSubscriberList(Collections.singletonList(new OfficialAccountItem("test_subscriber_id")));
+
+AddSubscriberResult result = client.officialAccount.addSubscriber(request);
+

删除订阅者

App 管理员可以通过该接口使用户取消订阅某个公众号,从公众号的订阅成员中移除。

使用示例:

DeleteSubscriberRequest request = new DeleteSubscriberRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setSubscriberToDelAccount(Collections.singletonList("test_subscriber_id"));
+
+DeleteSubscriberResult result = client.officialAccount.deleteSubscriber(request);
+

修改订阅者资料

App 管理员可以通过该接口修改订阅者的相关资料信息。

使用示例:

ModifySubscriberInfoRequest request = new ModifySubscriberInfoRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setSubscriberAccount("test_subscriber_id");
+request.setCustomString("test_custom_string");
+
+ModifySubscriberInfoResult result = client.officialAccount.modifySubscriberInfo(request);
+

获取订阅的公众号列表

App 管理员可以通过该接口获取用户订阅的所有公众号列表信息。

使用示例:

GetSubscribedOfficialAccountListRequest request = new GetSubscribedOfficialAccountListRequest();
+request.setSubscriberAccount("test_subscriber_id");
+
+GetSubscribedOfficialAccountListResult result = client.officialAccount.getSubscribedOfficialAccountList(request);
+

公众号用户发送广播消息

  • App 管理员可以通过该接口向关注公众号的所有订阅者发送普通消息。
  • 单个公众号的发送频率上限为1条/秒,每小时最多可发布2条广播消息。
  • 如果5分钟内两条消息的内容相同,后面的消息将被当做重复消息而丢弃。

使用示例:

TIMTextMsgElement msg = new TIMTextMsgElement("hello world");
+List<TIMMsgElement> msgBody = Collections.singletonList(msg);
+SendOfficialAccountMsgRequest request = SendOfficialAccountMsgRequest.builder()
+        .officialAccount("test_official_account_user_id")
+        .random(123)
+        .msgBody(msgBody)
+        .build();
+
+SendOfficialAccountMsgResult result = client.officialAccount.sendOfficialAccountMsg(request);
+

拉取公众号用户历史消息

  • 即时通信 IM 的公众号消息是按 Seq 排序的,按照 server 收到公众号消息的顺序分配 Seq,先发的公众号消息 Seq 小,后发的 Seq 大。
  • 即时通信 IM 会给每条公众号消息生成一个 MsgKey,格式为 "Seq_1_ServerTime"。
  • 如果用户想拉取一个公众号的全量消息,需要填写消息的 LastMsgKey,首次拉取时不用填拉取 LastMsgKey,Server 会自动返回最新的消息,以后拉取时拉取 LastMsgKey 填上次请求返回 LastMsgKey。
  • 如果返回消息的 IsPlaceMsg 为1,表示这个 Seq 的消息或者过期、或者存储失败、或者被删除了。

使用示例:

OfficialAccountMsgGetSimpleRequest request = new OfficialAccountMsgGetSimpleRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setLastMsgKey("msg_key");
+request.setReqMsgNumber(10);
+request.setWithRecalledMsg(1);
+
+OfficialAccountMsgGetSimpleResult result = client.officialAccount.msgGetSimple(request);
+

撤回公众号消息

  • 管理员撤回公众号消息。
  • 该接口可以撤回所有漫游有效期内的公众号消息,包括客户端发出的公众号消息,由 REST API 接口发出的公众号消息。
  • 若需要撤回由客户端发出的公众号消息,您可以开通 发公众号消息之后回调 ,通过该回调接口记录每条公众号消息的 MsgKey,然后填在本接口的 MsgKeyList 参数里进行撤回。您也可以通过 拉取公众号用户历史消息 查询出待撤回的公众号消息的相关信息后,使用本接口进行撤回。
  • 若需要撤回由 REST API 公众号用户发送广播消息 接口发出的公众号消息,需要记录这些接口回包里的 MsgKey 字段以进行撤回。
  • 调用该接口撤回消息后,该条消息的接收方的客户端的本地缓存都会被撤回。
  • 该接口可撤回的公众号消息没有时间限制,即可以撤回任何时间的公众号消息,但是公众号消息的漫游时间需要在有效期内。

使用示例:

OfficialAccountMsgRecallRequest request = new OfficialAccountMsgRecallRequest();
+request.setOfficialAccount("test_official_account_user_id");
+request.setMsgKeyList(Collections.singletonList("msg_key"));
+
+OfficialAccountMsgRecallResult result = client.officialAccount.msgRecall(request);
+
`,49),c=[p];function l(i,o){return a(),n("div",null,c)}const r=s(e,[["render",l],["__file","official_account.html.vue"]]),k=JSON.parse('{"path":"/guide/official_account.html","title":"公众号管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"创建公众号","slug":"创建公众号","link":"#创建公众号","children":[]},{"level":2,"title":"销毁公众号","slug":"销毁公众号","link":"#销毁公众号","children":[]},{"level":2,"title":"修改公众号资料","slug":"修改公众号资料","link":"#修改公众号资料","children":[]},{"level":2,"title":"获取公众号详细资料","slug":"获取公众号详细资料","link":"#获取公众号详细资料","children":[]},{"level":2,"title":"获取公众号的订阅成员资料","slug":"获取公众号的订阅成员资料","link":"#获取公众号的订阅成员资料","children":[]},{"level":2,"title":"添加订阅者","slug":"添加订阅者","link":"#添加订阅者","children":[]},{"level":2,"title":"删除订阅者","slug":"删除订阅者","link":"#删除订阅者","children":[]},{"level":2,"title":"修改订阅者资料","slug":"修改订阅者资料","link":"#修改订阅者资料","children":[]},{"level":2,"title":"获取订阅的公众号列表","slug":"获取订阅的公众号列表","link":"#获取订阅的公众号列表","children":[]},{"level":2,"title":"公众号用户发送广播消息","slug":"公众号用户发送广播消息","link":"#公众号用户发送广播消息","children":[]},{"level":2,"title":"拉取公众号用户历史消息","slug":"拉取公众号用户历史消息","link":"#拉取公众号用户历史消息","children":[]},{"level":2,"title":"撤回公众号消息","slug":"撤回公众号消息","link":"#撤回公众号消息","children":[]}],"git":{"updatedTime":1704879157000,"contributors":[{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":1}]},"filePathRelative":"guide/official_account.md"}');export{r as comp,k as data}; diff --git a/assets/operation_1.html-Dsg-LZEv.js b/assets/operation_1.html-Dsg-LZEv.js new file mode 100644 index 00000000..c1f36f89 --- /dev/null +++ b/assets/operation_1.html-Dsg-LZEv.js @@ -0,0 +1,11 @@ +import{_ as n,c as s,o as a,e}from"./app-DbaUbv7J.js";const t={},p=e(`

全局禁言管理

设置全局禁言

  • 设置账号的单聊消息全局禁言。
  • 设置账号的群组消息全局禁言。

使用示例:

SetNoSpeakingRequest request = SetNoSpeakingRequest.builder()
+        .setAccount("test1")
+        .msgNoSpeakingTime(NoSpeakingTime.NEVER)
+        .groupMsgNoSpeakingTime(NoSpeakingTime.FOREVER)
+        .build();
+
+SetNoSpeakingResult result = client.operation.setNoSpeaking(request);
+

查询全局禁言

  • 查询账号的单聊消息全局禁言。
  • 查询账号的群组消息全局禁言。

使用示例:

GetNoSpeakingRequest request = new GetNoSpeakingRequest("test1");
+
+GetNoSpeakingResult result = client.operation.getNoSpeaking(request);
+
`,9),l=[p];function i(c,o){return a(),s("div",null,l)}const r=n(t,[["render",i],["__file","operation_1.html.vue"]]),k=JSON.parse('{"path":"/guide/operation_1.html","title":"全局禁言管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"设置全局禁言","slug":"设置全局禁言","link":"#设置全局禁言","children":[]},{"level":2,"title":"查询全局禁言","slug":"查询全局禁言","link":"#查询全局禁言","children":[]}],"git":{"updatedTime":1696847753000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":2},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1}]},"filePathRelative":"guide/operation_1.md"}');export{r as comp,k as data}; diff --git a/assets/operation_2.html-B7PCwTg0.js b/assets/operation_2.html-B7PCwTg0.js new file mode 100644 index 00000000..b7c051ff --- /dev/null +++ b/assets/operation_2.html-B7PCwTg0.js @@ -0,0 +1,34 @@ +import{_ as s,c as n,o as a,e}from"./app-DbaUbv7J.js";const t={},p=e(`

运营管理

拉取运营数据

App 管理员可以通过该接口拉取最近 30 天的运营数据,可拉取的字段见下文可拉取的运营字段。

使用示例:

GetAppInfoRequest request = new GetAppInfoRequest();
+List<String> requestFields = Arrays.asList("ChainIncrease", "ChainDecrease");
+request.setRequestField(requestFields);
+
+GetAppInfoResult result = client.operation.getAppInfo(request);
+

下载最近消息记录

App 管理员可以通过该接口获取 App 中最近 7 天中某天某小时的所有单发或群组消息记录的下载地址。

注意

  • 下载消息记录里的图片、语音、文件和短视频,此功能仅适用于 4.X 版本 IM SDK,可通过聊天记录中的 URL 字段进行下载。如您使用 2.X 或 3.X 版本的 IM SDK,您将无法通过该方法获取到以上信息,如您需要此功能,请您升级至 4.X 版本。
  • 消息记录以日志文件形式保存并使用 GZip 压缩,通过该接口获取到下载地址后,请自行下载并处理;消息记录文件每小时产生一次,例如 0 点(00:00~00:59)的数据在 01:00 后开始处理,一般 1 小时内处理完毕(消息较多则处理时间较长);文件有效期 7 天,无论是否下载过,都会在 7 天后删除,被删除后不支持重新导出;获取到的下载地址存在有效期,请在过期前进行下载,若地址失效,请通过该接口重新获取。
  • 此接口仅用于下载最近 7 天的聊天记录文件,用于备份或数据统计等。不建议使用该接口用于线上实时业务。

使用示例:

GetHistoryRequest request = GetHistoryRequest.builder()
+        .chatType(ChatType.C2C)
+        .msgTime("2015120121")
+        .build();
+
+GetHistoryResult result = client.operation.getHistory(request);
+

获取服务器 IP 地址

基于安全等考虑,您可能需要获知服务器的 IP 地址列表,以便进行相关限制。App 管理员可以通过该接口获得 SDK、第三方回调所使用到的服务器 IP 地址列表或 IP 网段信息。

注意

此接口仅支持获取中国大陆地区的所有 IM 接入方式的 IP 地址或 IP 网段信息。

使用示例:

GetIpListRequest request = new GetIpListRequest();
+
+GetIpListResult result = client.op~eration.getIpList(request);
+

聊天文件封禁

本接口用于封禁聊天消息中的富媒体文件。

说明

仅针对富媒体消息中使用 IM SDK 上传的文件有效,为了确保功能正常使用,请将终端 SDK 更新至 4.9.x 版本及以上,Web SDK 更新至 v2.0.0 版本及以上。

使用示例:

ForbidIllegalObjectRequest request = ForbidIllegalObjectRequest.builder()
+        .rawUrl("https://cos.ap-shanghai.myqcloud.com/005f-shanghai-360-shared-01-1256635546/76aa-1400152839/2f3b-2273451635034382/699eb4ee5ffa9aeb70627958766f2927-142072.jpg")
+        .build();
+
+ForbidIllegalObjectResult result = client.operation.forbidIllegalObject(request);
+

聊天文件解封

本接口用于解封聊天消息中的富媒体文件。

说明

仅针对富媒体消息中使用 IM SDK 上传的文件有效,为了确保功能正常使用,请将终端 SDK 更新至 4.9.x 版本及以上,Web SDK 更新至 v2.0.0 版本及以上。

AllowBannedObjectRequest request = AllowBannedObjectRequest.builder()
+        .rawUrl("https://cos.ap-shanghai.myqcloud.com/005f-shanghai-360-shared-01-1256635546/76aa-1400152839/2f3b-2273451635034382/699eb4ee5ffa9aeb70627958766f2927-142072.jpg")
+        .build();
+
+AllowBannedObjectResult result = client.operation.allowBannedObject(request);
+

聊天文件签名

本接口用于获取聊天消息中的富媒体文件 FULL_CONTROL 权限的 URL 签名以及文件状态信息,默认有效期 15 分钟。一般 SDK 下发的文件 URL 为普通账号签名,违规封禁后,可以使用 FULL_CONTROL 权限的 URL 签名来查看封禁的资源。

说明

仅针对富媒体消息中使用 IM SDK 上传的文件有效,为了确保功能正常使用,请将终端 SDK 更新至 4.9.x 版本及以上,Web SDK 更新至 v2.0.0 版本及以上。

RawUrlItem item = new RawUrlItem();
+item.setRawUrl("https://cos.ap-shanghai.myqcloud.com/98ec-shanghai-007-privatev2-01-1256635546/0345-1400187352/0612-yyy/9a0f4c42d208ccfb5aa47c29284aefc6.png");
+item.setResourceId(1);
+List<RawUrlItem> rawUrls = Collections.singletonList(item);
+GetCosSigRequest request = GetCosSigRequest.builder()
+        .rawUrls(rawUrls)
+        .build();
+
+GetCosSigResult result = client.operation.getCosSig(request);
+
`,28),l=[p];function c(i,o){return a(),n("div",null,l)}const r=s(t,[["render",c],["__file","operation_2.html.vue"]]),d=JSON.parse('{"path":"/guide/operation_2.html","title":"运营管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"拉取运营数据","slug":"拉取运营数据","link":"#拉取运营数据","children":[]},{"level":2,"title":"下载最近消息记录","slug":"下载最近消息记录","link":"#下载最近消息记录","children":[]},{"level":2,"title":"获取服务器 IP 地址","slug":"获取服务器-ip-地址","link":"#获取服务器-ip-地址","children":[]},{"level":2,"title":"聊天文件封禁","slug":"聊天文件封禁","link":"#聊天文件封禁","children":[]},{"level":2,"title":"聊天文件解封","slug":"聊天文件解封","link":"#聊天文件解封","children":[]},{"level":2,"title":"聊天文件签名","slug":"聊天文件签名","link":"#聊天文件签名","children":[]}],"git":{"updatedTime":1684979652000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":6},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":1}]},"filePathRelative":"guide/operation_2.md"}');export{r as comp,d as data}; diff --git a/assets/profile.html-DLb2acmP.js b/assets/profile.html-DLb2acmP.js new file mode 100644 index 00000000..ff217df1 --- /dev/null +++ b/assets/profile.html-DLb2acmP.js @@ -0,0 +1,20 @@ +import{_ as n,c as s,o as a,e as t}from"./app-DbaUbv7J.js";const e={},p=t(`

资料管理

设置资料

支持 标配资料字段自定义资料字段 的设置。

使用示例:

ProfileItem profileItem = ProfileItem.builder()
+        .tag(TagProfile.IM_NICK)
+        .value("MyNickName")
+        .build();
+List<ProfileItem> profiles = Collections.singletonList(profileItem);
+PortraitSetRequest request = PortraitSetRequest.builder()
+        .fromAccount("test1")
+        .profileItemList(profiles)
+        .build();
+
+PortraitSetResult result = client.profile.portraitSet(request);
+

拉取资料

  • 支持拉取好友和非好友的资料字段。
  • 支持拉取 标配资料字段自定义资料字段
  • 建议每次拉取的用户数不超过 100,避免因回包数据量太大导致回包失败。
  • 请确保请求中的所有账号都已导入即时通信 IM,如果请求中含有未导入即时通信 IM 的账号,即时通信 IM 后台将会提示错误。

使用示例:

List<String> tagList = Collections.singletonList(TagProfile.IM_NICK);
+List<String> toAccount = Collections.singletonList("test1");
+PortraitGetRequest request = PortraitGetRequest.builder()
+        .tagList(tagList)
+        .toAccount(toAccount)
+        .build();
+
+PortraitGetResult result = client.profile.portraitGet(request);
+
`,9),c=[p];function o(l,i){return a(),s("div",null,c)}const r=n(e,[["render",o],["__file","profile.html.vue"]]),k=JSON.parse('{"path":"/guide/profile.html","title":"资料管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"设置资料","slug":"设置资料","link":"#设置资料","children":[]},{"level":2,"title":"拉取资料","slug":"拉取资料","link":"#拉取资料","children":[]}],"git":{"updatedTime":1696847753000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":2},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1}]},"filePathRelative":"guide/profile.md"}');export{r as comp,k as data}; diff --git a/assets/quickstart.html-DXobG64g.js b/assets/quickstart.html-DXobG64g.js new file mode 100644 index 00000000..a4247d8a --- /dev/null +++ b/assets/quickstart.html-DXobG64g.js @@ -0,0 +1,34 @@ +import{_ as t,r as e,c as p,a as c,b as n,d as l,w as o,e as s,o as i}from"./app-DbaUbv7J.js";const d={},u=s(`

快速上手

安装

Maven

在项目的 pom.xml 的 dependencies 中引入以下依赖:

<dependency>
+  <groupId>io.github.doocs</groupId>
+  <artifactId>im-server-sdk-java</artifactId>
+  <version>0.4.06</version>
+</dependency>
+

Gradle

implementation group: 'io.github.doocs', name: 'im-server-sdk-java', version: '0.4.06'
+

下载 JAR

Maven 中央仓库

初始化

在使用腾讯云即时 IM 服务端 REST API 之前, 需要先通过 appId, userId, key 获取到一个 ImClient 实例:

// sdk appId
+long appId = 1400554812;
+
+// admin userId
+String userId = "test";
+
+// application key
+String key = "60c6c5925f3ae52c7325ac5a8ec78e44c056d1dd84d54e12ffa39911267a2a70";
+
+// create a default ImClient instance
+ImClient client = ImClient.getInstance(appId, userId, key);
+
+// create a default ImClient instance with custom domain
+ImClient client = ImClient.getInstance(appId, userId, key, Domain.SINGAPORE);
+
+// create a custom ImClient instance
+ClientConfiguration config = new ClientConfiguration();
+config.setExpireTime(7 * 24 * 60 * 60L);
+config.setAutoRenewSig(false);
+ImClient client = ImClient.getInstance(appId, userId, key, config);
+

ClientConfiguration 支持对以下参数进行自定义配置:

字段类型说明默认值
maxRetriesintHTTP 最大重试次数3
connectTimeoutlongHTTP 连接超时(毫秒)10_000
readTimeoutlongHTTP 读超时(毫秒)10_000
writeTimeoutlongHTTP 写超时(毫秒)10_000
callTimeoutlong一个完整的 HTTP 调用的时间限制。这包括解析 DNS、连接、写入请求正文、服务器处理以及读取响应正文。(毫秒)30_000
expireTimelongUserSig 签名有效时长(秒)86400
autoRenewSigboolean是否自动进行 UserSig 签名续期true
userAgentstringUser-Agent
connectionPoolobjectHTTP 连接池

使用示例

获取到 ImClient 实例后,就可以方便地进行 REST API 调用了。

`,16),r=s(`
AccountImportRequest request = AccountImportRequest.builder()
+        .identifier("admin")
+        .faceUrl("https://avatars.githubusercontent.com/u/43716716?s=200&v=4")
+        .nick("doocs")
+        .build();
+
+AccountImportResult result = client.account.accountImport(request);
+
`,1);function k(m,g){const a=e("RouteLink");return i(),p("div",null,[u,c("p",null,[n("我们以 "),l(a,{to:"/guide/account.html#%E5%AF%BC%E5%85%A5%E5%8D%95%E4%B8%AA%E8%B4%A6%E5%8F%B7"},{default:o(()=>[n("账号管理-导入单个账号")]),_:1}),n(" 为例:")]),r])}const h=t(d,[["render",k],["__file","quickstart.html.vue"]]),b=JSON.parse('{"path":"/guide/quickstart.html","title":"快速上手","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"安装","slug":"安装","link":"#安装","children":[{"level":3,"title":"Maven","slug":"maven","link":"#maven","children":[]},{"level":3,"title":"Gradle","slug":"gradle","link":"#gradle","children":[]},{"level":3,"title":"下载 JAR","slug":"下载-jar","link":"#下载-jar","children":[]}]},{"level":2,"title":"初始化","slug":"初始化","link":"#初始化","children":[]},{"level":2,"title":"使用示例","slug":"使用示例","link":"#使用示例","children":[]}],"git":{"updatedTime":1724225353000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":46},{"name":"yanglbme","email":"szuyanglb@outlook.com","commits":16},{"name":"Libin YANG","email":"szuyanglb@outlook.com","commits":3},{"name":"Antenbabby","email":"18116874+Antenbabby@users.noreply.github.com","commits":2},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":2},{"name":"acbin","email":"44314231+acbin@users.noreply.github.com","commits":1},{"name":"yu","email":"502400992@qq.com","commits":1}]},"filePathRelative":"guide/quickstart.md"}');export{h as comp,b as data}; diff --git a/assets/recent_contact.html-CjEIqo_Q.js b/assets/recent_contact.html-CjEIqo_Q.js new file mode 100644 index 00000000..fa8b4035 --- /dev/null +++ b/assets/recent_contact.html-CjEIqo_Q.js @@ -0,0 +1,79 @@ +import{_ as n,c as s,o as a,e as t}from"./app-DbaUbv7J.js";const p={},e=t(`

最近联系人

拉取会话列表

支持分页拉取会话列表。

使用示例:

GetRecentContactListRequest request = GetRecentContactListRequest.builder()
+        .fromAccount("doocs")
+        .timestamp(0)
+        .startIndex(0)
+        .topTimestamp(0)
+        .topStartIndex(0)
+        .assistFlags(AssistFlags.BIT_0)
+        .build();
+
+GetRecentContactListResult result = client.recentContact.recentContactList(request);
+

删除单个会话

删除指定会话,支持同步清理漫游消息。

使用示例:

DeleteRecentContactRequest request = DeleteRecentContactRequest.builder()
+        .fromAccount("doocs_1")
+        .type(RecentContactType.C2C)
+        .toAccount("doocs_2")
+        .clearRamble(ClearRamble.YES)
+        .build();
+
+DeleteRecentContactResult result = client.recentContact.deleteRecentContact(request);
+

创建会话分组数据

会话分组标记数据独立于最近联系人,RestAPI 支持会话分组、会话标准标记、会话自定义标记等字段增删改查。会话分组标记最多支持 1000 个会话,而一个用户最多支持 20 个会话分组。本接口支持会话分组数据的创建,仅旗舰版支持会话分组数据操作。

使用示例:

List<GroupContactItem> items = new ArrayList<>();
+GroupContactItem item = new GroupContactItem();
+item.setGroupName("groupName");
+
+List<ContactItem> contactItems = new ArrayList<>();
+ContactItem contactItem = new ContactItem();
+contactItem.setToAccount("ccc");
+contactItem.setToGroupId("group1");
+contactItem.setType(1);
+contactItems.add(contactItem);
+item.setContactItem(contactItems);
+items.add(item);
+CreateContactGroupRequest request = CreateContactGroupRequest.builder()
+        .fromAccount("test1")
+        .groupContactItem(items).build();
+
+CreateContactGroupResult result = client.recentContact.createContactGroup(request);
+

更新会话分组数据

会话分组标记数据独立于最近联系人,RestAPI 支持会话分组、会话标准标记、会话自定义标记等字段增删改查。会话分组标记数据最多支持 1000 个会话。本接口支持会话分组数据的更新,仅旗舰版支持会话分组数据操作。

使用示例:

UpdateGroup updateGroup = UpdateGroup.builder().updateGroupType(1)
+        .newGroupName("hh").oldGroupName("cc").build();
+UpdateContactGroupRequest request = UpdateContactGroupRequest.builder()
+        .updateType(1)
+        .fromAccount("test1")
+        .updateGroup(updateGroup)
+        .build();
+
+UpdateContactGroupResult result = client.recentContact.updateContactGroup(request);
+

删除会话分组数据

本接口支持删除用户的会话分组数据,仅旗舰版支持会话分组数据操作。

使用示例:

List<String> groupName = new ArrayList<>();
+groupName.add("hh");
+DelContactGroupRequest request = DelContactGroupRequest.builder()
+        .groupName(groupName)
+        .fromAccount("test1")
+        .build();
+
+DelContactGroupResult result = client.recentContact.delContactGroup(request);
+

创建或更新会话标记数据

会话分组标记数据独立于最近联系人,RestAPI 支持会话分组、会话标准标记、会话自定义标记等字段增删改查。会话分组标记最多支持 1000 个会话。本接口支持会话标准标记以及会话自定义标记的创建或更新,仅旗舰版支持会话标准标记数据操作,自定义会话标记数据无限制。

使用示例:

List<MarkContactItem> items = new ArrayList<>();
+MarkContactItem item = new MarkContactItem();
+item.setClearMark(Collections.singletonList(1));
+item.setSetMark(Collections.singletonList(2));
+item.setOptType(1);
+items.add(item);
+MarkContactRequest request = MarkContactRequest.builder()
+        .fromAccount("test1")
+        .markItem(items)
+        .build();
+
+MarkContactResult result = client.recentContact.markContact(request);
+

搜索会话分组标记

本接口根据指定的会话来查询对应会话分组标记数据。

使用示例:

SearchContactGroupRequest request = new SearchContactGroupRequest();
+request.setFromAccount("test1");
+ContactItem contactItem = new ContactItem();
+contactItem.setType(1);
+contactItem.setToAccount("test2");
+contactItem.setToGroupId("123");
+request.setContactItem(Collections.singletonList(contactItem));
+
+SearchContactGroupResult result = client.recentContact.searchContactGroup(request);
+

拉取会话分组标记数据

本接口支持批量获取用户的会话分组标记数据。

使用示例:

GetContactGroupRequest request = new GetContactGroupRequest();
+request.setFromAccount("test1");
+request.setStartIndex(1);
+
+GetContactGroupResult result = client.recentContact.getContactGroup(request);
+
`,33),c=[e];function o(l,u){return a(),s("div",null,c)}const k=n(p,[["render",o],["__file","recent_contact.html.vue"]]),r=JSON.parse('{"path":"/guide/recent_contact.html","title":"最近联系人","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"拉取会话列表","slug":"拉取会话列表","link":"#拉取会话列表","children":[]},{"level":2,"title":"删除单个会话","slug":"删除单个会话","link":"#删除单个会话","children":[]},{"level":2,"title":"创建会话分组数据","slug":"创建会话分组数据","link":"#创建会话分组数据","children":[]},{"level":2,"title":"更新会话分组数据","slug":"更新会话分组数据","link":"#更新会话分组数据","children":[]},{"level":2,"title":"删除会话分组数据","slug":"删除会话分组数据","link":"#删除会话分组数据","children":[]},{"level":2,"title":"创建或更新会话标记数据","slug":"创建或更新会话标记数据","link":"#创建或更新会话标记数据","children":[]},{"level":2,"title":"搜索会话分组标记","slug":"搜索会话分组标记","link":"#搜索会话分组标记","children":[]},{"level":2,"title":"拉取会话分组标记数据","slug":"拉取会话分组标记数据","link":"#拉取会话分组标记数据","children":[]}],"git":{"updatedTime":1684979652000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":3}]},"filePathRelative":"guide/recent_contact.md"}');export{k as comp,r as data}; diff --git a/assets/robot.html-ue2yf_EY.js b/assets/robot.html-ue2yf_EY.js new file mode 100644 index 00000000..d895c061 --- /dev/null +++ b/assets/robot.html-ue2yf_EY.js @@ -0,0 +1,14 @@ +import{_ as s,c as n,o as a,e as t}from"./app-DbaUbv7J.js";const e={},p=t(`

机器人

创建机器人

本接口用于创建一个机器人账号,机器人是一种特殊账号,userid 必须以 @RBT# 开头,创建机器人时可以指定设置昵称、头像和签名。

说明

  • 同一个机器人账号 userid 重复创建仅会创建 1 个机器人。
  • 每个 IM 账号只能创建最多 20 个机器人账号。

使用示例:

CreateRobotRequest request = new CreateRobotRequest();
+request.setNick("bingo");
+request.setFaceUrl("https://avatars.githubusercontent.com/u/2784452?v=4");
+request.setSelfSignature("hah");
+request.setUserId("@RBT#1233232");
+
+CreateRobotResult result = client.robot.createRobot(request);
+

删除机器人

本接口用于将一个机器人账号设置为无效,机器人是一种特殊账号,userid 必须以 @RBT# 开头。

说明

  • 本接口将一个机器人账号设置为无效。
  • 机器人账号 UserID 本身不会被删除。

使用示例:

DeleteRobotRequest request = DeleteRobotRequest.builder().robotAccount("@RBT#1233232").build();
+
+DeleteRobotResult result = client.robot.deleteRobot(request);
+

拉取所有机器人

本接口用于拉取所有的机器人账号列表,机器人是一种特殊账号,userid 必须以 @RBT# 开头。

使用示例:

GetAllRobotsRequest request = new GetAllRobotsRequest();
+
+GetAllRobotsResult result = client.robot.getAllRobots(request);
+
`,15),l=[p];function o(c,i){return a(),n("div",null,l)}const r=s(e,[["render",o],["__file","robot.html.vue"]]),d=JSON.parse('{"path":"/guide/robot.html","title":"机器人","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"创建机器人","slug":"创建机器人","link":"#创建机器人","children":[]},{"level":2,"title":"删除机器人","slug":"删除机器人","link":"#删除机器人","children":[]},{"level":2,"title":"拉取所有机器人","slug":"拉取所有机器人","link":"#拉取所有机器人","children":[]}],"git":{"updatedTime":1690371416000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":1}]},"filePathRelative":"guide/robot.md"}');export{r as comp,d as data}; diff --git a/assets/sns.html-CNdoMAOn.js b/assets/sns.html-CNdoMAOn.js new file mode 100644 index 00000000..4e1db7f8 --- /dev/null +++ b/assets/sns.html-CNdoMAOn.js @@ -0,0 +1,137 @@ +import{_ as n,c as s,o as a,e as t}from"./app-DbaUbv7J.js";const p={},e=t(`

关系链管理

添加好友

添加好友,支持批量添加好友。

使用示例:

AddFriendItem addFriendItem = AddFriendItem.builder()
+        .toAccount("test2")
+        .addSource("AddSource_Type_XXXXXXXX")
+        .remark("Mr.A")
+        .groupName("schoolmate")
+        .addWording("Hi")
+        .build();
+List<AddFriendItem> addFriendItemList = Collections.singletonList(addFriendItem);
+FriendAddRequest request = FriendAddRequest.builder()
+        .fromAccount("test1")
+        .addFriendItemList(addFriendItemList)
+        .addType(AddType.BOTH)
+        .forceAddFlags(ForceAddFlags.FORCE)
+        .build();
+
+FriendAddResult result = client.sns.friendAdd(request);
+

导入好友

  • 支持批量导入单向好友。
  • 往同一个用户导入好友时建议采用批量导入的方式,避免并发写导致的写冲突。

使用示例:

ImportFriendItem importFriendItem = ImportFriendItem.builder()
+        .toAccount("test2")
+        .addSource("AddSource_Type_XXXXXXXX")
+        .build();
+List<ImportFriendItem> importFriendItems = Collections.singletonList(importFriendItem);
+FriendImportRequest request = FriendImportRequest.builder()
+        .fromAccount("test1")
+        .importFriendItemList(importFriendItems)
+        .build();
+
+FriendImportResult result = client.sns.friendImport(request);
+

更新好友

  • 支持批量更新同一用户的多个好友的关系链数据。
  • 更新一个用户多个好友时,建议采用批量方式,避免并发写导致的写冲突。

使用示例:

SnsItem snsItem = SnsItem.builder()
+        .tag("Tag_SNS_Custom_testTag")
+        .value(TagSns.IM_ADD_WORDING)
+        .build();
+List<SnsItem> snsItems = Collections.singletonList(snsItem);
+UpdateItem updateItem = UpdateItem.builder()
+        .toAccount("test2")
+        .snsItemList(snsItems)
+        .build();
+List<UpdateItem> updateItems = Collections.singletonList(updateItem);
+FriendUpdateRequest request = FriendUpdateRequest.builder()
+        .fromAccount("test1")
+        .updateItemList(updateItems)
+        .build();
+
+FriendUpdateResult result = client.sns.friendUpdate(request);
+

删除好友

删除好友,支持单向删除好友和双向删除好友。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+FriendDeleteRequest request = FriendDeleteRequest.builder()
+        .deleteType(DeleteType.BOTH)
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .build();
+
+FriendDeleteResult result = client.sns.friendDelete(request);
+

删除所有好友

清除指定用户的标配好友数据和自定义好友数据。

使用示例:

FriendDeleteAllRequest request = FriendDeleteAllRequest.builder()
+        .deleteType(DeleteType.BOTH)
+        .fromAccount("test1")
+        .build();
+
+FriendDeleteAllResult result = client.sns.friendDeleteAll(request);
+

校验好友

支持批量校验好友关系。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+FriendCheckRequest request = FriendCheckRequest.builder()
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .checkType(CheckResultType.BOTH)
+        .build();
+
+FriendCheckResult result = client.sns.friendCheck(request);
+

拉取好友

  • 分页拉取全量好友数据。
  • 不支持资料数据的拉取。
  • 不需要指定请求拉取的字段,默认返回全量的标配好友数据和自定义好友数据。

使用示例:

FriendGetRequest request = FriendGetRequest.builder()
+        .fromAccount("test1")
+        .startIndex(0)
+        .standardSequence(0)
+        .customSequence(0)
+        .build();
+
+FriendGetResult result = client.sns.friendGet(request);
+

拉取指定好友

  • 支持拉取指定好友的好友数据和资料数据。
  • 建议每次拉取的好友数不超过 100,避免因数据量太大导致回包失败。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+List<String> tagList = Arrays.asList(TagProfile.IM_ADMIN_FORBID_TYPE, TagProfile.IM_ALLOW_TYPE);
+FriendGetListRequest request = FriendGetListRequest.builder()
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .tagList(tagList)
+        .build();
+
+FriendGetListResult result = client.sns.friendGetList(request);
+

添加黑名单

添加黑名单,支持批量添加黑名单。

注意

  • 如果用户 A 与用户 B 之间存在好友关系,拉黑时会解除双向好友关系。
  • 如果用户 A 与用户 B 之间存在黑名单关系,二者之间无法发起加好友请求。
  • 如果用户 A 的黑名单中有用户 B 且用户 B 的黑名单中有用户 A,二者之间无法发起会话。
  • 如果用户 A 的黑名单中有用户 B 但用户 B 的黑名单中没有用户 A,那么用户 A 可以给用户 B 发消息,用户 B 不能给用户 A 发消息。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+BlackListAddRequest request = BlackListAddRequest.builder()
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .build();
+
+BlackListAddResult result = client.sns.blackListAdd(request);
+

删除黑名单

删除指定黑名单。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+BlackListDeleteRequest request = BlackListDeleteRequest.builder()
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .build();
+
+BlackListDeleteResult result = client.sns.blackListDelete(request);
+

拉取黑名单

支持分页拉取所有黑名单。

使用示例:

BlackListGetRequest request = BlackListGetRequest.builder()
+        .fromAccount("test1")
+        .startIndex(0)
+        .maxLimited(10)
+        .lastSequence(0)
+        .build();
+
+BlackListGetResult result = client.sns.blackListGet(request);
+

校验黑名单

支持批量校验黑名单。

使用示例:

List<String> toAccount = Collections.singletonList("test2");
+BlackListCheckRequest request = BlackListCheckRequest.builder()
+        .fromAccount("test1")
+        .toAccount(toAccount)
+        .checkType(BlackCheckResultType.BOTH)
+        .build();
+
+BlackListCheckResult result = client.sns.blackListCheck(request);
+

添加分组

添加分组,支持批量添加分组,并将指定好友加入到新增分组中。

使用示例:

List<String> groupName = Collections.singletonList("classmate");
+List<String> toAccount = Collections.singletonList("test2");
+GroupAddRequest request = GroupAddRequest.builder()
+        .fromAccount("test1")
+        .groupName(groupName)
+        .toAccount(toAccount)
+        .build();
+
+GroupAddResult result = client.sns.groupAdd(request);
+

删除分组

删除指定分组。

使用示例:

List<String> groupName = Collections.singletonList("classmate");
+GroupDeleteRequest request = GroupDeleteRequest.builder()
+        .fromAccount("test1")
+        .groupName(groupName)
+        .build();
+
+GroupDeleteResult result = client.sns.groupDelete(request);
+

拉取分组

拉取分组,支持指定分组以及拉取分组下的好友列表。

使用示例:

List<String> groupName = Collections.singletonList("classmate");
+GroupGetRequest request = GroupGetRequest.builder()
+        .fromAccount("test1")
+        .groupName(groupName)
+        .needFriend(NeedFriendType.YES)
+        .build();
+
+GroupGetResult result = client.sns.groupGet(request);
+
`,62),c=[e];function l(o,i){return a(),s("div",null,c)}const k=n(p,[["render",l],["__file","sns.html.vue"]]),r=JSON.parse('{"path":"/guide/sns.html","title":"关系链管理","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"添加好友","slug":"添加好友","link":"#添加好友","children":[]},{"level":2,"title":"导入好友","slug":"导入好友","link":"#导入好友","children":[]},{"level":2,"title":"更新好友","slug":"更新好友","link":"#更新好友","children":[]},{"level":2,"title":"删除好友","slug":"删除好友","link":"#删除好友","children":[]},{"level":2,"title":"删除所有好友","slug":"删除所有好友","link":"#删除所有好友","children":[]},{"level":2,"title":"校验好友","slug":"校验好友","link":"#校验好友","children":[]},{"level":2,"title":"拉取好友","slug":"拉取好友","link":"#拉取好友","children":[]},{"level":2,"title":"拉取指定好友","slug":"拉取指定好友","link":"#拉取指定好友","children":[]},{"level":2,"title":"添加黑名单","slug":"添加黑名单","link":"#添加黑名单","children":[]},{"level":2,"title":"删除黑名单","slug":"删除黑名单","link":"#删除黑名单","children":[]},{"level":2,"title":"拉取黑名单","slug":"拉取黑名单","link":"#拉取黑名单","children":[]},{"level":2,"title":"校验黑名单","slug":"校验黑名单","link":"#校验黑名单","children":[]},{"level":2,"title":"添加分组","slug":"添加分组","link":"#添加分组","children":[]},{"level":2,"title":"删除分组","slug":"删除分组","link":"#删除分组","children":[]},{"level":2,"title":"拉取分组","slug":"拉取分组","link":"#拉取分组","children":[]}],"git":{"updatedTime":1643080656000,"contributors":[{"name":"Yang Libin","email":"szuyanglb@outlook.com","commits":4},{"name":"怡蘅","email":"hongyihengg@gmail.com","commits":1}]},"filePathRelative":"guide/sns.md"}');export{k as comp,r as data}; diff --git a/assets/style-CU2Kg4P2.css b/assets/style-CU2Kg4P2.css new file mode 100644 index 00000000..fd6d09a9 --- /dev/null +++ b/assets/style-CU2Kg4P2.css @@ -0,0 +1 @@ +@charset "UTF-8";.vp-back-to-top-button{position:fixed!important;bottom:4rem;inset-inline-end:1rem;z-index:100;width:48px;height:48px;padding:12px;border-width:0;border-radius:50%;background:var(--back-to-top-bg-color);color:var(--back-to-top-color);box-shadow:2px 2px 10px 4px var(--back-to-top-shadow);cursor:pointer}@media (max-width: 959px){.vp-back-to-top-button{transform:scale(.8);transform-origin:100% 100%}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--back-to-top-color-hover)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:24px;height:24px;margin:0 auto;background:var(--back-to-top-icon-color);-webkit-mask-image:var(--back-to-top-icon);mask-image:var(--back-to-top-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:cover;mask-size:cover}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:52px;height:52px}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;transform:rotate(-90deg);transform-origin:50% 50%}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--back-to-top-z-index: 5;--back-to-top-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cpath%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='4'%20d='M24.008%2014.1V42M12%2026l12-12l12%2012M12%206h24'%20/%3e%3c/svg%3e");--back-to-top-bg-color: #fff;--back-to-top-color: #3eaf7c;--back-to-top-icon-color: currentcolor;--back-to-top-color-hover: #71cda3;--back-to-top-shadow: rgb(0 0 0 / 20%)}:root{--code-copy-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2' /%3e%3c/svg%3e");--code-copied-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4' /%3e%3c/svg%3e");--copy-code-color: #9e9e9e;--copy-code-hover: rgb(0 0 0 / 50%)}.vp-copy-code-button{position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-width:0;border-radius:.5rem;background:transparent;outline:none;opacity:0;cursor:pointer;transition:opacity .4s}@media print{.vp-copy-code-button{display:none}}.vp-copy-code-button:before{content:"";display:inline-block;width:1.25rem;height:1.25rem;padding:.625rem;background:currentcolor;color:var(--copy-code-color);font-size:1.25rem;-webkit-mask-image:var(--code-copy-icon);mask-image:var(--code-copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:1em;mask-size:1em}.vp-copy-code-button:focus,.vp-copy-code-button.copied{opacity:1}.vp-copy-code-button:hover,.vp-copy-code-button.copied{background:var(--copy-code-hover)}.vp-copy-code-button.copied:before{-webkit-mask-image:var(--code-copied-icon);mask-image:var(--code-copied-icon)}.vp-copy-code-button.copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--copy-code-hover);color:var(--copy-code-color);font-weight:500;line-height:1.25rem;white-space:nowrap}.copy-code-disabled .vp-copy-code-button{display:none}body:not(.copy-code-disabled) div[class*=language-]:hover:before{display:none}body:not(.copy-code-disabled) div[class*=language-]:hover .vp-copy-code-button{opacity:1}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #fff;--medium-zoom-opacity: 1}.medium-zoom-overlay{z-index:var(--medium-zoom-z-index);background-color:var(--medium-zoom-bg-color)!important}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:var(--nprogress-z-index);width:100%;height:2px;background:var(--nprogress-color)}.vp-badge{display:inline-block;vertical-align:top;height:18px;padding:0 6px;border-radius:3px;color:var(--c-bg);font-weight:600;font-size:14px;line-height:18px;transition:color var(--t-color),background-color var(--t-color)}.vp-badge.tip{background-color:var(--c-badge-tip)}.vp-badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.vp-badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.vp-badge+.vp-badge{margin-left:5px}.code-group-nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-top:10px;padding-bottom:calc(1.7rem - 6px);padding-left:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--c-code-group-tab-bg)}@media (max-width: 419px){.code-group-nav{margin-right:-1.5rem;margin-left:-1.5rem;border-radius:0}}.code-group-nav-tab{padding:5px;border:0;background-color:transparent;color:var(--c-code-group-tab-title);font-weight:600;font-size:.85em;line-height:1.4;cursor:pointer}.code-group-nav-tab:focus{outline:none}.code-group-nav-tab:focus-visible{outline:1px solid var(--c-code-group-tab-outline)}.code-group-nav-tab.active{border-bottom:var(--c-code-group-tab-active-border) 1px solid}.code-group-item{display:none}.code-group-item.active{display:block}.code-group-item>pre{background-color:orange}.vp-features{display:flex;flex-wrap:wrap;align-items:flex-start;place-content:stretch space-between;margin-top:2.5rem;padding:1.2rem 0;border-top:1px solid var(--c-border);transition:border-color var(--t-color)}@media (max-width: 719px){.vp-features{flex-direction:column}}.vp-feature{flex-grow:1;flex-basis:30%;max-width:30%}@media (max-width: 719px){.vp-feature{max-width:100%;padding:0 2.5rem}}.vp-feature h2{padding-bottom:0;border-bottom:none;color:var(--c-text-light);font-weight:500;font-size:1.4rem}@media (max-width: 419px){.vp-feature h2{font-size:1.25rem}}.vp-feature p{color:var(--c-text-lighter)}.vp-footer{padding:2.5rem;border-top:1px solid var(--c-border);color:var(--c-text-lighter);text-align:center;transition:border-color var(--t-color)}.vp-hero{text-align:center}.vp-hero-image{display:block;max-width:100%;max-height:280px;margin:3rem auto 1.5rem}@media (max-width: 419px){.vp-hero-image{max-height:210px;margin:2rem auto 1.2rem}}#main-title{font-size:3rem}@media (max-width: 419px){#main-title{font-size:2rem}}#main-title,.vp-hero-description,.vp-hero-actions{margin:1.8rem auto}@media (max-width: 419px){#main-title,.vp-hero-description,.vp-hero-actions{margin:1.2rem auto}}.vp-hero-actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.vp-hero-description{max-width:35rem;color:var(--c-text-lightest);font-size:1.6rem;line-height:1.3}@media (max-width: 419px){.vp-hero-description{font-size:1.2rem}}.vp-hero-action-button{display:inline-block;box-sizing:border-box;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;font-size:1.2rem;transition:background-color var(--t-color)}@media (max-width: 419px){.vp-hero-action-button{padding:.6rem 1.2rem;font-size:1rem}}.vp-hero-action-button.primary{border-color:var(--c-brand);background-color:var(--c-brand);color:var(--c-bg)}.vp-hero-action-button.primary:hover{background-color:var(--c-brand-light)}.vp-hero-action-button.secondary{border-color:var(--c-brand);background-color:var(--c-bg);color:var(--c-brand)}.vp-hero-action-button.secondary:hover{background-color:var(--c-brand-light);color:var(--c-bg)}.vp-home{display:block;max-width:var(--homepage-width);margin:0 auto;padding:var(--navbar-height) 2rem 0}@media (max-width: 419px){.vp-home{padding-right:1.5rem;padding-left:1.5rem}}.vp-home .theme-default-content{margin:0;padding:0}.vp-site-logo{vertical-align:top;height:var(--navbar-line-height);margin-right:var(--navbar-padding-v)}.vp-site-name{position:relative;color:var(--c-text);font-weight:600;font-size:1.3rem}@media screen and (max-width: 719px){.vp-site-name{display:block;overflow:hidden;width:calc(100vw - 11rem);text-overflow:ellipsis;white-space:nowrap}}.vp-dropdown-enter-from,.vp-dropdown-leave-to{height:0!important}.vp-navbar-dropdown-wrapper{cursor:pointer}.vp-navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.vp-navbar-dropdown-wrapper:not(.mobile):hover .vp-navbar-dropdown,.vp-navbar-dropdown-wrapper:not(.mobile).open .vp-navbar-dropdown{display:block!important}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown{overflow:hidden;transition:height .1s ease-out;padding-top:.5rem}.vp-navbar-dropdown-wrapper:not(.mobile) .vp-navbar-dropdown{position:absolute;top:100%;right:0;display:none;overflow-y:auto;box-sizing:border-box;height:auto!important;max-height:calc(100vh - 2.7rem);margin:0;padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);border-radius:.25rem;background-color:var(--c-bg-navbar);text-align:left;white-space:nowrap}.vp-navbar-dropdown-title{display:block;padding:inherit;border:none;background:transparent;color:var(--c-text);font-weight:500;font-size:.9rem;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title{display:none}.vp-navbar-dropdown-title:hover{border-color:transparent}.vp-navbar-dropdown-title-mobile{display:none;padding:inherit;border:none;background:transparent;color:var(--c-text);font-weight:600;font-size:inherit;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title-mobile{display:block}.vp-navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.vp-navbar-dropdown-item{color:inherit;line-height:1.7rem}.vp-navbar-dropdown-item a{position:relative;display:block;margin-bottom:0;padding:0 1.5rem 0 1.25rem;border-bottom:none;font-weight:400;line-height:1.7rem}.vp-navbar-dropdown-item a:hover,.vp-navbar-dropdown-item a.route-link-active{color:var(--c-text-accent)}.vp-navbar-dropdown-item a.route-link-active:after{content:"";position:absolute;top:calc(50% - 2px);left:9px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid var(--c-text-accent)}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-item>a{font-size:15px;line-height:2rem}.vp-navbar-dropdown-subtitle{margin:.45rem 0 0;padding:1rem 0 .45rem;border-top:1px solid var(--c-border);font-size:.9rem}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;padding-bottom:0;border-top:0;font-size:15px;line-height:2rem}.vp-navbar-dropdown-item:first-child .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.vp-navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.vp-navbar-dropdown-subtitle>a{font-weight:inherit}.vp-navbar-dropdown-subtitle>a.route-link-active:after{display:none}.vp-navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.vp-navbar-dropdown-subitem{font-size:.9em}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subitem{padding-left:1rem;font-size:14px}.vp-navbar-items{display:inline-block}@media print{.vp-navbar-items{display:none}}.vp-navbar-items a{display:inline-block;color:inherit;line-height:1.4rem}.vp-navbar-items a:hover,.vp-navbar-items a.route-link-active{color:var(--c-text)}.vp-navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}@media (max-width: 719px){.vp-navbar-item{margin-left:0}}.vp-navbar-item:first-child{margin-left:0}.vp-navbar-item a:hover,.vp-navbar-item a.route-link-active{color:var(--c-text-accent)}.vp-navbar-item>a:hover,.vp-navbar-item>a.route-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.vp-navbar-item>a:hover,.vp-navbar-item>a.route-link-active{margin-bottom:0;border-bottom:none}}.vp-toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.vp-toggle-color-mode-button{display:none}}.vp-toggle-color-mode-button:hover{opacity:1}.vp-toggle-color-mode-button .light-icon,.vp-toggle-color-mode-button .dark-icon{width:1.25rem;height:1.25rem}.vp-toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block}}.vp-toggle-sidebar-button .icon{display:flex;flex-direction:column;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;cursor:inherit}.vp-toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.vp-toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1),.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );position:fixed;top:0;right:0;left:0;z-index:20;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-padding-v) var(--navbar-padding-h);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);line-height:var(--navbar-line-height);transition:background-color var(--t-color),border-color var(--t-color)}@media screen and (max-width: 719px){.vp-navbar{padding-left:4rem}}.vp-navbar-items-wrapper{position:absolute;top:var(--navbar-padding-v);right:var(--navbar-padding-h);display:flex;box-sizing:border-box;height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);font-size:.9rem;white-space:nowrap}.vp-page-meta{max-width:var(--content-width);margin:0 auto;padding:.75rem 2.5rem;display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto}@media (max-width: 959px){.vp-page-meta{padding:2rem}}@media (max-width: 419px){.vp-page-meta{padding:1.5rem}}@media print{.vp-page-meta{margin:0!important;padding-right:0!important;padding-left:0!important}}@media (max-width: 719px){.vp-page-meta{display:block}}.vp-page-meta .vp-meta-item{flex-grow:1}.vp-page-meta .vp-meta-item .vp-meta-label{font-weight:500}.vp-page-meta .vp-meta-item .vp-meta-label:not(a){color:var(--c-text-lighter)}.vp-page-meta .vp-meta-item .vp-meta-info{color:var(--c-text-quote);font-weight:400}.vp-page-meta .git-info{text-align:end}.vp-page-meta .edit-link{margin-top:.25rem;margin-right:.5rem;margin-bottom:.25rem;font-size:14px}@media print{.vp-page-meta .edit-link{display:none}}.vp-page-meta .edit-link .edit-icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-right:.25em}.vp-page-meta .last-updated,.vp-page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.vp-page-meta .last-updated,.vp-page-meta .contributors{font-size:13px;text-align:start}}.vp-page-nav{display:flex;flex-wrap:wrap;max-width:var(--content-width, 740px);min-height:2rem;margin-top:0;margin-right:auto;margin-left:auto;padding:1rem 2rem 0;border-top:1px solid var(--c-border);transition:border-top var(--t-color)}@media (max-width: 959px){.vp-page-nav{padding-right:1rem;padding-left:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .route-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--c-border);border-radius:.25rem}.vp-page-nav .route-link:hover{background:var(--c-bg-light)}.vp-page-nav .route-link .hint{color:var(--c-text-quote);font-size:.875rem;line-height:2}.vp-page-nav .prev{text-align:start}.vp-page-nav .next{text-align:end}.vp-page{display:block;padding-top:var(--navbar-height);padding-bottom:2rem;padding-left:var(--sidebar-width)}@media (max-width: 959px){.vp-page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.vp-page{padding-left:0}}.vp-page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.vp-page .theme-default-content{padding:2rem}}@media (max-width: 419px){.vp-page .theme-default-content{padding:1.5rem}}.vp-sidebar-item{border-left:.25rem solid transparent;color:var(--c-text);cursor:default}.vp-sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.vp-sidebar-item.vp-sidebar-heading{box-sizing:border-box;width:100%;margin:0;padding:.35rem 1.5rem .35rem 1.25rem;font-weight:700;font-size:1.1em;transition:color .15s ease}.vp-sidebar-item.vp-sidebar-heading+.vp-sidebar-children{overflow:hidden;transition:height .1s ease-out;margin-bottom:.75rem}.vp-sidebar-item.collapsible{cursor:pointer}.vp-sidebar-item:not(.vp-sidebar-heading){display:inline-block;box-sizing:border-box;width:100%;margin:0;padding:.35rem 1rem .35rem 2rem;font-weight:400;font-size:1em;line-height:1.4}.vp-sidebar-item:not(.vp-sidebar-heading)+.vp-sidebar-children{padding-left:1rem;font-size:.95em}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent;font-weight:500}a.vp-sidebar-heading+.vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent}.vp-sidebar-item.active:not(p.vp-sidebar-heading){border-left-color:var(--c-text-accent);color:var(--c-text-accent);font-weight:600}a.vp-sidebar-item{cursor:pointer}a.vp-sidebar-item:hover{color:var(--c-text-accent)}.vp-sidebar-items{margin:0;padding:1.5rem 0;list-style-type:none}@media (max-width: 719px){.vp-sidebar-items{padding:1rem 0}}.vp-sidebar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar-items a{display:inline-block}.vp-sidebar{position:fixed;top:var(--navbar-height);bottom:0;left:0;z-index:10;overflow-y:auto;box-sizing:border-box;width:var(--sidebar-width);margin:0;border-right:1px solid var(--c-border);background-color:var(--c-bg-sidebar);font-size:16px;transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color);scrollbar-color:var(--c-brand) var(--c-border);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{width:var(--sidebar-width-mobile);font-size:15px}}@media (max-width: 719px){.vp-sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}}.vp-sidebar::-webkit-scrollbar{width:7px}.vp-sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.vp-sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.vp-sidebar .vp-navbar-items{display:none;padding:.5rem 0 .75rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}@media (max-width: 719px){.vp-sidebar .vp-navbar-items{display:block}.vp-sidebar .vp-navbar-items .vp-navbar-dropdown-item a.route-link-active:after{top:calc(1rem - 2px)}}.vp-sidebar .vp-navbar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar .vp-navbar-items a{font-weight:600}.vp-sidebar .vp-navbar-item{display:block;padding:.5rem 0 .5rem 1.5rem;font-size:1.1em;line-height:1.25rem}.vp-sidebar-mask{position:fixed;top:0;left:0;z-index:9;display:none;width:100vw;height:100vh}.vp-theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.vp-theme-container.no-navbar .vp-sidebar{padding-top:0}}.vp-theme-container.no-navbar .vp-page{padding-top:0}.vp-theme-container.no-navbar .theme-default-content h1,.vp-theme-container.no-navbar .theme-default-content h2,.vp-theme-container.no-navbar .theme-default-content h3,.vp-theme-container.no-navbar .theme-default-content h4,.vp-theme-container.no-navbar .theme-default-content h5,.vp-theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.vp-theme-container.no-sidebar .vp-sidebar{display:none}@media (max-width: 719px){.vp-theme-container.no-sidebar .vp-sidebar{display:block}}.vp-theme-container.no-sidebar .vp-page{padding-left:0}@media (max-width: 719px){.vp-theme-container.sidebar-open .vp-sidebar{transform:translate(0)}.vp-theme-container.sidebar-open .vp-sidebar-mask{display:block}}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}html,body{margin:0;padding:0;background:#fff}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}@media print{html{font-size:12pt}}body{min-height:100vh;color:#2c3e50}a{color:#3eaf7c;font-weight:500;text-decoration:none;overflow-wrap:break-word}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid #eee;border-radius:.25em;box-shadow:1px 1px 4px #00000026;line-height:1;letter-spacing:-.1em;text-align:center}code{margin:0;padding:3px 6px;border-radius:4px;background:#7f7f7f1f;font-size:.875em;overflow-wrap:break-word}table code{padding:.1rem .4rem}p a code{color:#3eaf7c;font-weight:400}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid #eaecef;font-size:1.65rem}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{position:relative;color:inherit;text-decoration:none}a.header-anchor:hover:before{content:"¶";position:absolute;top:.4167em;left:-.75em;color:var(--c-brand);font-size:.75em}a.header-anchor:focus-visible{outline:none}a.header-anchor:focus-visible:before{content:"¶";position:absolute;left:-.75em;color:var(--c-brand);outline:auto}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid #ddd;color:#666;font-size:1rem;overflow-wrap:break-word}blockquote>p{margin:0}hr{border:0;border-top:1px solid #eaecef}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tr:nth-child(odd){background:#f6f8fa}th,td{padding:.6em 1em;border:1px solid #dfe2e5}pre{text-align:left;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none;direction:ltr}@media print{pre{white-space:pre-wrap}}pre code{padding:0;border-radius:0}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a.header-anchor{text-decoration:none}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #fff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #ccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #600;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--c-code-group-tab-title: rgb(255 255 255 / 90%);--c-code-group-tab-bg: var(--code-bg-color);--c-code-group-tab-outline: var(var(--c-code-group-tab-title));--c-code-group-tab-active-border: var(--c-brand);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgb(0 0 0 / 66%);--code-hl-error-bg-color: rgb(244 63 94 / 16%);--code-hl-warning-bg-color: rgb(255 193 7 / 16%);--code-line-diff-remove-color: rgb(244 63 94 / 16%);--code-line-diff-remove-symbol-color: #e0575b;--code-line-diff-add-color: rgb(16 185 129 / 16%);--code-line-diff-add-symbol-color: #298459;--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, "BlinkMacSystemFont", "Segoe UI", roboto, oxygen, ubuntu, cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: consolas, monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px;--external-link-icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");--external-link-icon-color: var(--c-text-quote)}.vp-back-to-top-button{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light);--back-to-top-bg-color: var(--c-bg)}.vp-catalog-wrapper{--catalog-bg-color: var(--c-bg);--catalog-bg-secondary-color: var(--c-bg-dark);--catalog-border-color: var(--c-border);--catalog-active-color: var(--c-brand);--catalog-hover-color: var(--c-brand-light)}.waline-wrapper{--waline-bg-color: var(--c-bg);--waline-bg-color-light: var(--c-bg-light);--waline-text-color: var(--c-color);--waline-border: 1px solid var(--c-border);--waline-border-color: var(--c-border);--waline-theme-color: var(--c-brand);--waline-active-color: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgb(9 10 17 / 80%);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}.vp-notice-wrapper{--notice-color: var(--c-text);--notice-bg-color: var(--c-bg);--notice-primary-color: var(--c-brand);--notice-primary-text-color: var(--c-bg);--notice-primary-hover-color: var(--c-brand-light);--notice-button-color: var(--c-bg-light);--notice-button-hover-color: var(--c-bg-lighter)}#nprogress{--nprogress-color: var(--c-brand)}body{--photo-swipe-bullet: var(--c-bg);--photo-swipe-bullet-active: var(--c-brand);--pwa-text-color: var(--c-text);--pwa-bg-color: var(--c-bg);--pwa-border-color: var(--c-brand);--pwa-btn-text-color: var(--c-bg);--pwa-btn-bg-color: var(--c-brand);--pwa-btn-hover-bg-color: var(--c-brand-light)}.redirect-modal-mask{--redirect-bg-color: var(--c-bg);--redirect-bg-color-light: var(--c-bg-light);--redirect-bg-color-lighter: var(--c-bg-lighter);--redirect-text-color: var(--c-text);--redirect-primary-color: var(--c-brand);--redirect-primary-hover-color: var(--c-brand-light);--redirect-primary-text-color: var(--c-bg)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgb(3 4 9 / 30%);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgb(73 76 106 / 50%), 0 -4px 8px 0 rgb(0 0 0 / 20%)}html.dark body{--pwa-shadow-color: rgb(0 0 0 / 30%);--pwa-content-color: #ccc;--pwa-content-light-color: #999}html,body{background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}body{color:var(--c-text);font-size:1rem;font-family:var(--font-family)}h2{border-color:var(--c-border);transition:border-color var(--t-color)}a{color:var(--c-text-accent)}code{background-color:var(--c-bg-light);color:var(--c-text-lighter);font-family:var(--font-family-code);transition:background-color var(--t-color)}p a code{color:var(--c-text-accent)}kbd{border-color:var(--c-border-dark)}blockquote{border-color:var(--c-border-dark);color:var(--c-text-quote)}hr{border-color:var(--c-border)}table{transition:border-color var(--t-color)}tr:nth-child(odd){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(odd) code{background-color:var(--c-bg-dark)}th,td{border-color:var(--c-border-dark);transition:border-color var(--t-color)}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));margin-bottom:0;padding-top:calc(1rem + var(--navbar-height))}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 419px){.theme-default-content h1{font-size:1.9rem}}.theme-default-content a:not(.header-anchor){text-decoration:underline}.theme-default-content img{max-width:100%}pre[class*=language-]{overflow:auto;margin:.5em 0;font-size:1em;font-family:var(--font-family-code);line-height:1.5}pre[class*=language-]{background:#2d2d2d;color:#ccc}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{overflow:auto;margin:.85rem 0;border-radius:6px;line-height:1.7}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{display:block;box-sizing:border-box;width:-moz-fit-content;width:fit-content;min-width:100%;padding:1.3rem 1.5rem;border-radius:0;background-color:transparent!important;color:#fff;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;border-radius:6px;background-color:var(--code-bg-color)}div[class*=language-]:before{content:attr(data-title);position:absolute;top:.8em;right:1em;z-index:3;color:var(--code-ln-color);font-size:.75rem}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{position:relative;z-index:1;background:transparent!important}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--code-ln-wrapper-width)}div[class*=language-].line-numbers-mode code{padding-left:1rem}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);padding-top:1.3rem;color:var(--code-ln-color);font-size:.875em;line-height:1.7;counter-reset:line-number;text-align:center}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{content:counter(line-number);counter-increment:line-number}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-right:1px solid var(--code-hl-bg-color);border-radius:6px 0 0 6px}div[data-highlighter=shiki]{background-color:var(--shiki-light-bg, var(--code-bg-color));transition:background-color var(--t-color)}.dark div[data-highlighter=shiki]{background-color:var(--shiki-dark-bg, var(--code-bg-color))}.shiki span{color:var(--shiki-light, inherit)}.dark .shiki span{color:var(--shiki-dark, inherit)}div[class*=language-] .line.highlighted{display:inline-block;width:100%;margin:0 -24px;padding:0 24px;background-color:var(--code-hl-bg-color);transition:background-color .5s}div[class*=language-] .line.highlighted.error{background-color:var(--code-hl-error-bg-color)}div[class*=language-] .line.highlighted.warning{background-color:var(--code-hl-warning-bg-color)}div[class*=language-] .line.diff{display:inline-block;width:100%;margin:0 -24px;padding:0 24px;transition:background-color .5s}div[class*=language-] .line.diff:before{position:absolute;left:10px}div[class*=language-] .line.diff.remove{background-color:var(--code-line-diff-remove-color);opacity:.7}div[class*=language-] .line.diff.remove:before{content:"-";color:var(--code-line-diff-remove-symbol-color)}div[class*=language-] .line.diff.add{background-color:var(--code-line-diff-add-color)}div[class*=language-] .line.diff.add:before{content:"+";color:var(--code-line-diff-add-symbol-color)}div[class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;filter:blur(.095rem);transition:filter .35s,opacity .35s}div[class*=language-]:hover .has-focused-lines .line:not(.has-focus){opacity:1;filter:blur(0)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{margin:1rem 0;padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{--external-link-icon-color: var(--c-warning-text-quote);border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{background-color:var(--c-warning-bg-light);color:var(--c-warning-text-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.danger{--external-link-icon-color: var(--c-danger-text-quote);border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{background-color:var(--c-danger-bg-light);color:var(--c-danger-text-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.details{position:relative;display:block;margin:1.6em 0;padding:1.6em;border-radius:2px;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.table-of-contents .vp-badge{vertical-align:middle}.arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html.dark .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.arrow.down{transform:rotate(180deg)}.arrow.right{transform:rotate(90deg)}.arrow.left{transform:rotate(-90deg)}.vp-external-link-icon:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-icon-color);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon .external-link:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-icon-color);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon .theme-default-content a[href*="://"]:not(.no-external-link-icon):after,.external-link-icon .theme-default-content a[target=_blank]:not(.no-external-link-icon):after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-icon-color);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}@media screen and (max-width: 719px){.vp-hide-mobile{display:none}}#vp-comment{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){#vp-comment{padding:2rem}}@media (max-width: 419px){#vp-comment{padding:1.5rem}}.vp-navbar .DocSearch{transition:background-color var(--t-color)}.vp-navbar .search-box{vertical-align:top;flex:0 0 auto}:root{--search-bg-color: #fff;--search-accent-color: #3eaf7c;--search-text-color: #2c3e50;--search-border-color: #eaecef;--search-item-text-color: #5d81a5;--search-item-focus-bg-color: #f3f4f5;--search-input-width: 8rem;--search-result-width: 20rem}.search-box{position:relative;display:inline-block;margin-left:1rem}@media print{.search-box{display:none}}.search-box input{display:inline-block;width:var(--search-input-width);height:2rem;padding:0 .5rem 0 2rem;border:1px solid var(--search-border-color);border-radius:2rem;background:var(--search-bg-color) url("data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='13'%3e%3cg%20stroke-width='2'%20stroke='%23aaa'%20fill='none'%3e%3cpath%20d='M11.29%2011.71l-4-4'/%3e%3ccircle%20cx='5'%20cy='5'%20r='4'/%3e%3c/g%3e%3c/svg%3e") .6rem .5rem no-repeat;background-size:1rem;color:var(--search-text-color);outline:none;font-size:.9rem;line-height:2rem;cursor:text;transition:all ease .3s;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (max-width: 719px){.search-box input{position:relative;width:0;border-color:transparent;cursor:pointer}}.search-box input:focus{border-color:var(--search-accent-color);cursor:auto}@media (max-width: 719px){.search-box input:focus{left:0;width:10rem;cursor:text}}@media (max-width: 419px){.search-box input:focus{width:8rem}}.search-box .suggestions{position:absolute;top:2rem;right:0;width:var(--search-result-width);padding:.4rem;border:1px solid var(--search-border-color);border-radius:6px;background:var(--search-bg-color);list-style-type:none}@media (max-width: 419px){.search-box .suggestions{right:-.5rem;width:calc(100vw - 4rem)}}.search-box .suggestion{padding:.4rem .6rem;border-radius:4px;line-height:1.4;cursor:pointer}.search-box .suggestion a{color:var(--search-item-text-color);white-space:normal}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{margin-left:.25em;font-size:.9em} diff --git a/guide/account.html b/guide/account.html new file mode 100644 index 00000000..94e7b583 --- /dev/null +++ b/guide/account.html @@ -0,0 +1,74 @@ + + + + + + + + + 账号管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/audit.html b/guide/audit.html new file mode 100644 index 00000000..2d89b2c9 --- /dev/null +++ b/guide/audit.html @@ -0,0 +1,115 @@ + + + + + + + + + 内容审核 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/group.html b/guide/group.html new file mode 100644 index 00000000..ffbf2190 --- /dev/null +++ b/guide/group.html @@ -0,0 +1,390 @@ + + + + + + + + + 群组管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/index.html b/guide/index.html new file mode 100644 index 00000000..10fe2d42 --- /dev/null +++ b/guide/index.html @@ -0,0 +1,39 @@ + + + + + + + + + 介绍 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/member.html b/guide/member.html new file mode 100644 index 00000000..2f109088 --- /dev/null +++ b/guide/member.html @@ -0,0 +1,108 @@ + + + + + + + + + 全员推送 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/message.html b/guide/message.html new file mode 100644 index 00000000..14284769 --- /dev/null +++ b/guide/message.html @@ -0,0 +1,160 @@ + + + + + + + + + 单聊消息 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/official_account.html b/guide/official_account.html new file mode 100644 index 00000000..61486a48 --- /dev/null +++ b/guide/official_account.html @@ -0,0 +1,104 @@ + + + + + + + + + 公众号管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/operation_1.html b/guide/operation_1.html new file mode 100644 index 00000000..009e3557 --- /dev/null +++ b/guide/operation_1.html @@ -0,0 +1,49 @@ + + + + + + + + + 全局禁言管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/operation_2.html b/guide/operation_2.html new file mode 100644 index 00000000..1e2e9a61 --- /dev/null +++ b/guide/operation_2.html @@ -0,0 +1,72 @@ + + + + + + + + + 运营管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/profile.html b/guide/profile.html new file mode 100644 index 00000000..891e500b --- /dev/null +++ b/guide/profile.html @@ -0,0 +1,58 @@ + + + + + + + + + 资料管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/quickstart.html b/guide/quickstart.html new file mode 100644 index 00000000..3c69c512 --- /dev/null +++ b/guide/quickstart.html @@ -0,0 +1,72 @@ + + + + + + + + + 快速上手 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/recent_contact.html b/guide/recent_contact.html new file mode 100644 index 00000000..8e8b53ef --- /dev/null +++ b/guide/recent_contact.html @@ -0,0 +1,117 @@ + + + + + + + + + 最近联系人 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/robot.html b/guide/robot.html new file mode 100644 index 00000000..b391645c --- /dev/null +++ b/guide/robot.html @@ -0,0 +1,52 @@ + + + + + + + + + 机器人 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/guide/sns.html b/guide/sns.html new file mode 100644 index 00000000..1896e55f --- /dev/null +++ b/guide/sns.html @@ -0,0 +1,175 @@ + + + + + + + + + 关系链管理 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..6a49c9a2 --- /dev/null +++ b/index.html @@ -0,0 +1,39 @@ + + + + + + + + + 首页 | 腾讯云 IM 服务端 Java SDK 使用文档 + + + + + +
+ + +