From 57d06f59cf1f9ca9a95f88228670962ffe5a596c Mon Sep 17 00:00:00 2001 From: yyyytawa <116234899+yyyytawa@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:40:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E6=9B=B4=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E7=9A=84=20Logo,=E9=BB=98=E8=AE=A4=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/.vuepress/public/favicon.ico | Bin 67646 -> 11460 bytes src/.vuepress/public/logo.png | Bin 94186 -> 0 bytes src/.vuepress/public/logo.svg | 1 - src/.vuepress/public/logo.webp | Bin 0 -> 11460 bytes src/.vuepress/theme.ts | 4 ++-- src/README.md | 2 +- 6 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 src/.vuepress/public/logo.png delete mode 100644 src/.vuepress/public/logo.svg create mode 100644 src/.vuepress/public/logo.webp diff --git a/src/.vuepress/public/favicon.ico b/src/.vuepress/public/favicon.ico index b411f79ddd958612bceaae08e4fb10ad15340db2..6f13c69bdd2f97d74282a8528e404c4265b52303 100644 GIT binary patch literal 11460 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 eJzjj>IkOW+7)hddX z#cFBm(yFLQ)Z@XU)mBe!Eww$z9*;q7ZR=9p5I3gZH*@E$^Jeay_aa$-kMl9_&YQXO zyWjV_ckb`bog2$4!oT`@3;%!D>bHN9b);ok{Q&IZPG>*A^4rsWEeCE|{uc&>0bxKG z5C((+VL%uV2801&Ko}4PgaKhd7!U@80bxKG5C((+VL%uV2801&Ko}4PgaKhd7!U@8 z0bxKG5C((+VL%uV2801&Ko}4PgaKhd7!U@80bxKG5C((+VL%uV2801&pyM#m*b=u= z(QzyjOUQuI=2&cFtDECi6Z9(NN9F&0Y;OhDX`wZ~uI|3_b+tb_eO=`_CF?3jXJI|| z)dJrD3TbY)%8S~p+8Uz|)B!I6^n-$O!2DFcf5g_-MswW0V)+mo`rFXh4{u`s0MS3X zTuPf$uzf@6vZ~<;x4n*@Yxb|${V`x8?`d5w~SV)t*d|pbE zG1z{Xp~-sm0rqL9e!v;H*83UP%k2-)zy7!7_Ke!Hpf=!1=zplR0s1Zr{#hS;1CRP> zu@n2w0rWG}IFk7RJpuLub8DXQThrrld&#=tcGXzlJ^JN4ru#8!y|Ef)||mXZNPSDf1KzaE{D>fFSgqQH2569 zRjXseGu1qT`8BnUqz|kFwDoVqePG$95%!b|OM`r%sd99wv;hHHC_Rg?ZPMWXMI7@T zo>RyV^8*-Xz6|L5KzKa(2I~K5(gx&KOL2c1wr^^3zXr$AUvg(^_)CMUKYd^dkn8@F z?H7y(e-*Q*UJ@7&ZiN2(iVtLqLJfiafz3cRzyA9;E^sQ4onan(m>@&+l_#p{yYvou;izK z@!)6BzKZ%!mUz%=Ximg?wcz;+Bd(LWJc;w@KY6O2eme65z6W^Y&su)Kc<|E82HTU* z&N(LV67)Y-+JMCKz2m^KS${jJJvCuGSOYlmTe^zTQ_Qci+38<4;=7ji&T(i1mi=sm zU421dJXnWkN8LIeboh1q@7Ead>#xP1kq5^Oq6_YGrm`_?JR;jS5D(5-8u)yW@!%=l zxeZX<4#f5?Ae%$;eQQ*G^-(g~E<1LMKlp#MJI(FYW# z>|fob&1pFI^rI5yUC0mf132E?0_f?_LdBrhm#9%X#2aKfcoA zeiQQC2PmWqcx`}LdJk3j!}yOR%48{lx@X+Xa|=^e}GgKj+d_!$NB z0pv-WIX-napl>sLVDZg?@!)P~UrGI|@O+@Fe|SGt^?y2ej2iES@&6R^J`5-*oy-py z1Q_*KoOp0nU_AId^gpUQv;m4k#(RGS!gP%KJN;@VuhrCAI3Hksjm;yAuw4u2+lDsa z$~yz&!9CD^MP~>tE@bMu033EP*(YG`6U&Mp67Yqp+ z6WReEIJqmg0n{HT1KtMo>rcdE8y<_V1)m3C9FB7^^FV2@s?j9}B9DVHX47Xv$-v&L z?v2$U*4(3A4zvL)?upqo;{(TpZoxHr0tLNqb%e~o6X)(nkN3czHrMnQ9FJ!)J8LJM z{tPtR22S(A(>VWG;5pzA$nOP=?fw1A^&`II{4Z_0VAH(DzlmoYG!|@a-3qYwhFM{>&L=_UeaVm#%N(IE{F4EA&68EBS!Zp7GwZ zfRT=@UyE-V?%X@+2S(?+Z9v%bSS`JwNA__QCHBJWhw1CD+NDJ|4701o_~hqagYn>G z>faT7KxxnVe>q?l?@>R@uby60W>=kCVlTx!Tch??@xA1h!1y~`S3j-&_Tk+hzW>2_ zKiX{oY+Ajw+`cq89{e4&Ke7wy&v@@|fN}kuzs9{^vb~)#&9J>y*K2q*ZeKPpF#gWV z2QFVS#719GyKMB~EAI%52fu>$izj#T=Y!B2&-dd!u)Qvd_A9sG`N@Qou~W3Si+*g_ z-l{fW`DV<|9jE%AqWN7xIm9i|W5+ZW$B+~)m*=W+~Z z*#;lrSwG$f)~^4KJ-D~6xEt{xd?&4pURmAkP0+tbXY>J-k=h>sY;nqK()NR!WgBzM zr-u*BT{+Z@Ywy~~mu+u*z@+Y{@-c69U_AI=Xg{R0>5uYx@!o~_{&8w~b-p|OBg~)j ztryV0=Au%2#m^(O0iGXplr8+xi3caA+~d;gKl>&30lhkt4=DYQ!1fs(y;F~2-DH~^ z5Fa^XsIwOgws{XtJ-1VShYu{g4s*uQ&w$2$_yqeerv9D52cUsh_ZQ&%S4Nt!K0JWu z0>_qyX0Nta-d%^Q%67|Cw zf14gH9yIbvPp5X=vdv@vl0FTM{qP0$&!+wz*$2QY>wZt*W@C;~4>X>Sq;nHx{H+~z zG%jbmr zGe+@)z3wq>;w1N*=CK>z(a zk`I7CYJW8FoH3UuGoPUa#d|1gZvFWi+5pb2=`!&k#wbJL!Ew~TBltjL3)jnV-r-vW z?e*uwupZIhF+ZAPx&g6Iu=dI~s?SF}h(0v$CB{CeY~i`>0i$*aoN%r~$eL2mK>Ncx zhW<|7?+4Cbjlz4#_@|ck;K8|f%#0cjs&*IidF+A%KFPSogd6%G$2LOZ!I{*5Z~8!E zYq{0X>dfbi^n7pmU3mV1vD|#?KJ|By$MZpsCv$FI;#nV`_Z0$ob~p{=yQVRU#xv_z zQ0C+Js{ZbMKL+3akBNWtSdDmByY46SM?b*f8ut{VHdpoOu2_M-H}Xj2=lNB>TjV)+ zmEkihv`KuXJS8|Dyasaw_DVbm4cX^A5O|1sn!st_g2%h^(tt6Pi9OD->K;J$y{kq!#@I~#33BWGEi0{1Oy|B9IaUJFPAbcQXZeDc1gk7^S zzQ=Z5n=ja-vBvNw=>N5@DFyqf{kMSUwaeo92+FkJn!xxbI>*X4_-w%8I>Pfojk$S| z?c>}b&S5mVH<7Qa0{P;aQs=V`s6M;>*BGYuO<0E?+ogbcyca&c5t(0bkT{p|Ap7!0 zT+>IvH|Cyvg7$g~?gO_XPrvp3b@$zl^X~+>?%Q4P%X=`!{UGKFX0Bo>4y{`JH74$MX)?%)FZ#1%B)hj2)3ZC!gt1q-)TUAjKL)qQ|e2?+nA2l9yefKq#@kF4YbTU6+ z0I&nlu0MSDVby^bNcPvYqU06CK*!gN zFJqi@qp!}nd;)DiKJg&zz6tNF(ce>P$m=`vLi<7=SPtmlKi&IM*c!uEfuDAX2OYax z;s;^770~uu9_z$=!E2=ZYmc?lF$Obj(n!1)U4gc(!g)Wo&BzDf8}k|>#Di`b`5b#F zkeB9}Co?~QYYhJd(C3oR$QK7bBj?|oDfk-0%3j($8Q5)PGyInGn?lC3ef3AX-!gT4 z=^+@Gv#KvBu|`<~=mSeoM!p~6drsE=eBwb@oBL5-`hBL1k<;k^kxQZ$DD)b`8^A$9 z*OXGW9))eB=X;Ujy^4|#r(94v2JhJ>ct*L{zc~Wnd$@Y~<2WZCj6PrVQ)f#9k@m>FZ#WKNGjWw}-bwu6YFs-s| z-`Yz~Pf*P=sr$f0eE$^iJ=br)7Z37YWW=|t4gH?}pRlD6Uzi_o4!|{w^y~ts&Kkqj zf%8RM!9hX(=8UqjKek5wRj)iD=PXg!2^KZ^f0kFpKpezn`cPRTfpYt{y zyV8zSU&_0}n^WV>rhreIsH(#_3iB-puN!&L+=wfVNF+1Nbgt z$Qr{9ShprpJjgNvT=Vi#6T6&a!L73fI-Z~V>X2KrPoe)L#(T474-TY~ehvNmWBYZ- zgCkJJK-)}zWPU&~upQ9$0p}U|!oYZN2lz2wV_4Zko2mi*HE(G<`zM&c#5EgC$9Zwj ze_-l_(q0(v38fJIIqTemPNfelLm9b#nx3!a9}jZ;gMS+&)JEL{n3uu~Z1va30M{#j z!FS{X=g`~%Zh8W`=6JRo16y7IwEfXJ7B)G56BGAZZB3|MMaesu?=&1fqirY41RM?g z-sDT*pLHNeurZFIH1ot_zqd)h-*rX075Kqf2JKxnAe5v3cxtt zke*5#BFZv?5Vg2wkEAl?( z2aEwe0`zJM_>T-!*61kX@+5yKp^S?1p|XSC1_{ z0Wjtceq$kC=#A?=4A2L(u8THc7uMj}g?_YN*|Is9w&ib z#@yj(jqg}+^)TM+-v-_VI0i&8K4SfU3m6OJx^!Ycu16a<))6y8YdnVM)G_q0W6(c_ zYw4mK`kz!Yp|nWnzMn8O?WC4*? zS^?dxlLdq+X$3?&t$-+sn^pxx(bEdZwDVB~Y*R_Ez=^af;5P5~%(N`ujs|W(4@1f9xM=JHcRAzd^r9Y_?v;h8TgxlzZv+Ofxj8} zn}NR>_?v;h8TgxlzZv+Ofxj8}n}NR>_?v;h8TgxlzZv+Of&X6yyzF{ALhas}$ti!2 z`elJ=%idislZw)n*eGG~c0HI1&Jy&0i14)BrGxda;meHFc_{Vtfa(Hw$Kj3XfHHpHkrA!8xS+w~ zZ@HD%vvgLf3mkSM2YNmV{!?qgZz)d-`=ISio$Ef^?EMK}=3?}l3d2$EHeN7Ger9Wn zG~i$hJ2bCLM`O5|Cj!y!=v{L?;h^wCVuc*{t6=Qcy_%}_MUC?>wt%<=#lRt zN$-5B_t&gVU>ZD=nxQoDmr#~y?UBU}j;vn8z=Yag8-2}Xg0T1pf)Q6%RevN;saIb#*`4BrWDfi@@EM~d zEX`q2_g1rS@14tbHB70uUO=<)7@POD8kgT?L7{noeP>RU8t-mSO{0x)>={|Yc^36ahv`C!qMWjKub)y&+sUR-!QrJunqXqtsB zddkMpUNuqM?RX>0l!?3y=?;E`2LN2r(OrH*1=jkvHxm!8Wi2Uph1pO#G>=ZP2Ehxwf)0 zsst`kRCc*Di?jFoAtOi!H+N-fFnK2#LSvct)v718sG*$Y_UKgI@cD0&x(qPI>#w$^ zgBJnn>+krOZ1z74j}^$xdRpY^U-8 zbNxo9jmaH>_Px-$bQdGHLA`MGyxs93QC&I9-;B5WShf?n3d++-dhVyhdyJB18H?yF_{XFv1}o$4dzN-e^YW>J9ZZrFl?uih81?9%gcT z47Mo#qxR{bkn81+P2X;0Ssv_MDBjrUD;RF`HI1ycbk5SgmZiy*p41hIVi;B6uU>EJ zEgylh?VuxVO&)$R6S3g2ChdBzZ8B3eXpP@yijspiWWELPjf|3Nw97H%rInIirl;#tTsd)$zSC zg+(?1kj{^uRn88HY?&)C)WP_Cun$l>o4AlZzx^>L2ne(W5}Bf@rNFhusm zo$JnkiAEuC{Gd@BTN~!hvOEgt@$M#>mqmp7NQ_+o)Eke8WWzU8U*k}U_+pO{2Eg#7 zh|V>%8TmF`g41Awn=ByOwqNcX%cQzkeEkng*5Rm%u(ijO4SNXOjFYs>q`uAz7n(=f zSe%SSW!DM04r!XnBB<HNRdxVgFK<0|ZF7v=0cZS0zt z{a8(KF|;Dq<);zZ+AR{Ucr#skd!F`!Y{iTK!mv0$Qn1^uneACjad?J_jVCc+I-+$vFeOdFGwrftOsLLl77cDB`pH7l zt=*9}U#G{*CNuJq%dBWzqi-uyR|tv$`|xetruEQ`X2ViYAc86WnkdHKFx0f*KjW^e zu5_tfRox{4#p;DmB;iW!%JeT$MY%IfL)x!d(8qlHJ@0rghBUhi3rt>-u%rbJLzW#P$hceYF>(oY?u-NIL`ENLy;)}xYf82>`+ZtQ$X?0 zk8(w=*CLI3Bb~oXpEbCBzG_wcOQR-PqP(NlyS1ISG3q&8n4imu;Ka_zf8oqdr>>uH zaXkl0ysIi?+}bIzWqjoKEjDQaQ`4*sA9(pUKT_?awZ&}a$zMfc>kFeu=3l;>ea_pS zcg6ktmcA-F^B~BO1EYAbcnjq+12+eprbZhUsS)&wFEI4QZ z%=m)1Bn-S<3Wmt#H)AfNx{Q)qyWk)LPTD@^xO(?w`RtLt_dQ#a=jQK$D$5%9)opDK z@cK1t`jmstp%szPu)_6v>6AK>Uctc>PAZaWRgLzMkrplNGPdYg6ND<-QR{8MLOFGQ z5jc0V-CpZmbKX(%EGm2G@z|o|&8*%|9`VPxJpwC4vQ>8?5f1UMR%upf@{T5`GpqK# zSWq}=oZgxibZ-lfj5N_-8+rZ|rH*Z!UM`3C0zPS`6);i)Kg}$8OWmXxPu5b*u~uln z!hYJ;hqUjSh^s|uBt2ZTnax_w7MnsK;tJI>Ha8f@WIs zYV-q(^P4vqxs_1aNFzy=)8npV_7QoMvGSW*p)2c@0Au+8V_X1Z@F*P)DG_|XtDd<$ z0B@7P>>lyrs%%HW#nG!*G?xT8J+)AXs2Aa41#~uDP2;9fm=<5E@4d6t8$8_&imh_; zqxpJzWz>ysHy`Tq$8FjKQ=9>_kZjbz;^mT_qUJ=TE7?6 z`bS>YP1V2txZrhxuIu`WT6x{Asc?Dnwjv$tgp7LO&f-@Z91FS zr3zRzY!)9axUauy z*AKeoUfk4rr=7u~VR!Io;h@KlyNrL*y2Rc+wYn5jtfLyryQ{ovKNm6ZQzE)V5?dD0 znm}OSi8$i~kmE$Q)cFbj>+?MKcI-yL1p?dwwUiL}8Pr~lcUXX&>Pia3s7t3>OxGAr zjaFci%gNxltq{4M2y!u&U3iu$#d#uPVBzYQj{tPy%+-rg4)I=STnuQ?<_SN4L6mj? zDc#r#d+HFS=)nij(K(U#M)x0v0CmfJbB`*h>p6B6)QVXIZmBRYxfcjf7p%d&B!VhW zgc~mLU(8uZ*DJ`E4-+UJ(rWszmN2Mqo(j6=CpHuoodUB!$aV8~%vX4ygqABT_Lw1f+#MYW-t**<&(=X+cgECW z4wO_s)l=?Wg6@zdJMyX!;r_(mtvUkfhIf37U+3wkjbD^^h}vwS(g1q=Qi}{hk3W!C z-68#vUDzY#Vqcj@DH<^nLyh;c)t)-lZGu2sVk*(YN~+J-RQp(JYz{NzZJ<6n5tlYZ zAp5gNFK++RJk)!dBx-;xOGsLW%l^pf`^%J z=0`hx1=0ch*4(cCm-U{`iz7m9*bZc%;GaPn7^t``0!*Gx)!D56M;#v{u$`xCF?~bVtYik&slAq(@AUfb>=_>{D_&-%j6u4Gs`s=jKxgGB%F{wh zh#Pp7=24n|*#i88Pn!RdrUPHO3Luya@J&O)Ig2SG!0@VjOZ&9oK@kz)He069{E!LF zdmt-?$rmDI-e2eBSbp&0Swyoum`&`4w?2bo(+1Jc8Ksb{=mUr6Gh2(HJfvUTTo$efQ}M>&Fe12L zxaMU8tLYQmy&b)V!KQ7+f%$1%R`sh4^07dQN4_|QGV!V`hwYvFs@(sePf_)G0*7}m zk@EUvfh+_aFllXU1yndv0*tag{j~d9?Pg*^&LF$n_5d~So-_gWm^EKGTu(ixOCO$& z+e}Sq<>r)Js{|3RNR)|JBP@UGBjR5r$F-IZLn6FZU^c)Z-VG6yc2VnlQ<_YB#Z+cCv59w+ zf~vFl3J7~VQ%6UqOTfWTr+s0F@+r8=ow{XiW0Yld%1`I2z553)K#H##zOHt}*-4qP zYH*fYa@}uXPa1-zK(Yu=Ld>Al(gE}J5~Ww2O$hchx_bDOcL4PTy3a=e6%n&{WuB-G zmfB2M-;PknQgN^SJTe6FCe>4Ft$Rg*MmxGIo{4~lzhwHv_^JjFZNJxb+lQ(h!hd-k00=yUbAx#{m_6FTmiSxK%mhyg>&V$p{EpE+U+Hc;UbLbAR^wBvyBO zV_J7wFit3v)nxda_b9hH%Ceqyb+XiuAu-wReYJX5A_ZZ&9^{+e zJqiRln?wAV9kJV1xr9}pM%S}0UjVrK8q+Vgcw0tWHA703va(&4+k!X@W852eK-+35 zT<_Z{Xys=1nQ+ojEgdNsU(#dC`Wp4^gqq&n{R&kFNSLBro`Wre`8sOMnTnLlIL zx|io&8BBp|Aj^Ei8`}R%tWg_`fOX#G4-{2bXtK)f+=az8yaGVTk7t9vE4wAjW$(;l zlgVi$Vi1>ht8qRu;XFYC$Gbl#lt`y2KibXC_()E(R*ny;)+h?^%SEO4PtCI^ak`s3HH6hQh) zO@YI|kDAH+q6C-6EfIS2f2q0%{{!y19AZH8_YOIwlL}K>XGXQ?T#{@;) z4?gY73X9JJ%hI?)t|n1daz5mCKxK=loYr3(cg@M8+&37Z3#-p|c`zl`tq6K+{fnI9 zm^3o2Gqqt+bOe`Sygxl;Mo`QKfLIYCnK6hbhM+&y)^uvg^f+^^f)6MLN;|+7?ps$w z64OSQpV^IVe}jI^E>p4rl%d4N?QVH6uL6H$;M_b9B6QW&2Fwx>qKZC4#DKZhfF_{4 zrDrp8!i7%b9W9j|kOQTU;$L|^^*2$1JhMvd1yIWI?@R(hbg&e~$x*26W8C2sQp}K)9^i4UNuLD= z(MljR+6%7I^fopt0Z5EH%FG~F#W=EbDmlO3+g?c9iUulFnkWLY-R>qv7cj6IA^Y5t8PgLB!k+VM>9x$7$Ye}Q1TrO5ADA;0#qXB`@n>))oWT9a@Cx;9=J zxY){4Ww>$6hQM6fdnq{dSW@(J&|CsuJrfnM_iEb+1 ztNQ}UA#BJU??&Y=!@+2tU#FW6 zWLw>FI)Xqj=s4g{X`fIVV7us$u< zD&eQ`^+@&Ncdbdtq4VE>Zzj5jJKWq5DWj(B_83HDSCL++8gxgfe)5!tdN?q(A+p8s1(zv$KSgxO1JCdJWa}?lBI6Oq9#>-IEmKV3bbNUuw{|_K$1a_azE2K` z(Of5hAOMQ?2_-8!*Lz4vSzp{~OL@3sa;(>5c>jF22%>b!Yv}4c3pB(k{@2d${151c zej;J^*JIJZI79jTcqJ4Me*yGF%xLKJrx-G!HbO4`YpQ?79jTfKpB@? z{+3U+LuE%XPn`Xa84Dt`CgM>Flzd#vvW3&a8xhOTVr{Xro!L6IJ}5#|Zb z)<406Ma8Q@AG;v6@#^l9Q*&=81P{KX-%-s#zL(NJQ<>@@|1oU@p7Nr96;mGdb!@QE z>$gc|`@`f7g$VT>v%YdW2VvB}PgB%z0QMJhq*c+O29 z3l#uiF81jOS2D8}DwCTGtPSKN_g0H<%4Hw*XZb%*o%bVcw>IT-ogI3M{IR8=iWY;b zoR(r1`>n?UyjHoeVWJ+D{Nw(Jmkoh@U{E{378D&~P}|@pNAcsWB0CefLx|Hco+;^8 zvYmi`WhS&Q%#)|clxkN3h8V8NqucmqJAXOa78OY zeT^VTUA~`~%K(>PjtGagGt88Eq^IORr7Z!HPL{}r8*_rgZOn0dQY|bR-V$S%K3(@P z?sI>n`W${Tkz?E#TB1NMG8iZzbq)&u{cmUH)T;6ic5WR_r{;23fvL}WS9Oqkth{p? z(8$V=-qF~{FwA~GxIq~}gHq>9cRhU&*#<+^`A*cRfrau$DX1yLZD+KS5s^)t{UD0M zD##a#c7t`6{_6@$ zRw{RVokJ8Wm9J^<#t#Vt+RWA%qFYX}=f)AhZ;p8SKA57zJ;VpU(7mmR>Zc_G^mnj3 z4xJ5`G!(h**(xhfH`+1zJH}AJCvQGFO~(Z}NjA?6N+(nGIF|~X+?T*+S574EF(h9J z^+muYbvrb0PmT&;wp|)mp*Zv=M9-*e6{s2i*7E2 z29gX2mHDgS4sRSOxC_UN9dZ&qM}^Hpa9JkAiW#jLhAPJCApM3Nzk{FC!#_s9_7$+r z+#|RB@<=XwysfwAD1rP8pexVW!0&6@H7H<*-MM}r;BM>&(c_1*-6YT&Ni-p_M?=+N zDzxL)AmYRaQN~~%1k<3Qcd3agFymK;ce~r)(edKo;Jbe*Ca(IEc)8akB#+OTT>kEG z`D@%cm!{RK^4+RTaTa~FRkU1R(rQ)dPTiU(Pz1K@*RTKcO6cSXma`Gm+SS#oS-#&L z8rNQb>N>qdx%%<+nWBhv?AB4LwtDs(uK6+bA@{ngVe@d6cCoeY`9y3bn}Efx#_!rW zxF9c2%8R@c88t!7!=|;Qf`i5@!4tu{hNf~6EVJ`s2BkuB(*kp_hI0P*@4JttH@`AF zv_uKAbFyw2GXBSx%LU^kc#$@WDym`Nuq}0q35zkk6=6C>;lL@2>~}d6yXjof9&~SU z%3+!5Lm`$TOtVGN9F@rN+J7g}O&YDq;g3*TaHv&lc3? zOd#>S87#AH&w7!EsfhV*_S_z|SGM{s{mFNn7Pd5K1dcKApKJ2zvfpKvInQ|tH9!}&U?++HnQ>^HSTZ*$?T2GVnEEv_%~Xi*3SAT zGWvItNe4yl_@j?|Ua=wC)E=ML8pr#Ac=u{$Wu7_=`<%2$urH5_Oqud1@<>QM@k70q z;SH%3Wn9B{W)suIu4|OstXD+bHV!?4!TUGM2h~l-pHxV9X@9uP@S(ShOH|{4UJZ(N zC-HNwxZHF>JRuv)8KJv39*wGP(d8YBx#}SfI9_d0{k$`0=&(8APo`+36Tmv#b5Q5+ zNom@*rS)`np;|A@mt(Czq%GCC`!P8BD|3Fxnn)@FwW+Qi1~(>yNvho_K1!PKE3X`t zYtv6xYk5dTcV{leba=X-tKltsx7VlbC$q8&rm8bm`jYEQ-%y)s`41Y@N2u+JlSvq| zGY!1GCfIE~3po@~kqI$VY&p$0gS%r%eO1o~JsU3Pd0)lbrCT(83CgaRH9L56VGN6- z-q^cJ)hXW=sAOd6J=^2ZzUrxHqB_Hwf7!dk<#g<3e`5?yKwsm`puim&ZZ~J#>wlob z?}_rtO=I{7FzZTqF&cKwWs5G_wPH%HZH>Z#y&wSybbqq&tldweRLKn`AlqHeNpJB9 ztqPWU-0hll`bghJ=dp?waWeDm;L9ljgd`}}mVKjy-A7!J3ws;%?NTF@-Au#L>RAFF zj#Txej)fY@!gu%#e>3xYo#=b4R{kxpkK;vvG&&$#aD2@?wrBMWtU*xP__sG_6Os%3|_ zU3C$Mnvc)dkN1!m<966nP0aJIUyRipoyar%om7E7H=!CBCFjq3OHX*)Wax^~t-J&g zooX1>1n1`@_nA){%L*2td`l*uw;0f~Zp3tu+=*;Tb-}V>&!w$6J3Mv=jgG~;`fS(Q zZC_IQWe<*-npbC~D% z0OMrc3|=GNRz8iJ=|ft>C>@`I>O2 z$selN{TKcme0kI88>!AUeNXu#RK4hJ4;Cbc=!`~UdhNz+l0eXy1VCh!9`rm}`l|#a ze2hS=R9OB5%z#aBmmjSA$)trcWoTP24WobPtB}M%)66MLnc1*yIQqhQ)KDnEKDkvv zZZV(&;4H<8f^RltVJP>X-uq~VQ|4o>8;C0tq7LKD1jH@D4JyB|2jdIGU?B987Kz`o z;m3>i6k3KW?>G^d%)aMQ%)zLA1nEEF>C`QENd>gUFIQn)?L%4>JXSB|GceiflVtR} zjFK#0_)y3;gApQ>M&!UQk#rXQcz$`c6RN$qgWA~_fY?09=zIKfT`(@97b&wF1kcoxrf%hV!i{c$!<(aS zh*TwmbIs_YWcH+FbLD-%*PRv7u5E{?7+qY}x<76Tn;h+KipRF?vOF4Iq5omy1N?KnhtO<9N*{{GX&hKPJtz;85m#aBTACZxCA z;w8k}_cGWDDJ(b5-U%ZV%D4wqD9d&Wx{D`m5gx)1c1BVdRD8Lju3n}HF!2x6G}2)j zTHTjYi`(u1%qF(Ta6-Xde9S~9b$h*H=XB3Pf&91`R42>yx{?-TFi_pV=C^~t&z89=_=cM4{sO7!&x*ZEiiO1?UqBk7uG{9wKnB{7(JYu2?8v6R0`SpK`wZ z^OdRzr<=myCs;PAh{|VdaIUhIFghX;+;^@RA!rIobi_c}zuG?|X#XQV^;xQ77*I2+ zH?zYqM&=|%gH^V**J)!lmjkJkot5;kGe8L)&UNZyNdwx0>L=q#6x?~oOTJc-n&*0W z9Zt6<`1C~rfXFkk7hroq)V+kLN2sk!nIVRbqN|vZQ;p|sW)&ip49{AnVg9Exq>W75 zNGC~TMa<+@L`H$h?85D#Ge%YYn$>G!&&Ejv2S05vK_!@v!$iBip<@71ZFI`sqB&+l1&+0<{5d9L6JRXUcFn@wQR)2i0^*KB8dTUfOwOwB@~ zq|<}ce0$N}ut5D5U2Gpna+aX`3NjS6|Bn;wEUSb0cu6l{5YL(lw{;iLR3n@DQq=K3 zVWh@c+dXbK^~B9TpUOZ>*UfZ;e%WozcC`G4b4YT5fkffp-a)#5>UK}X4q4A6-E_7t zp|xC6{GQoC0Q7P#`HF0K03!e&$0u5^+|A<0=TmO~fN2AFH71o7fbV$oYmfWIt&7H!gvAso0(0CmP8JXgk7^q!8XtO z!>0i<=m!O~C7#BT@C!YrYS#D^sB5H?S1pX(nQmn?e8wNqrCH(eD@>2kH|ru1cS2-6 zKZAUC5OWyDjJ(@zjH@SRdn-d~_r{Mq?*5=#nMnWCGGJicm?2}h)_%xz0v zM9;waCt-0O73a^yP}6((#a-P;=5NQ6+qD^Tb3R;ip@L<2J;n8XRq-$%(>Vb!iKuBM zvJwLKfpDlZa#F>7)k*wHRtoi=Fpx4H$xBJ1xc+n&>E}HpMFS3vw*I_)jauKR0{d35 zG;tk~nPq~13q&nN*r4fkrQA~7#c$6c@L*nn_zy%*PME=5y$H{!+lX62{I%e8rdOw>M- zQ#(DMK;Ss5qTPtc=aHR6Mt)&e1_)n?jxK7x5~P@mOKuv@2P26SzkT(L7A4~waDl7C zo85%g9A}ZQ@kH$KI)0|XnfF!9)!ZkXFe>zxxl1j?7R6>pdqfelrynHalwv3NpOpeR z?)o7>%%&FlVNC^#i0OW^>(}I&L{@HJChcG549a)C;+E5@;FRUwK6LE7HN9y8&Q=$< z{b`Z}6FhXTfD=G5@Y3VYJPlfG59mZ7!AD=7uQh1R=@%_&fHDybS&n-f#`p?I0wBsL z^KV}x?YGn}KF$h});S1c6X=XO!}$XJybwBx*xTK8D3`H5TU$(C%S3^`NLtL;jOsc&m${vbbyb=aJ)QD znY4egYQ=Ylr02=bz7~W#$xEzg5&@`_yjIeXacKSw!rmR)iq7>e1i(ll-BD0?Wqjk? z5tcSl)*23A;fA(0c-VXDv8vEDk~qtP-+Wx8{kOO{g7PJ(e+z??{{WE2XB^KD0Ei(k)1iTddc$G| z>c%dsTJRe{BED(4`%{nmi$##2(Co0Um#5v%)Eq`4*;U>Wj z?|eL63~07RXlBQ9aJWn1I%kj%B##**fe%w>Qjkg?YhWnmJW+##bEz@M{zVM!$CnGy_!PCuCNo^c~*`?i7$;)FdJ2UDm&u{GfeY$r2AKJWk+?Fo z7N6cf)&@S1NZI2)Jw7M3KUV=UEoOkn{cM$-p}H%7$QF_ZjyqhOSxo=Z2M0hO^zC95quLIj zS`YG=DbTF`lxFFBf**Z#jZXmtPL#T}c#nuU)8|l$IZPFOEjTnhmEo0zZP47328I^` zm!5G}^7DI^*^E=n61#0TgX@i{p;^Ets0=dFa;nE2SS_e&6$g*uq!+^%*G*nlY-QlK`j=l*rWh~Kas(Pjn z!0n8Ypgj}P4uGPCX*h!DTXtE&)?GvSe2VZR673}~th9^}-=|$hSLOH)!5o9YVtLNirZ7;%78&MNxn*CPaEEe9>Xhm5I93`&}_v#?TAr7DHh$J1;79 zyAlmXobm~^Wv@M-Eh)f)O9+Bq*cq^j0ezvEowX(PiNSM7F4#^yutGvJ`R11jx00#} zl~cxfHfyFb!hE$rH!qWti^O$oOS&3tWKY#^!$BfU#yy;*dM3$zOW8fxZN1~p5!I;{ z&u_#u-imOEps5rRW{W(7H6VP&Ze_P1t-hS#AOC^;a{f#^In`)GiB7rQp$^ax@`|P& zb(WQu&i?oZMsmQg!!`zW?%eTL4hktC4&>d&Hsya9ke()hGY~LH_CYOa%B?6l!szmD zDL&VQKHs+k-s!ZWL@L5}#9r({es4YxJ7LG)zxCJ(iKn6EWjcNXKA^2&SNaQDk_KvM zys-q!)oFT!ISjQQLd>^t**Iu7aQ`P2hvxx-w>?ci+;5?J0tgVajoHtsjIo*y<|}`u z=d9jRJ*iD$ynjPvG;r=@E)`4ms8F!w*M5T#f)>b5+vOoNotxgqToo-u z=d4zR(CjaczqF3lNYs+`svHIHXJ(taeQ?Npsxa6U$rg5$NK_AM!NiLBzhbq`9r(9k z_2!LkIAvV*6}k7mr{?ENve>D}3V&TVeCI##ZI#AWWqhp(2(+e%}H{1B{pqps%Yon_r%CaS)9-Q9mFRaBjtvg#41 zKV5iM5NE3WV))Z5vBwWyg)%1JO!~b4E1Dm8SZ+;t2EOz<$A#ndrvef^KMR69O2lmm zX5MFmQA>hJ(VMlQQsdYJ*;w0Fp5-+?pk%g_#DVdPnxgpe1n6?g86ZR^YUW?HDrl?U zqN@9BKim^@ltQBBvvl7U?O?e& zOMeD(K=7x?y1xGA2PVuVF)W>5 zZpOXE*qkNhH~eiqVkAm#Dw&nJ>@ORrXeze?x~&!4ksSb?Le(>tNVaTK=MV3RZaKSwyxz-ES-9%!Pk3mmq_Wu7hlc;hv7?w^&RpIbeYqZ7Ef}` z25X>z)O^fTbXb?wDx>HO{!FagQ1xy?w_o5=+}kxsu{!SXj~S0WCxg}HnK&nbuB)-Y zwBJ@EuUXp$-JmyTlDM$tHPWI%AGd_NOa%E+_k68d!PF!FlIB}nFrLHc7Pr+Ixl{0L-NNhYJ)MkdEFP!YE(s6Pz@#y1!}>8m$EHkL{?(Y$`>I{xc7xF zYQBY1f|Rmr)nOJ#u}JyTO)D9Q@XBSA30@mjCLJ$n`9j_CdFwE#-h{uucyZ_Gh)&p0 zc>4ifwjt86v(_%h{fhZ-(gv1eLV0J7F#Gh=JV4;~h;jQ^XC9p{vX27Pu}H5aH{C*M ze&;*Q$$Jj=d45c>np164JqJ^tVq!bC6*zM**M7yH<(sWFIWW2@rG7h%luEd+gUEIn z9y<^Bkf3R)co0~A1rc5rCL$!1G!J@!$M@2!^#`-P#<;Y*RA6Al(ge=c6@3NgV^i~x z7$k0=Lcz?Vsy5Yip@l-8Jb4>Ws^D%|`65P)5W2?>lCU6K`WU8h>=fCA5hVBtWwpA% zPbd@E@@!uLawN@6Us=^N0epbY@?dD7tC2?txy-yL%~ig*#l^uQ$L&{mCZk);IkNW_ z)zOsHg6qcHBXJ_q4E0@q6d%Tpz^LP{%+#GBSKizi(M0|Lm9sr|W(t?ga*Xn$`ms&& zmEbwNJRNJ$9<3P0yZ^HkZYtWpm*X-#*)6gc)xBR&lF@h2Abp=TiRFgGfA` zQCm#TP`-#OY3ObzFtzCjsmM~zN@PX@*O~y6eAkt7=DW1nP!=v4zRB?(nItpzkQ-~Y zylEh29ZsHskFQ35GW&P|jko3RcfM3`xpD-5<`3zea}wz>Li-b&3#+1L5ZLJfji4pt zfChuozjP`~x~9eE&+aHTD>F*_JJI5pq9Hz-j?cAKTVaZ(@!9TMgU5HKHm7*^;UEQN zb|LPJ<|Xye+Rbt23e@Ytpdmr5bI{X38p`c=J^XGVUL?K34oH7=% z|I0azJf?5}TA2ly*i?>SXk3%LawgEjh%C>u4Ce&d7z$>GFY;pE*3`HUPtF{}eY2eP z%KH-|?sTqPkpH zMGQ$py|3FAdBhO9f!u}CXyRfL+BFcjsQ=ZdEG7nfSsRyFNtwb6cbBMTqzT$r%9LMi zDtih)g9n!0>|*J1C;HBF#lgA>P@(}4LTt}W)qK8+&mby|*R4@|Pr3GO+I553aFeca%T2;K-RCQS%^oJnN$-`dm?C-b9qyXe0x-K`NzY3 zDl(~SR(aJTjK_Y9J5e$%+@7n#akH7xQJ?nqN6G&OdOde$24?!{lqa_T=twHo4f0OH z{?mD_x2L8ll`IX%uea8~0if5%^<;nGxVM4axaxz)2S~MZpYUBY^u7GVDZ_bs1aHZo zfW1UVQ9z25P-f+qVWtCh$YnZc1WH}BUPWUt_?Od{Wbl(~SBL;K`B2C_A~#(R@sndI57<@m z0W*~t{5-cO&`wnc6zvkgtw0p#C%2CL1CB0@-dW~8;|t7tU3F^xwJ~IEtMw|F9Gx35 zqI~Jl9^+1PE+v7N(i@3AOG?`4U;31=W`*?W{+DVNi(NFbX0z{RFtf<%6LHec71&4S z26|?eE#owBCS zf8?fliTvtm0zB0sQ6}3gK-?CCgAq+a{@20}o>}2(Lr9GtCfQ9S#dgdo1ps?x)0Ijg z-EGJIW>R+id%uTu|J@4^Y6qJ&ZcAvk=~&>!E`E^uN7aYkc2W!MVGzZ2H-q7J*G}^9 zK(AmJiypx;kawRoKYG0?)o05uv6oQpwW2Hnp8f1XpRmk??f4EjO4E+uQ0{bO9%4SR z__PsRCmmO7Xp5%QU2Tl!1+FT})LZI8DJ$8%YgSA{Yv5$l<1@8wyY=R0rX>4^EA^i? z|5!WpB+J0P`7N~E(R}BVcb;mNo)KXdP*wFDAUv9=T9v$b1|VeI5|U#{5)UFu@z42A z{#oqMo@v;QrVd=)TLW)rBwVrSCRRKf<&+BPJrZX@@3CehW5}*H5YUxFZ9>|#W{eW% zr3=W%^L*M$d#ATQz6%Ib=dJ+>hy6@>gx7cb)5eDuX`?hcTrdI4@ydf7P{I4>`-jDz zq&xaJ;n&S@Ou!u*tsa)76nwJ6O9|PX;Nl&hMylh9@rv7xgVg|+^m+y48aj8OBd&P% z_?|XC4o(YY?rTX5aNCPnJ{D2N#<&M6ZQ*%>p+K%C(pF(}n98s`O!4z^tYj&N7f*T72 zl9D89>jv$BDXJ*7!= z+DotSkTg{}Sv2^#;n(8^&7Td`B-^qVOO-1rH#x?f&I$ocs_^jHGRH6&pg zSL-!iVKRk06%_)VkpX#{A3$1<9vEENAMN8O!Iwc~^m(Ps|D>jE!`$RK}q`ipY`{+)!VksIpu zW!(*@jq_%{OVOTdcsoLEd*lU_$El3sVF+?|SWl3NBGaTwI`iDtB`q+HVTk2@euzlW z*!;%S$^vWUm(Dv;m^E8YM7#{e=OyOLSNs&hR+OeyxC#oxVHt2%Td*&yu|hT*3wv4- zt;q5-3Jz3jOyE1xSB3XZP@yB5WQamyFFNm%zGqP7{ig4tCA5)$nfD^~_8Uut7C5H|tpt7w&?6hK{bPJM zIbBz%@?<(v)X1aR>YX$|D(g?A5Y(*Qy-jRYi8ZUT zK%3SOG);+Nbvsehr z@CrUynmU`58}Hy32v#eZ(TSgHh_Fjf^9UgvOYra81AimJSKIAtN$dLu28`hbD8Ux+ zWvc0JhMRs0bk^W8*0cIkjC}sUP2cLe;m=mAy$%|(5I*%w8ZNS49&}kdj9J|&2HZWp z9a<=Mt!`_!=@g(39Eg2(v>XjA3JC$bsXIZ0t1Q1JM*ARGd7pH6sm7$>0U6(?vhjra zBCxz@&M2NQ2hG-SZ|^i{w#GKEmj>V6A%*KjLHmJk2gHVp&Itq0+MpMHr+fmn2LLwk1zK5N8yddJq?KO9rqKiTR^6 zz!3t5cnjfhv>J2$sP8|3{xX=r|JcTtzSOXOSwz7!w7`C6-2;gPZXTFDj-H!pfAF(3 z8&P7yJ|Ms(YH34U0JgqjH^!0A03J`YwWVZ zO7%C`2hwIXQUMzuz^V{VsGzKyS#_=d``~Z35xfr?T@%r`H4hCij&=-7WT!Unz$#?kJzw+_Q1s2VHz=o zzog7veE}+Gwoc^OvQ$DY5e75P*&3{+y#|=C%o>-`f48XM3;41iu9ig2f?k{PV^!(( z9#P^_AW`QUqD|wm>d|Y$f&Vq_Ssr0cD#9v8Ts5u$?+0abatLccw1Bo%2x|YWHgUl}VXh1o z{04fG`{LjdQFR(-j_o-fOB)uA?BR=1~SS>%Y`m%RG9JkOtxq1fYNAjl8u#P43A7zp@USdm29ng_=CD)z_@@3< zZdz8bEpI}<@M<%T_5m$7@W>mOW7Or=e37fn0y!r_1?W>2y(*?<&Vu)O5M|GShh3Sh zbnRAvKgy7?uDv77P>L7-Kd#;c8q2l&AHNY!35_aqCnd9xc`Bu-kYpYsW9H2B>EM)# zP(r36nddn}NmQoDJS$|LJ!Zds-H&s=|M%Zo?|Rod%k|vXy{~=k;j=$`-vhuy=KZZO zoJD^L42V0e+C`(ac>lfpTR|rxsQp_4gLSRNuVr-*2nL$Pp1$JAqF1hTfCec>|`Q@rf|Ht)V= zh3OKVk49BE-$?_hL$AYb3vxDBwetUepjnM3{m^1lVw{H<%a4q}(`*U!vR{LI4K5>F zgNj=4PP^XTOB4D-{6-s7GpNJRpFMWYY~1huw-m{w01eB z*)^CC&+dJ>ATIHq_mWd`H3{{moto74U*p$9!;3%#c2n|k#HCCGzniZd=0IVIlV@h|Ei}Qv65)`xdskz#6sN)IvPhboA*Z+e@Toup z-SHClc7dB#KuUZ}ye>d7K^l0@XDD?CxyY8*dmm;QJ?@78h!uE6sx?uuVP~%Yt5v0H z|CMqOu_CRS_;s_U%#V+r$;`U|aoU<-x_A~ib&6Z3kPd42+v%$X`?L}Zt}=FKg$QoU z7blXd`-UMqZxQ5Hw44=;hl|rwRPz@()Ek~n`{Ng zrlOhhR+E)254qXq;A1anq=#lHUMi0DtVBxreU9CyFQa}AhqkVdAZK-GV}*$oF`v^A z4;6Ad4FbwHmKY~9SuA)@X!<>NDj)N`yr2Kga8;CG(&3J6jn=OEqv}tkhiA#5tTESp zpe=@mQb-9%UdnF;6;%773itpwCICKg3-K}K1E?iE3bCK6;`7ke4(d$Vc5Pvs><|*u zANoD>8)x#yt@MOf7aP1r1h>_FXV+4H^!qh0f2cN9iqE0N*t7JAC5_C76AZ5*wj&mg z%7lC1B$XQ`88+R}Nw&BbyKjz0Tv3=-sOCaUnWq6ChjYoP`M0Q;B4`6!0%;74#G^}x zA3alEmp~|=Ri4{n^L!cp7=YnkRFnJ8O3oJVg7{u!v(OB{#xVj6;ywyZ$n^sYwVN@) z${#sC-((s$K3U5cif?qBH<0#Bs-y*!^I-&az)Y}OeU$8}7%jWh1wmq@n!wh^)qqvG zR2($BA0xH5WhH62)^qOk%r zyfof!ZBAx=1AE(Yv(Kn;4}GecKm`$Z+N$M(g8n8Er}zy;U?6W8F7qN;lkxY9j-Yjg9KMVuv=$fbsQk_3My|xYl`N(kC9kd-ig~I|GQ- z7~fXdQELsfjFPQY2IXn{m+3+GS6!pIWdrq?vMqS zr@cT9J$!k$GeGG$mfHrdh)%5P@uQB%f0Ne+=Z|^`TWOtJ_pPKf{MsrM*b(r~W|~3> z+FT}NI>jK`&WKHPF2l`JICJ{n9~Ulw$%g125uVu2zf(OVW13A4B-Fca{AnPV%$fH2 ze&nN@Tg;b7<#IAT@67=XA|Lcv0=7IQO(cgO1%rWU2iVl)*NMcm9FIb}S8M=<`;Y4s z`XgRDcwlqET)?}pwDlD7j_DHsnyY?5^y3JCZfvcz zD*M5D%*-y)c;4+lou)qmMqBj_)zIeIl&!pz$Lf|od<7b1r;N!wS$+Pw1LFOqv*m8| z)$1D@1}epORvqC%YG5JipUKKWGE{l*4TvVqX>IW}DlKQrzzG?Po+7+6OaSAt!?RpFuc-~3*tC+(4|jP$34OR1F8yd-|mp*bJDQgdI;0wl|>?Fu#Ub zrh&HjLigxpGPBK0KMrXKyru2x>iNZ`tKbZ@#hY(*drB;N&7q+h9ta*e)u<}T* zTlG(rRM!`1rHwoq(yufy{Myh0-ArBsFSQPu4{9WRP6kCCXP*v0RTKeTsTn~^Y+y}3 z`UV3kuw^yr2+Xk{L^bLO)yFTZK>>!Ww~{~0&3`>eb;?kFT4dVWoVP)9Yio-S5p~;V z>0T~GY4jP%g9&7R7=s7fkR=?uq_BDAe*;&4GGjbIYri~XGR^sbKct|sXr@4v)KpFP zy!+_uV6_2$4b$||v;e|JIVnU99Yp=R6mNgV%3v0=K^XVyLJ-LA~I^abPKAHqa?TM&oR|wGevv`LVb(!M67!Rz9U}_G|eAr{|=g zop6#Yu>Nn^>Tu|+QGQzaJu?EdZ~6Ks875$Bo01@c4-V+7Y80E?PDT!4>?-&pKE!*k zJ{K}h7D@T}qES~o`Cp)cD`g<`=|_-)(g z6Kz+B9Zfi*j|Z-OKOtmj5mQ%om~tl*fc()l5Pt8?e@%(5jph40WV%~>#|V_yjUe%> zu&w9*Lr6(Vx*TQU&SfZU{e12O0dN3YtG?1Nhyx-2?c;|X)KSqQrWp=(f)EgNO8P^~ zv+2ik>;NpLBW*+ZYcB3-77W0X+zh0IY-5LF0% z6FaT$i>hv;xCPg}m^{8uPxu7Sl4(tP)=CGlgXx2(FK~2w3q-Ni7O&(z2A2GGq z0f_my2pP(ne994A8*vRBj^eUwj2I^Bq3v)UXs9_5JZ&d*dNh1Ph`V^;q=IFf06*v* zSai~TFV`+5RrhRX?ySxqt6%9FUrySNpnCz#$=Ur7@#zqvwtNwzps2GCDc?%qz>?g} zLp$Zfo8F(>0h}S9LHnVJgD7lhoL3C%*zP!+5_3+7?B5u^&cToZRil|GR~lEkQlO>6 zW2*v47G;du46ohWrYMn(+Uah50jCI=J~e(B58&-lfe5Os@RRvHJL}_zl*Dm3sd(ZP zg&EL}J&H81k^n56JI{cUeE}V_x1&LU-nqCA9-S+XP8w+j08fymx%1fY#B-W5ZIHav z_gc;!F@R}_4ioyiz~9V<`UN4;M4eh@$$BpYJOJt@*|)S-h<5rdfcvfQ34^oa#diti zc}}L55I^X6D}xFy&2*adlOgoaw(~p4CIhHxLue9<9HeoGK&JW13X>O};d0W7FF=rE;NUqvBj1b2Gn`f@i5<$;fTz zJT?U}kAUxVr{_=P5$j1gNDcq%2VraY0GjmvBz@fv;7e#c(bgmpoOn0A`h%MxtdVPl zcIU|eHUIOK`Ds&0D9Wc5b=9DAgyNw$q)Q#Rv-ua)A9#YBz3=X4EU)cvk!=?raIE^c z@8!**g@oqiZ&$LScm!1^Z=Z_Z()Z=a($Lr+*z(X`kh%G)K^nBKbfVv#=(>D}7Pv^Z z2%mt6&ua$x(tq%iD>lzv@!8)hJ6aoQt7+>;juPs2z7?P{eH`1mTfDu^!mTg9bhPp? zf?B$)3dvBdpvRm5Ff~A8yuSb49>OX z$px>)3C!*(pT$KfhND?pi#8BvbMhdYmlZYbOOd+e9|HkQ|AfMD6mImOL@hTzaS)82 zC4lb9ibax`$qM7fL%(MnStmW$X)Ck zS^0FX!9#k*v*D8e^HV$3v)Ic8|30SZdPiB~4rPVSmrVHHQ)(;k5g`Uj&V=lHpmO8j zjzsKQklMX3KcW#_yT20-(x%h;I|$r$`RZAwtouUlbe#I)&EI>+#%PIVZ}y!Qjd@}+ z;uWz^sUvs$_|EJ0L!fhbTxQ-^j{2KD{;Oerh43j((1a`!S~BgI>8bd@-(D%&x((Ry zdAt3)=wuh!E&Z_1MbSgP@*ZV+oDfXz*3WTq--k{=A;NR~g16Z^RYOLT?9`SuEocrl z&wcg+{HEzON;$#?jg7^R{X#pb&z!txs??wz09QN4X3?;=EFpip3iQjdoNZ}o^(0j; zN`X2>5T;seTr~Pn6^vYB_)iGGDFduot$3gt))!ffoVCgF!_On`N^Rt?5OxgbTN3y- zB2lFGO+SwTQFJ9uT#(kG!2AIiyXQn>SK$~3@DSAh45N`ki)BqdTRji=w7Z$w#QoP= zxp9Kq!&6Ouk-{8b6MnW!vDCY-SZJMdPm2@be}2d9#@Wao-+)xF?#6KBtjn7aDfK!$8Hmi26S{m@f=2H+ZrO;zk((DhXc2< zUsf3cY>Bm>M@CcvhVrP1u{_;0_Jx(a%&6J^>uUuKJtC29zMoS&q)o4YV2Z%t#N#r# zM5}ReDEB1XnQ4t)$TwOlQ_WtN_Fy!CR=ky>GpVYN8!Yn_z3;U;ch{mxydi>Gcw-Id z){@6zwveSd8U0&mzSnkmy|AzBCi08tZ+gjve@bp3MGco;J9J>2r&HX#9>^dvZD06!2KvR)rhf9jaXa{(lZRWH4J%lhc%^@MT02M zR`mn#%&PE?Xs!Uc@lVAksLgu=|DKqSfS$VnUN}(Y%L>bij@X=a217eS6%1@<7&cvy zIki~#A2(S(9AMA7NIqM5gU%cf9FcpjuMzpyCo`{Ma$|#!TUUCs$@?wzoPgmICZl)1 zv+~!vYu8K|ikVolbfM{ES0l^i>H@0R8{hp@QQ{Lf!3bgKwNkUUY#+DeIGM<~n0Jc%P_=gbW8Y3fZl z#Cywe<%KTas8CSdLdZy#_AdIsSf>qMlIpzSXqJGk7`-AvLpyf*daLvNL>xTHwWaCM zDl>3eoN6x!o@kaW5VTHyy7gKQem=I;HFx1K@P>9%C9pwwuc#MlNK$auUS^T;hC*$n zktn5rlcnU5EXEv7GSeTsos6?x^+G^!Pu|?`$5Hvh4IrN5&A*QgACgc4!v@`=HoF`_ z)Va5ojq;@EfAgfo3k5$lO+?VN(OgYqq}o9Wt#wOPhugqP!4tO6}I|Uv@PO-$|=J75^u2h z?nGx(RnIOq-M!fc%qGt-f|17Bnao?pG7^Sg!`N#Jqd)jkWO;nH&Hl!QhuACch}LA6 zk`GA%6M`4UwU$2{WH?_@Xv?NCNu6wzOE4UwsK2kMJ1hJ9z0-h4>HFoxRyI=jW zPi4Y7pWxP<(Dx{vd{&*c=AHNLUkxOe0c<};WcHi~Zc0?#^GmA{&vJl+CbIyAs;2#+1$+qNS7<7kNnF41Kmwd^w-S|@ z;i&TVGHu|~GA^p*Xs!NciKUMxHV9Exm_&*zPARtqKof*`ith}T6nRXj*NzT zy2A%G!E5tT&jPm|!)O8ktoupnJ;ZxWrvGL-jjqobt66?L3ES--MOrxj_U+q6bTd^g z@dAP`CD683yy)&%)zi`9jg4D9T1nF_&*H3RxZ>soNh@kY9nLbb2wIU)OEP7yT$=rq z!Iu{eXL{?u(mFXRLJ~3l>H5unhca}56w3jH_*RWqxDuYgT(_j= zPsx>#?b-Y%?aMW*18EZ5iNy~26K2o_Jv>zvHTbtxe8R*$OP3hzHY4_nD-@ed$wsHz*$-R#2ol<)20r_gPohu+c>$bPfvXZ)@c z`}C=#vB49NU4G{#7gB>%^@4;vZsR`T=mBA|7C{G+GBmExz1il9NZ1zH)(0MbbuOPX1K zHX3??rOy4F7wU&7zBf;ac^W`3zTEgTd-$Q^EJc{d@`VPD(}l14#%C#X(Y0Ny3*nkG z?<4^ey&bntwm7K20XzdBmtuRcima#6gqJbCpS^v}7P?2A0};6bC8&Va1QM|tuZ|%V zco``0Q0pR=b!cn{j-#GUk+S$rNu*CP<^Hh;dwZKv^YAM}YN1Y+&J*bLRi*UJb~*9r z!qP7CYHw5{gD}2kfGMjD-2Dw#*1npT>H=n{tv4%SZc0i&UeCbt#K27BDny0e;vS9HK2bhVI%g9>1iTFYl~_Ke1#0iQ2f`t zjoZ0=mL3b`zkW2#>MYBniz2k4|0qpk=i{FkaKqm|p$mX=LOx5MjXW4LdiiqaPTmkW zo{b#^&q~}g{U7wb;aBTVh9+r*CU%vuO1t&FKbxYxAB&u*aN#~e7r}FY#8;)*Q#73U zgvcq}dacts`$E#wv*DB94TC;*6V{%x8k7pZZWfsn#D&zZu4q|lc@8u2X51LEruzqz zMWxrSKg_2rjw`%xo(Tq@^FJkJl~NS6{UV!8+`OFv{Sm0FtdLg<^wvtrsK;^nXR+O0 zgF=-(zKmQj0_wEm!RD*WtAwe|tE%ES%@1|JFO{4{Z62eSt9RB)qFlbD8gTM*HhJ)l z@-Y53uP_;WJ@y)EsKwcKPCJfmy&BAxGdx*dyrYDSezo6Bof`1Jj`_EG1Sq=h!r>Mh z$?ezV^=*I)2h_cphx0nXVN7@G&+oZ-5OYYM^rCFIBul0okQOtJTHT$!1U5tNLQ|G> zM})CBUB>2jk@xni12SXBOn5mey@lU1wt9Z4y4+Bn79k1$&HWo$)AGp6(SE>nEBven zyf2JuO)|U_BGBmWyjsriwsM@E=!p&b_|XrhYJIJZ3+wkg+~7sV;??L*>77^NGI+S@ z##$Ks+Rju7!)n=RzaO9E73C<6u>jyas+9WFb7OylXMwhnGT~4dALErKqD8F$T(h?b z(yt*2nb$b#KRl>SC6Co5v}Z6h$jSbce!Mud1s!yYU1oE4zSYJ}2Jry#cbh-yn2vPZ z#~>a9$61oP04oH*=hvKxKxF`|ZXL(y0p>Eah8|tQ#<#mGLK3bUQrWCU^bTjW$6&5uPm-pOs>(%zrhy0%5)iSkGQNby*G$r z7uGhSQovq*OIF+eSUic;{3Y}{2aHO0=wl1XPPJ$9usNoTXkifcZd+OGYlyBKD`MR} z^DdL2NO-CsWRI^{`lJ+Py`-%159qFP|50$vcT)=`V+?{+n3)V4%oNKEO0?PjxIm-a z1d@Hl5%svzd>%8|YEHdt5<`9(tFO7mS$I!q5~FUl-{OU*JEVAdmT6&sKx7CLz+Nn9 zcgVM_jN@fK_Ay9*8r7hBewT#ABx9oyz~~EmF-JwCn_}TJVwUYB^oxVDAJCb&eqKK2 z+uP7b%xuVaz1zvu9N;QXpR zz9n{wHK>6*`xd9~=ijA^Ay%MmYTz;yO-TlIx}V;2v}UtT9)k}52uYp@03Zv^bDh85 zA+6gKB>)@gI`)z(Sq&n~dt^fLF!1foBs$+Dh>?YmK<&H{yF78K`)YUpPmU5cg{anD zh>@L}6GlL#2S9TlT_k4rG*0zkTiPgn{7Lj_Hl(rzHht!FSOsz&NTMTd5$W#FlYb$J zc7!pO^}mKK__g<}Xql5%m3S)Fc+kAG@ck@$j``7+TxL1;OUVfMkOLk+cJKJVobiS7 zw=RZp$v+_y6anpG;o${=u6{j*iHazvbPk8_i?@eKNRHFwtP$P8_mEZ)8E#gm5OH8p z)ne{)>|@X@#_|Iq74@WKb=tu0_j*l@H5Mq-@NovVNGYXY^l$DreOJ+(g7=^qn?W-K zpV^}`Wzewcn(V$h0fYT?hf<2ccj-ZWGK}s7c>a}pIdgk_;ZTi|)vzb6rAFoGB!0NH zG9ycZw;*;FJj>s5zIChBE%qPSLhtRU_bZk13e%5kC_=^`(h?a!HSE|cu4FaIDR`B0 zrTsZgpyRrn#HoPH*hPdZc$UGHmFRnKm)+HB2a)8@h~d;=&3kZRe+N(JW8}V$vbE7J z(R#k0J?%!-P!n453Ta4F>rlUAl_d5mCTNz0%0Ee3MQK8MkORGi({AO$K8S|3_3{=n zdylpMCiT6=38WG8x24r+50+i;zjI@rS9+c{fNt(`PLl`WAPCFX+wZ_qtC-m(r>odt z_JaOvSA`>}GfQwHZ~xRor7almqFI|c8)G3+#3H7kVr;~o~V0cezh zkTf(0<{YWX1a6~E{9rpqc}uy_=Gn<{RMz;uZsj+SqGw|t%q%c}ZOM!z`@XOhR3av_ z$S%IR)doD51>k_RnvdZmR|oQYNRMKs)f`7fkhyH;I8Lj6aY%sWF$rrN8b1X;&{%_1 zrYqj+R7%u+;@^0w7-!moDO$LTF>a4QNTvk*$im3~fL|r$$K- zZ>Drs{2uQaMAD44xd!QagW~e4BON<9$AF&v?{|)3v6O&aMqTy|h@t6&;cK`yNo2Qy zHo3@n_PKY+qeitHLR5rXF47C3$y9?LGka2?c@_hk;NzXRf5?30Ik};w*yEKdiIDtQ zg9kdAWMueMYH*bvC~0zfwzT{_P_pd>pfdr0NpH|`z`caAXy)X;6qYjY8}^e5eSSEv zGR5M6%mW(!MTa$t-=?lP`UYtL5DS*1)?8jE^2z z@!TO{{dS8pQ|s`bU}C6Yngr3r-;67`Ef+!8fI0`{A9q)a3GtUb@ zVFd{5z6LL)5X`q8ocXkGB$;{ry`86CnPu3oTQIl7XZ0U9+y|n8PNvCc!gANj(*}Nx z7q9_k39!LDIzHLac?-O5kl2Q^>#MoK^HJKNK=wowosH(TB=V2#MNf5P~fB0IyF?bij*!k^1%L08w@CvC7)BXn`l@`%p09*dN|B%wtOWl0_z64ocJLooj* zDe!Z{aarSvLza{BcxZsPz${R6RcXP*FlTGFEsq2>;D`lM)v~tIjT6yKrHrXm-20FYmek_@IF2Ar>i)-w!xo`PK!LCeF95cmB!^yk^! zBs1|!^!(PW9i)r7^2RY%nBMs33{v#pTnXw~_UNU6wg+UN8Hz@v$6zz0v|xU&nN$*p z_iJ&`nV(E_=VjYVW$fzq9>(Sv@Ao-ZU5E4edu-CBWCl#BKhVjxKFGmFreaqB=+Ewq z6^1cZE8m#TR%S3pB0fVC(#mhpJx*3U zJWt8(3^`GSbsRZACK+>!6M$f6j9%~!w9q<1&^G}P2?`GG7b6baK9=8SoLCl*fVPdh zr9(x#IqZ``!Ech>(WSlEs&ulNt|0yEy-4Zppu2n{5O*=d&A=dR=&RDQHtx}b%X4dS zox-R8mN|HYv69#;X_GweumfVji6?->kRFC}@e5+q-=Xt;k{4V1ftT(C(6tHNKsO=B z?8Zd@_&C&FTevx(lPzZz4IlIfs^Q13C*1u>kw@D6GSHjANbO(4yiO9LoFO3`NeQl2 z!*&3&i|z_FT^MQ_D+$7E2*n2_)X;`3R~MloooDmwQZ%14w;eR>KeiovBj{*eI(enz)bpFF9$)YLQMVLc41|Tu;{~D=zWshG z#pqbmUmoVIiH=?ETRzor zb9ge^_py}jUc?l5MN${B>)0_?54@T8C!DObfvTo1O7qTxhE?YL0#Xh{aoy`*DJ5@% zNW^P_?&_n-Mxr$dz2TPyv62>N!?Y6^zZDs3jK3!cX5)LVa|{Hn8@LjUI`95_oR^#&MeNjp zwuwT9`ps(;`kedy2TC@iMr{Ul z0OQo$3z#elCJ{*G;_l83NSB%ZqoAGM;k|X6Rxva-dGQp6N|t@uAIh1{|AE}F6#oH_ zMfpW+u5W9!TnG8tjxnAStHH61NUfgl4wqmQq&3-mSWcwW23caGFNlXavn;y;$>p6& zH+tV!v7LGE7!?VO=u8Pw_=K-D`9rD|9ZS?|lIM}88$S>2&eFbwj@7=%|2*WqFx_Ql z9wf`+JS>2T#g@@p6VKMW9Gz{CL9y%dHOX`MTEq&+XGZv=8Bl~!(IelixHCy!GN5rg z4~`OCSvSPiQ7F{8_c-=z=~FD!%EuGz1xXO103RTo#nY?|{b`FFFk*}u9(Oj?gE&|h zse^FXfOZiRB{)G$UCw0wPdl|z6~zOL^12>?mHR(7bRyqZUPa-4JB=8ONmfJsYgJABSXS26J z$}U&yOE&mMCC(en8zn6!(~rsNLdGqQ;SFcXOC)wrweaCzQ~Iz6J|8r#hz4oO&ytOQ zB8ed#9zzd^Ui^x>YwYT8p{)S9BH{;gK^&P}z&8ab>f3rhpZsK1vwy#W(AYU9gB zlM!A2IdO*NQF+Jv`os7ev`N@cetVs`^0z-7LWuMCXB4bb4EAPwo(*SCE%qUcoGir? zFH#DmAS^;IWCKx820WS}I9CqTDR%$VYKR1(?k?n=S3?)FW={Z5VZ?%s{SAZoOI*mP z*P5>aBLk#Z-zPhR<`9N^#YcrNQ*YwnvgBUSuCMkmjO20|jV`k;O%%CtK`cO?zAJ}fWA%=*`o5~7SI5!#D&(5UVz(7T*;4R->@Y`o7=|7} zeK`o$C%q_`>`n6vFz?B$0SnI9)Hez0=t2kz?&dq=6nqR??i<4l6d*uB|9Dn4N6g+p z&PYOmH*e{S-ML9qHPxblCb>;XQ=4R>Y`G+B3T)WZv6)k#Pg7sM;A7~~naC@9L42~5 z1x37M?vE%wamu@ zA+7SpJNt0}MeYMBlW&)uc(0R0U$oy;%yHV9?UQhZ3lc6Yf-Yn`!@qtdpg?Vxnbbla zy983S=mtM}B}f1`B4r{v@5tufb7mgjoAfYsLm;GNrMicBBfL;guz(AhlF}IofB!VT z`M;qgtRUDfcvI)jO$w8YCE3$QUeIc%!}4*cCJ{_nH%bV&W$Cy;5@HYoZI@>t%{$Nh zNP`A&V#t%c$k?U&0D*65_22-~f6Fku#1-pgatW*{2%TXNoFR`B)_AV5wt|j3-;lkf_2`J06B8j zDiH(N;OIAGSRZZhg=}?Pxb1?X@PQJKF2l2ZGNvFG@3ZSfP-bEP5!zlUkuKC9C6f$Be@)d9Dn6ov4ClpYN-tzIhr!lDR(GOE^9=oi(!UgQloA zhvC0531|DBoFQcG+1f^-W*u2b3O;=v>@Af^rW52>pdA~b7ZCvzjD#7AuOUbouv({} z^Y{zuVTogEV^@NCa?QyEWG??qm{%#jS9gcmxBfmP%^tkyW%}&-g$QC>$9*?Z2rfus z=iKD-8a210EZATkzWlfovF8Gr--I{b88d_rA2) zdrydcQ;RD}Bdv&bXA@^9F$f;Upuw&g>WomG0A0Dgc#LLhJ|77s@&}Nywd+YDZD01H zFQ|0!lMI$j7TY9yaD{Af)VeS)RMGnCTCoh+oWUwK{KlLn;Z@eGN+`EC3(9r$e=DFD z5=ev3ahP481Yb5N9OQ|`hW&fK`%Kbc77!rG$fKsz?-Jf{#}1Q5z_G8x$0eTg5&p*a z(taBn>|fK=X^#&P&zQy64E6o>-9n=2%k2Q!dd7X-d?AHADn$3X=fJm@($Q?H<49^V z7!r;}P&Th1378BaGE>+|IjCi!Rn}jAq^=*qJ%p1qn1iHCL`OhqB(}Ozgx}FjU>1g*?}1(8V>{3K9eO zQtJbvYpV+UOw~q6P<5BI~vmi-;)vHUIIwlrr(?l^Gz<&Duu>U=Hre#dvfD$ ziln;`J=?Iu?+U^@l-L+OLx2qn-AQYzZ-G)zkRe!XK@&;oJY+{1I0;YvM^6i@VXNEX znSJB^dx@crBS~EW4D<#&RJod6M}Yu95qzR9dk(0FJG8G&nDMN_Ox<3Y(!MhoCdjD| z9gNATGtshd;s4O|ePkSCX3t#I!A=xO9l2ZaDSZ$OvPrs_Lk21^?Wxj2Ed&k&zb~LcVz)HF zDmJ7lE_VlVlLE7%dfwK4@>bc|~qy1J&H2aJ%txOANm{!?`MWJt-ap9!ub|1^;LGETbJN)zN* z9TD&|N*V$eb4nO&qYQWGrv%Yrl;3YJLKJTy+4_jV$+e1yn2VI=2FXWfB(dz(#M&3 zMp#HupaXKajny*`e6uSFD#GlBLfTHKP+?ybMWR|{7j8I-_M085UBMT551kWeCakE?wA_tqJ=?o zss4XL6<06Xni>05gT~3n4{uYNc#7-7Z1Ve}_XqZ3Ye!?2Zl_cgDG{L>L}0S+@Q6ak z;+RVgoewpChO7nDlL1P1ubF~WmIeqB*q;tFDf4`QRm!)?_G_W|vPCCz8`SVWIRZM>qn(yg8~zX#vzef%p|uMgI(<1h;J zeLTbX1Dz_2<2;yQjgTVBSKDDGmbH%>f=-F6Jb{V!qUIDT#m?qMV*FR2D|<{I-&e1# z*Q7o$d~Cc2QbpVy(5}S3|1}^6(}7c@?vm`qIbPBGFvsf&F0A(l+&aBz;5qaoFtb2^ zoI&iWTd>(sm0WBTiV2mV9k58}5*)+!9B^{p-E$-{q_F_kCWWs7__q2#Hb(4Aw8G}- z$2BN-v|T&|ojv_L!pE@DM^N#BVI&(2=yk4+BLGDh1_s<$4xH5S$_q?F*D*{l{F4>; z8NYgwd-!~A>rSkmoT=8ixQGP9WKYT1y|>Ck1RG_4ax$4wg%q$OqxV1tN#v*D+H7~s zFxHnG5mCJdCT_%r;P2C+C)2`sn)x2-2?;1QJbxq1fHfLH zR66EO0c)s#05SrP@j8(SUv5|&&DbJQzKX8I7z{h`(bNPvKv2s-gN?mIcJCW3iT4v9 zsAvMJ{3L_!?=SCQUk*3%&ose&P#%8NT&HPUO)|)M>o-0+#+ii-$Xyg1&_-xf^N$z2 z(K+SI@PzQR*KFR&mtic$?nfLLXtA-7_P*%8YWyMHP)h`!Q*2bF`ErxnpXg9MLDGmF zM0Eo~cIdtH#6&f?0XE;L?X5&>ZvKmFfR1*2T%@vgIUh#nRMF38oNJpm5qt2JbJV|1^G)c?bzhA+5u@i7Gi9(a!V zk8wK}{97k0r?0kc`j0Th`huuA2KYY3ytmO0cb(g7l8zVf?#W~IcW_yg!#a?)cR4!J z-SU1sJZS+@FOE_vL&ROgl6``N|60N0bYMpWvf(czK2SaYl7=DnBH8s}%3vo@=C{1s zzz2he6{u8Tcw4k^cR2Ra`oGB)Ui)Ar{auJe)8wbGg)C?!(QKwB$HKE(D&H;r&MDIT z8xEC7L9$lD>i>js6vbCau&VT-U#4{r(D&%z<|PLOeO;8C4~Ns;zHw7^!;I=C$ULy9 z>lOBrC%Kx30hf9lzDefHzdt6)fh>AFB*)Q;x9{)|2i2SnDL{3Hnr!NQzFP6+g{@wD z(ca!|#nbK&E9FCzwbFK1Z~#2g^w*I(?XeqW)~cA~0HAJ2;uTNvB}wQTF)+c^;II2U zjGeQ4li?{sa!Fr|Wi+DFV{-V(bJZZ&6e#{IPY$It-CKY^`+XpUUlU@hT1>d>s`t-?QXtaRfa$;r0*n=F*`e_DPuq~{ zLhlqSPb^Y*AEtW;mBoL03%|T2mwh9m=s|grKuKFdi{IMHb8p_aS3v*7G~%&J5?7ig zUHK`ZlSmqAy9b}+2ASD=r(K+d*XmkhArfSuKq!Vx3Iedm zGz2F2Yx7@}e+940@~3RLFV@J(jPEX(R2Y`YF@%2XwHM{W=fFEL&EU=GP6O~Ja9{g8 zgoOAwdLn?{8tncT2g=I=|NY8Mjve{#czj_2OyCF1Rh$ulC*ieo+-~pI%3mUJJ94LL zC~Fu0>)7hCx=Y{YO7V;b)=>A%dZISpvHPMe>J^{EuEB#i{QpA+vO(4_d&dulVJSYh zErHCvK4?TZfxnf=9SEX81Rj!TA`$?q5%4q^aBwEAL+cZ%78fusVeF-~4VL)My2F%k z94(4}S~P|F`5NnWM4N{mCV}X}9l)r*@#n_d8yl#7^C73X$A8}^ad;b!2V{+N>p|Ag z@Ic)=t$?q&fJVX5!5I= zO)tx<9*vUop8#eom{??fTxvq*m)2Tjy67oui+V*XV)L;^*% z-G*uOu(NuADkD#kktO--OCpHjhwmtKfgFRDmtu0>kTrHr!uqAtRf2d+B^m`Wa|*4i zvweSj`N^@w8DgPa<-NKT}o-HkVrEdHexOgj8Uw(4|!2KSCaR z6$yfxH?=mds2MhAKdr>Tf+-X37oQ$cDYdQNLds1)VsidSCOrro@IrCBO7>^4re#qD z&&E5+1z=Jc*fy>!*1nh|^>iE44ASvtS>KI&4I+;Tl*ndjk19OJoq5uo&HDxi5S>ua%KuTdUwojn zV+$z*{W}<&f*#|DvtDCm(fc$x-ju2s_;?JySM>sS3*Uq!@UMWHuk{dgccZh+SlZ%TGY2q zU=jse3;E);@?9nf0Nc9(69>M z!H7PE4XA1Y*?Hr0FAFS)zpy)B!T>(rF_(yMEQaqBPyTTV0gWuw*TTStK@PB}-NS^?cL;Nv!h{m$-euIb9;Rj z#1LZ)tPcX+SBM&HyNwt3)CJc(NPvFS4xho2lnpRiRjtDK2fR=So#h&euX(_8_37oC zss)-90&q?$jJj52Jy{Z^7Z8nHw0?zE=79>)nX$WgDQdF|n-pQoH{$(MFJZkxeeFw1~0on{=mz z$5H=)${C7KM$nj)r9DU;#A_!b)BEoZ?MLYz;feppL&={=9B?9JA4Uv7S5h=AQy? zLk|N3ch#$A{jQ->6yrbHteU1SLn=-znG#pzL;I~gl_k{IT$pLdqq(a}w$IZOv84_t z^g`h%)LF~+LR0RtHuaVNK!#XM_usi-R8|l_NeK7cBWVPAcTKvZM^XQPJRRh{RrTL@ zkYW$u8+`v8rs1MB_>j}C_#4LtU;Pls7rwNdIw=M#g(h^^XPBt`Ywp77dWgg5-3!VT z=!uN~j`h+u1gr8oueACtmE8#daV|X&#?RV1`(nE_2}$lKEGyB=~F{T{r4*F6{UWKd*^5Bu=bT zqjypTHHM**ptRm)DJkQU%4BF?uiBus@&$LHAB8#eHj`0^vgZfey7WN~fw|(eR zM6N~bKO(so*#`%0G>+;o1|q)iXwW6UpFizr=5buZd*C_E?^=hLiJ$cVhsoRoEN&?h zd}S}pRM3D?*|+HWLC0Ne3r~>MTjDau_xHp5ei_p7Ww&b-+i%!?;f+)qxlR}K@Vxh{ zmziF}@%(O>jg$mkr*pR#(6g$xKH|h7+vlu+m#$FgrYO+~6pDds_P+G}d6uJ6f=6D#w-o{(#GmWfT(8Cjss$ zX9b#@yD*D-T|Bypi`wuM@OF?rt0T0k^u&{x`mcPY>9`AP{*8zx_C=&mEF~(#?pnex zFRylR*ZI{~iZ9Qgi=A}|iyeE?LZmZH3ZU(MO+g>E=&aZ?t}SYp#qNpT>TL!wG3gGY z8%2y%>w=qPJ2Db>!>;hnx-qC3iOsNvP|rvBJihr=8^`WJ>kc<&C{RO?^MT^6 zOQgct*@`wPb&try(ik?lp_n(PFJ0+~Yf5aN6q|9X z^TzT=s5IIJ>Ug{flY(`WLGwUJ^=xDL9s0;-?uN(ydu&b>^V*EwJ0wj|s)VPBuRS?f zmL(jf(!b?2+j*PME*sDa$_ zk0Sqe$jrSr?auCw+(u|2gU>HoCk21nYT(e$$*YcOpF4PEMtXP+pj%L1%E_MWuIm@Y ze8^;%^U~Ba)=wsbk*#ViJ3tt`(Pz;vIUS4^e=4*-U-j(AGm5v)ZZpWtfItHJ3!AQA zEGaVgY_N*?1unj6N>!K3vxQ{}Uh7xpshr%`rXiGSf`LY zq_j_DZNEA!31UoVqh%^@V3`TsH~Z;+x^6|I>=o6M%Wc9npYjksADZ~|d9TD#u88X| zubmyUto-#0>}K8NDF3WgGJVzW)D>&uWK0VFLYoz2v3cn4*_;*_POj)%pGkPXp}Nzu z%y-`sr2gy9uU|`+wzr?DttQLo9q_PXpmt^((cWpCj?E#i%6=w6QxiKM1#jdn(W}nx z43;u8lzY?Gr|ueO=@5ZMh&wFYfXnKfnDEFNfDuHgzpnw=6`H57mnnq4n$1UhBV5$o z_?;H&yqGUDdito|&Qt3E$xsK2!8+b1g!7>jZkAYyRye!!nf--W3RvWQ&k8U0uq=h{ z+fno{OTKeAspyk}co}De^5$#F(neEK@EJbLJ>%V$A#sqw$zS!e50jhDxg zwHD9$biyY6PL=KVV2imeSEM`UM%*I1nfsNj^GM?TdHE}f?DyfV5<=A%8@96}KoknW z%C-HsC--}@NxgATV=x}pA}$*nbtAMHkF@M{+&j|!I%lHiRXu11)43>rzBMuf5PP3P zOhRy?*^jvm8rP@0nnX9-V}zvcK=|6m=fDY4zdw4hSFYjqc2$I$Yli%kPSKaaD=n?5 zK4Z>J2+BaBsEY}_)3g9mcL1q(>nZ&LfACZ>_w($UoPp|4bv`ZgW2v737NN0sc14dO zdtBjjLG*5fHH}PdC%;xvh%(>2@O-`fNQf$VD~B)T_qvO%2o|~&t}R*c&G8m`SR#$^ zX69rAo0_bZhWJB}d*j3WHrHmB&Co}@CBzH92R`ePrYn6S>}P9iG+M*vlo}~NrI+_X z7oMfSZU>i2EN?<{YYmiqIj}PEHN(sPy9e0DH-ufkImMy`6qaOvfKMYLnSU=!U$-PK zdS3YP$@Uz`fj!xHWI2rDVrXoB|HS8)uIfbTl`y}n{d#w@{&e`P2=-WGVEPyMs+SBA z!?|-V6c}8^-_{%Z{n?}}s%Iqz#dd|D<5_*)^w8I`tmVhbn_S5@u)A0M;;p(C7;DPm zW$Vs+{A}ZKZ9WacO(+q-#eIdgHumUwIMxm4;+%qwSH*Cyj$f~)t%*Irz(VxQh#mnm zA8JaO#ARs@*FQFx_)ZIQX+4Ee*Uk=nPV?DZ$YE--?*`Xh&tWVWsQ<#Gp*4U6)K@&9 zT!Z0&!Xqi;Hc>m1h_Tm59B}DZr9@sToF&jb>ELx~LCX{@%Iqusd=p<^o5`sCnsk`r zvTD}=RC7$OKUMbNB}ybk`$=b+=>xcr)>_LlE>2ET-#7qI-$;`p@&WN$SUm zq3t?-#}7AMB#Nfv;kagrXA3%KZ+1XatKNqcejK1ba1}1ULBFjb+w=S(0@EBLiZIwx z9#AuOTbxPIO?!NMXXt!Z%w~sD8)&YZ(eIyEA{Y)_ow($sQ+S+N;dI(glyxlb^Fc43 zmA$=l_i}^o#kIn8=emawAn<1;YAx=Vsj#NZ8TF#8;7~1^A{57{uOD=ZMPhi3ouih1 zn;IUO$fB~-)&uI{;?rO5(7O2QEgan9*SYz*7B;G6YAUv)eZyN4`$G~#h3s6D$727L zd^u%3TewHii#Bx$1yK3Xr0>qfJyjsM(*$LtaQj0O{kNTqzjf3gTSHtH6IFKi~mDD|juci=qCN z=VU|F?pIejJn#$6mu2uCAZZdK9#m)5Pz+Lf+X~aoCo(^O?8h+811;^(PCq31E0N|$ zrBm96(EO^2ft-fL8|V>9yfac$Ma5KREn_#aO7QIy5*GgYX@=uqX!NpkH|E~8RuSwxZB>vi0-mkGsK;z{`&6h z`pNJDa(r%C7s7;^K;%xbW<*gsymjtz0?|~?cV{1lD9!MK&Vov(aW)u(IMeA28=-rl zqZZ|DPtIANmxO5wuxLUJ%+c)g3a1MYI#g*c+prshgWyQiTIC|6P`E6z*-sXr)FNrU zs$nz77>1UB=3k!`K*nvId5^p>xzZ}M*nUi*rlZn0`UC6>mp>jqCDOd; z6+FsyOc@;bZ2zxIa9(GhC$_C-QBa5OV;SvpVp~a1KOwEKIASIAqT|j&&Z$@f;`=Pf zC6yIL!>aAljgL2ECWP>%2~+J6k4=ZdjUFU^tehG8C(9#b^jZ+@^b+bm!8ho$YM74f zjb-$!zu~Zxgt~2djRryLMW2}Bo|dPzpSY;txHWATkrniXtTk4L__XYb<>-df;e@-z z(7ESOaf=^bEPP^lea(W)v$`3H9Gu>TaG_d;&7|^J#Fhb5?_j!8=mjD#@6YMJ3@kv* zSM{1{RM~!JwxioGin%{kI7RPIOe_&Un_=_VB5lYGG9kDq$?n+)xw7JfKp&+Be^J4M z($csZJ{laCMb?Iv5nSGRISvaN;Uz8+S0%IrMXn!h(A_eAK0nbUwhU<0?}-U|8<9Y2 zRyL>C+j>3JZ(&dt*a*ouv@?Z?Uqu}M1x_8DKdo%-hoJ~Dr_7cyJ|OTO2cF6IS|^iU9F%+`$B&TYk9WSE9c+cjcTgoq*W`ahqF-(58rHX7K7i8Y_L3Iw&;w=f}M1kx55q zl3T8tFi4XBN_tD3a@JrAGap#D9^FNDb>dL|TS>zqS8N!vH`QKZzwMfK$`|F=gEdmC z$(rEw_9q>P3+T#dD^rlZFrU`;dt*d^>0^9}7>Y8dM#gup{u?X=lO*o@P#(vw0&++A z@2+pCgA&I|DCbFNnTM5)7}3$-)09leRm|&` z)XZK$JHd=isauMk^flq99=e+Dfjh8S_FMT=kG=w-AD!w>x>`_qRAodxbRg%%%$tf> zIW!PptNhbdCv-~8I|{FUKCgx{j1!XPB2LxoX>E<0klAn zLBXubn6?4fwo)E9u5^P@UeKo=_KO`s9n6B57Dk*;NiiTj;@c&AsKiqL(%$fePD~m} ze)Cps#=?Nu);?7`ovc2*8;(otk3Ltk-KEyI_9uN0@N%V`d7^IPN9rDR{V|E#*4>@mT6jO@&4__ zQ5)q**W~*N-*k&ffp4FL*spiwxt8M7eE5lW7$HkjzV)OB`wxqcvee{jWA#g+wlO^x9T1feEyEo*w*Y z#(es1OzaW-pfVmm-1|WGh&fW&n@yuJ>M&^MzM66wCUM?f-Ioq5q_r8n=ZhKd=rxf1 zBX~7YRt=kM#K`j}f{NzdQ3t(-1cJ)Hd+IoA%C(p!K*j5e(j~u>Yctuf8jJ)}mAJf_90P)&1d169tI_UCh{(a)B8ploayB_Qv zR-LpHya2y&rL2pZbEJearyX36canP7r}$)RR`N*mYmd;5l7eHxAB2A52cv0mud3PW z{T*x=%oQ1T^gCR5*00wG97mbT5)#|*>ToT$UaMoFoo?Av+=V-(r)*?59)cyZDC|w! zyc+3W%`C&aT=<*WMD|jdQXO>D!%Pq*=&PYP6dbXxdnFO3DU&)HDPb)!1+ze4pqZs$-_V*1&pe zYOo}h4L@Exllg8slRpLG+chwHv-auZ;Kt+~eyl|9S9OV2FDAiyB_FSJc-gDHA1zNc zP$3fn%F?FO1<*1wp60fGG7)8FhOUzRH?0VNA(=agqm#9ISdr?*jmCyMjUcR>y64 z9KS)L;AmiiwwTzjkHN+=alY_wM$-O%t&W~Hj}NPrz~6N4B$g2uUdDz+F2XJFth_Nsd3;36yAWj3s~GSXL@`Tr4A<-OmA}32WbQ7mo;{6? z5<6V8npdI0A0v!r8DO+!mC$0pe{tk}qOG&FHH^9&dXJx}M*U*|iSpJSn+M`Q7aSkGXkv^JKy%S4 zp1R@`Lx=J(s8(EyBN~a>aZ%4I{-wXnp%QcXOUe)>)0XCO#CIlr0ov|sov|TxFH)x{ zOv=2w^zA0qQ}m8qd-ZZ#8(5JgS?KJ?pjU}w+z)G|7{dYk7bM^jVsG~TyRfcbiL}OIIv7|mlyD8{X8Dmdp&owiUTzV<%6^D&Erqk|`~>zt(FU^2>HXfLJo!tX0iB%|Os zz&bLFxn$LiQcWB2)Ok!YSY<-vN%Iq#U7-1ge0%$PUl4aI!S~J}FpEl)aA_<~Ce7}q zP-r{%3l$5xs$J5JvlwS#VSLBhS)4huFA5X~2eqzNF$a($<%H7TJ$}eFQ$*twIZuqp zhkh*KFRbSG>NfiwT*4h*)|R*^lioincB9}RZIro3oTLLJgck`H7g#5J%}B(~(!Zg_ zJ^d0f*O15vT1S0hMM&TkXDdW_^G!M5+wN zSX7*-8K$RZS5KmfKMZTu0@f^ucs!Gq+cFHftJ8O0q#jUgNV&H3SJIO5YPU_$wdg@h z@Qk;IiK8eb#Y-&JI6YgG<2{Gb7b_4AtE?#6_U17gg4?E>zv|j0EiYB`A)wo{gn9-2 zJ>p`E(r{607!G{}M$0Gdi}K#Jh%bWC$Nqh+?%)Tny@fYMCzBdYC~>%~Gk@|$6z+*@ z{J=01*7{!LJ1xCBb3dWng5AmdfdmTfrTU$5R!Yh1*39Ko;z^w{O-04c$5*gFKYe*VV7{)^G%fk++k2>XqnZVzS(* z`TJk;r#jO_QEF8xak^m9wCjkZY~3&rmISI61m0Q|>_mTOV`c4= zT%3!-`K+mHejLPeVK??KC|MpWRvY5LlzU3~qTcMw$u7yGjB`@Y6EcFVwg+ilcepJ(Am*|?Kd&simM z_p~Cpw^)i*s`Y9J$K3v~?ntr6MUnB2!5PshrEMjdD~(FFXp!d|1lRnZ1|^is9rjpM zPf3}3a$;9U+2xiMPga=h}%JL~cE~0;nc_l>DOp76geGun7uJFPQ{z!k| zUg%uDbat7-Z9N>hKT!f^>wjsG4uGU4opTUHVyrxOchQ|1_zH~HngPDA4|x?3yN4b* z2xyb^>9w;|5}4wB&WbwMvV0#TC}q1WHU)S{uPQSeN(1H|^+E+=So{`<$$f8$oz=v}0W1RrZ zSdSY6?Hl0bcAmM!ogYy~xs5m{iEg2Awg3Xs17e z%8jj1diiOUuIH;O%XqG*3g)Vp5{(Tr=^YJ_g_$6FFSV9eE_k=*PjMHd5Q= zpU*%VQOXMFeVFh~&dOs>r{c6{of|dd)It7KEZpXG%-rbe0F`hy95F21@K-W~aVHYV zf+sDP4kS$}bJd9(PmVAL{NvUT(Cu16-GK|@M~ZC*;E`q`a1DfL`}JyT*K6%84>`9I z1qz?S=a6@Pb#BTtyGLck$LLX4YCs`!&RuV!UMBZ@V8cHDX12Tg+ONDx2P&F{beVpg ze;CyA?S1;*nIb$i;Frr@YR34XkC{1&F}X0)QRhmR?pwP{&G+yE4X9KyYcmE0msfp^ zJ-O=Ls?$;lEw++vy&c-3j3l2|5v0ZAP!GPeEIQca0yTWkuf&nlbS;xd52=q8xcqf+ zv3XtTM;OOhRKpwM{BTh)wWQ%NFaZSnIaR&c*?_Z9Gs<+hye zPR3-PCYZF5-?$3~4rXUJt^M2k2t1vH@nj@(KmecBQrO}uH@+*spibLEn!re}cJ#iM ziFu8t8scMZ@fNHp?+f@F1qiYXOw5W`sZ}*z8#q9)@r=p?``#jOy-Chv;I#(Z2@Ozo zBZECP9C;jn5;0H5zVC^J3P+%vM}1u>wk>YU@7$}fw#{hM;=*#X?J&`-0wfLh>?Q(@ zB0VAf=aD1k0k`?grc1fKCTK|H!=(e7n(2~=_i8wd4XJ(qVYumz@8blP?4=$h`O0Gs z)1c_7s}W)99;pG|bf6l;mwr%0Ut~{B&njJkslvk=G-p|vf&f=wS%sKu-?ox^zUO!~ z|9_YS3YFt5C5yJytuu3HhQL5r)Kd8KhjMBORIV^v+7mN>+spCwQ;b_X3UzQ`r#Gb&qKL z69(>XevzND>>NNOZ>QAT;NCCazu}vw)@s3%uMtWvGSRT&5EDQXoNpFiGb1OnS$!DQ z0yEZrhnyn40$KXYw&Nt2}=b+Els29^`yNt z8v9R9|BiXB1nm=6`Mf}kS$CQCoOn3uS#jf%Qeiv*&hrz}->~74o}(K$rS!>WvmPUr z9>AhA;)8Od_?g0J5uMdBm*_<1lIxVXYs7aHcI%hD<2LAM#{$pc{0t;|fKz$R5PcU7 z?n#x_^!AGMzrY;9yX(~Z^`5t_V%Cpjs3RTuZFT7h55(7=%5QMPwiCqWNnPfM(#x6% zjfx#o2Q=-Yx~JxB<0GQ#g@A&hJkC?K>FHl?AK-C1b550^o5h(Ll5PS$&14ff!I@aj z&wT2Cr#o}NmQN=ENupbEkmzsdLMwmpiRPc5ENQPxg&B|L91%WMJSzj)fV+M*7L+2% z@jHH`(upFDLMuZqw^e6Jk5y*dC9T*5R_?n8c)Z9Hkt=EBq6d|8zAMh5TyYED0K^j3 za4Ug92#l@@hA@MmaMR&sK|>j=SXfrviSul2pm6N%53*`rCVaa#7w%z7$~dQ8X#CfL zUg1R1h<=XnLg}@cBHb*Mwer&P9F?pttLW ziz(NuNiUr+Rt8eh#0L?c($N)uipSE1pR(8TRPChgmg(3e{t}+K>j#CBpzEu&VtID1JR^_dv3>xVi3iLT&N-v%)X-S_KBu(TZ#=j1-6P z7Jqp|Z9!r~r%TqxG^80jKmWa~sja!5(TIxf6f7(U>pzhNqmO%#)g9zX9j5!F!WdqV zuJSZ8aNk!Psq7G0aG6l(wmac0!ZqkRTrXxwp4+Jd)fMZ3GZRr=N0Q~n=K!JjsB+dk z=r&#A#dE)hq%I(ST<$sfuJ`J@bpWkx(onr2%q5(V#}%8*7$|n?^M11pfc$_xUupA% zPU0vN3ONWN1~WG61;7K}{FN_h>dYiJWG3^^OzI_*)?bF_avf3_DT76gPj$klI=!d7 zr-Kc}Q}m>k``MV2Ipfxz^}d`ez12!_{S<6?taDjbn0?^THh9^d2RE)#{% zDU!eT(vymt_nr~3t(cVU(SFsbD_-i9+K6I{C4M*)-HJnyozU+tf#}Gg{E^**uN3FN zI7LWInJ=|lLNmiKgIXF2z`I%aL!FM3{abZAzPrAPPF{D?D)EX9#(yZ_l$S$+ZwP>F z7l*w41A5=T-3jj$8!%N>?Pc!DtrLTfYk4;S@zHwV;>~Uz%7Ap;*#Yl1Hw0%c8YliUp7(PrMByj!!26T^*ZPjdRrU~d7sxCl_eWbmL9bAa zY7$Uv$O>o6Y1Tp-A$hOkYtV9nT-odE)xvwM0xvKn@$T}v@(l~R&)6i6Ms;#EKFO;f z3Y2c7>dHF9cX8AvIS-b+&=y$TSb~&y;Kzb?Huvf@H(xc#zeCdGyeWq}a}uv(fAZYI zvBZGB_kk=cZNdG?Z}^BKbGngK*Am%()V~GD*&JQCzp4^HWA){#V}lulF!1gX zP6;FfCE&Q9mbw;|`TDH{97eGET9)U_KisuQNFj$Wtw-gdgGs|+vg=-f|G?xA@KZjC z`>nXO$tI;A5N_#X+!D6-4Vp0Ftj zq7IGWSIWc+cd~hP)WaFq0LF|AqL0`nSq}yvGT|G@5@Fe6y#?@*qp?$K?}goeN&1XK zX}7%slM{|^NVs+N-}zZLKHu7{#BP9`uVKO4qgn6sRQ06TgBeQZ)l{eFCp#x-zj60N zI9FWmg-0LP7W#+vVI@Tu+_f&Pr8FXpcOnXCtYI1Ebb#cgR=Ug*jOGwFtlcLHY}n1N zvQ|M^(-1s)p0zra*B+?&!rOi3U3Y9sr+bzfHd-5u>bib)0TpS>L?cw6IRe@AlR&A2Ll9UlmIek*S+dg(W zM>kp%e&h6m2F<>7rYv;Mf1$#F8OMNVsT`NOCa*N!U7KU2D3>$TCPZv-Ug(9C#KV1| zYvUil;=At^7&4Dj1Z2*Sfas&=Encrh;gm<@!Ob0;8!QQkcJ(k{BHuYNW8o;L21c=H zsFWMK0}~Y@hHSwMFX5p7l$^uP+1pb)*C|O2fxttj+pRa)dYUlg!XhMAXC@ySfsyNfG&c#B@9e5 zb%SaZT1r*@XGrrQUwza6Y41sfI^4+Ayj;5!Nu9P&C79CC8J^{fUsD$gPL!%%v&_SO%6B7*ATjj^=75wD7iYLWm7 z5O$`ZI6JpolBocI#KqFli(}fu7E7_#p21PZ?K4g%h}-0zW9F%JJ9@Qxw_#od*jiU$ zLD6DXaTZho?TO+3sjscZ@A;B;FmrXAEiF4x6{ercdpYs$@@{p0KdVhnm~=qglUCk^ zM+%+q!GpX56PK6b6x4{?LcYgm?uhumT`gsO8j0v4a4FUYT@O8r*hv@cLsHN zX`+2BDg}B%6-Z+M)wv9fj~X}Scmp&MT1c=GY6Ixu(w-T9F0$7O&ejl}EtcO%A6ku# z<1mmw_ZY1u(6c025?nah;U$EtXgiWNb2@eM16@11`gX`o!rSo>?miW_D6N}PRJ~C8 zjMU;J{{^1D?O0f5f2_WC&9HSm0@;#4RpAJPgwXNI9knx*)fA4Ix}@G+(unE^3DMW* z-PYH{ExfvZzogphH;6I|#(smFS*0H?i(0wLL?^JE^b?t8dIB9A0DI9w@?5AaXdzne zA_nWmiOBsOWzY-v4+=0MOV2nxE6m%mo&`5{$&X>(@}j_oP>f8;3pF_0Vs2|7o}%ZT z?o9d|)aiO?K``C*pukY`ge{_v2=?!9H7}`E90j7!PI|$hpxbBe(z<)vg4q6~sQ{`s z7=F{-HhC*iE(1Q1g#srKln;Dkm_h5Qw|L3e;OaaTsK$gpH zga30GFHu6~%qWdkZTtuhmLy#04E4w{hq~gkNp@xYwF@=H&WaOUJgkS(NdNj_D{TxDs23$wL%;z zdlzKbZTR5K@ZCEn>=r{d?TPOU#7{w?l-4C_=-eE>1Z6(iU{1QH+*w@qzP_DTp+Ah$ zIE2Bcyo{`zkw6AO*`46hnc=cI;msD{rKfviSfD>L(o?2$VAR;oqaBuEk21ztZ^f>- zE=K9=>(|-+gKbA;^Np@Scy2{sfGHxw5YlnA>fKwJ8hQW2Zw$8N?Osp3#x4R>mco`I zPwFy7ii?u<;M0|`&;aVfLAsW3k-MfYsb1(d&-M=VJ3*Ab2bp?Dq#qG0&7`|#$=6_H ze*cm~ir%T=h*wZ8le-|Vgm98kDV#H0;CH`Yh6_Bh3Jx&SkxQ}Y8{2#R8}&H`HBj}y)2v3EW$j@x{Ct)_(Z)#!}=T??=7qp%R{R`}Z|U7wyv zUXN1{*f?g}I*w_qhOjP5mw`R{Fk0jmW%_Jpf-$`m-Ug64j6|`G*Nn$gqrp1%xJocq z%~w&rCnPQW_5o+*Ww}uGF-R9h+znMc$OT1C4lkeP=^>GNrcHIzA*^+?NkZv2w37V> zcR!U^GdH0^r&Qg+%@*+{=T%CG`r54BkP}j~m?X?^GN=~F9mOGi#7{`S13{Ckx7oh^ zC@^S&Oahc0U$48{zP29u^2ovKcE;_SFA|KY9@868wO2fdw)Vz6<-SJWdj{6_0~h&7 z--TMhy3tbg+}PGEvv*mG>IHwjL(ei6O)+c)jo%C;-%W*tga)bf5!kkk5}7g9giOc- zp_3MclP;#REM7@O3sTt%(UtN0gAiRU&^5l9DRi8LQ_i!7+sq68?tou0zI-?szOXedFcKWyb(a{Dmdoqb5@BJT^%vz{O8{Dgyl^koOH1IEzs7xvVGki`@!5+OwI?GB+c3Tv2tZ!(ENkCHKP`33n4_M!Mb)& zA#8-dBt3RDZfSa%E=A>$^y^f6LWT=A}a zUi*P$pC?UE!clKEN+S+OF;fw_9q3%!c4oNVYITi=D3Fa^SJ7c?tfY8g7wCMOj1;$f zI_v?2p;J=*6(NG}z}!>W%ZUQTJM3qVT?9-4<(6xk7X`*&z{_*e`jaE`qEcq8!l5O; zfaCA{!0~tFU~GM;Nn_Zaaxi0ld3uu7rzG_7lRU5b#*lOU4eG_fbhAxToU-Z$H+PJr zQi@fs0|+QJtd=z>Y0E~7SbFd!Ww|H-j24fJ>HdYwmeFE<4NxPvPJx6kTp@0_Z{kG^ z)Y6)b)2d_Ck}hNnCA-+HSFQwm!T25-@ZI*N_a)nRz`$Kvr94u<1>vNA}L|ud^58`gq1+O zPv6TGSVkFZh)FMrc^GKj55ukQ11k?$6;{oojK5K#CBl%o#G;6{fT-ggJQwf!F_Tm@ zCuDPPwMA~G-#G<8Fhz&eTr?1M9vOxn!>=jTK=mmzWzz_9jmWW>rEoww+_(1^SlS?j z_4b=7>5fl13-M{P8TJbyFUAKq#Z!W@x~Gneg6sIXMkxxc6+k`vcch+B%F}M$e%*_ns_8XKw=q^oNprJMHDmPnkvD)QeA-nY`8Ms;oaX{@Lr=gI9xC0uQl#m zmykXFI1nuAYJ^;-D_q}^&(w8+77j7Zu4{MEp+L^F?aM0DI5NsC9;zNj=3(9z*m&TY zz@D){3QoEaZqL{syzhXHgTo;8HBm<=y5}r+c)$Ph!)&#OQe-*f~q4w_grB0t$W83D{sw&i&KFmkz5_xVzf-gM!I zNI*PYXrg9ko|~9|!Z!;2Ynm}9c?aopE!Uqx8ph)lg>}-z-uqaj9Nvy_v#F376r5KE ziyJZwc;;Ldot`|B^d8k1UCTlzTAS^%$+AjEv;_(u-B`RLqH-^cJYi9h%2~}k&0Euw zuF4Ko>YKUbyPi(K5#iP<(7g+Ih4cz4X28KO=a%kUJ z0H@3Edt0-LofiBWLUY2oqGm_}Nv(dR6*An|d7`GaTn=QnHq$7xDyO_#6gTIX6Z)Dg zE)Sy%(isGVk-RKaVh8urU2s~?3sE0CL#=*L`Efe~#6g~`7GvhN5aEoY0|mUkBh)$0 z8=>{^dL+dHT~xI2e0=Km+gK>g{$~oSgPr~?C*grLcC4b`(>e)p8MdkU$%1yUK3o84 z;F5Jen;zkNIg7S*4Wo({L9d{c#k0z<;i+!gEa?!KZmMGmcEjWzVF||wgnv-Mr9sXY z5UN3duI7435~^rW$%oFoFOQT}dt)psyCtn%+Wi_(+riReuzJ6)AVhJ_^YjQv#hCTH zv_Sju%~~>wnv<1AH5gWZA^qNIO>`2!oE2~;4r&SMU!vv@5d(!+nPrP`LccgEM`@mVD`C%P&Z|zvpXIKhS?<5_ExS<41{1;iTstyiaG< znXIk{P&(Dx;V443K%1dE0tq}&jLjFLH!ZXxO3^-sKKqYnbWAC$@^cisPA+nVut2!( zeE_Hizl9UvL544tU|csR$bmJevRi`lBwMI6rLC!HUNG1hexN5BS~SA~e8{y;@g;eM zq6arTd3Rm4+nihURD{k}ah#i^Va8eZ7-z zT+my@+Slz|MhQwdizlt4)_Z z&OsF?i0_WuRX=SNGq6WnzAB-KOm#I2On&zs>%^QM9AMVaGe^0b4JeTQ%r4)SD#8xj z0R2CZ=ZeOe_IDqlJhNc*w)YOAzn6wRHJ}Eapmbx|WBmmNa_Ovd!O*iAtMNb7paYR$ zRLlN>gXh@J5U3w}#?wB06s$I4pr2w`C{PzDh8>L{H)ARk{=?!8UFOeOc(?wGAZoZh z>RtfOsPJt(6q7;O=+|q}3ID{2K@|mV5T3$IS{EMe45Yf3iCx*IUi8rc8<%yS$J|mB zbvn&%Tn-6zmWFpohA(+W<+g%XBVyS_SfVH0@YVT76hIx*#srp)7@dpIgEeSDW0;W( z;7G2DMTPE-XCu)fKiFI{KS-D!G}UsR0cw8%bb+Zlu%S2Ly0LiofX82S zIxzsvSHCsdqoeLFJj%$)%nBQe_8xr)7aMe2y78MQ1QERNvT-t7Sb)|N)Q|EE;VtL0 zs^U2Qg5^oAHs4!xAN2<)g_q=xV&Vo2#1`t^mve0gJ_V;4_XLsY5150?bMze0C-PVv zxHMP-x@YW$s2ZtZumd9c4>cx_3!wwreV><+VjYgoRR=L9*a4wt(ROoS+3(WLcOhwC z*sN%f5Rp8LkJz}LSA4W4@*(FTSXzOq-6rJ7tYgrH1EXVF%n^tYYO27vqcUAsA}S!? zcy<`oQf2fc08b)+4iKuA&d+P=J?;e7MYQHDLaX+GR$DN%y2B1huJ;b!ifsh%Rm6_p+Ni2qkIXw1bsw1&Mjga@?0*hJw0>Mf)7Qne>%((50Gxn3OZLp1Nq0_h zdVB|(QeihQSi8T*m;{VNee5hBuFzP>YPPh%iJ;LODu6}vEc%$C5h@(S=CzP(FvEz$ zJ=RGFc+dxE182)Dxko!21uNfHS;Kw6+khheMN4||#e3`t+spB(d|xz3{m12_?SI#f zMDlfD49UiL(QYpsFNN&xF)sA72S%SBzHd^K$0-d5rPKt?bC^{WuWz;T-Z$Jqx&jaq z?m7)ZZb7H}k-usd*sxuG&{GOA{bXS`ekn@qX70?r4UqjO;RM*otJ8YwwNN^4V6}vJ zjS$U9ZqMt+OQ1z}*S5dHfj{zqrX1k^0o$OHg|a>z8Y&LCSx%UAX|2HE8G-2=~C+~DrTUd{Fx zPrg(L%0sBV_=8a3g|F2b{J`)iBmxXCth;y%qnkj&oE4xR|<9Y`@zUZ!tGh#>&ZWRsbb;1~e@?Tbg6v=QTGl)nQxo<;VOeKf{NYFmR zh5K4^8zCIYUe8QZRwB4o{9@nacsn?0Y@&Y;WQ`@W4Dk{nOCk$&-r<_FTv*f4gwV&2 zdFMWv7hTRp8!8P<=<+D(MS@FpnvFt9p)%p*tLw>{>-XLckk-OXJ1h)jmebvzC~tIR znM37u$tR00Q?_>5r5OB*7nd)aQiWi*K^G4u39x}OBi%%vnNl;C08ZS$G#bf zsx6$(A&s-^y05mWL;l;Q&Skt+TS8NIIz;57*QR1N#dd-1mPOpB-mT+?gEqbke=w{t z&XLPq#=k;QRVF`n0TA-!{DC}|k`V{evkJvP-bSavzSz0aop0_mb>8;qA?gf&+h*V~ zjw-`UJ*OR)`zfh{`m>XD3p1lo_F2|u;FT(T)+0xuuFxL1_FYRb+0kRod4l(UVc5DsN!?>co$8Oik$AWLX} z61F)!^vR}4S=$Q9HTGFTSF~sf99&&CFQaXO?7B{o0O6y#%ggCVsB9f$uP^*UHW`I7|82skb>d<0jc)~-dN9N%3mSLiOnu;}Vilf` zXH-o5=95|YN`Lc?IHTbkY)>qdA)imW&|-GI=}1aGj3JmFHlr?0Hl(<=?*q*4NdZDX zB4!8S=9ApWybkQB8iBP=YwH0C{%jV7TFZS)T^e=^V4~JJKL{ z(i%H6E~o^C>59~3KOJ<#=abT=RYh^!0>d*23b1*j`j^uYFH-Asu_a=_WQNF=A42NO zVZDkSv)%D_YkK+1@D?Ah?3@0^3x<|?zns3aX<%R`x6dpW>VFH1UlgyNuRAyD^$}Z} zijO#>w?zi5Z9^M8UJ)iN|Mkv<0MUrGk!TG_X#n3x?YuJJmp8tESn zW!25c3(H=3h*Sh=$aNv8enc2f>NEpyYE?-98dPwe%QK^(HSJd)V4gZlr>W4g|2YflNBPcVFFAOwDV3 z6LxJ>^+5irVV5Pc9zWwd|!CsFI=Zd4qOoSH}W0(@_PZu^1bd_3QXHm zm&FK^obR}nEbE)lwvyg9IP(MnK;L`(-j&$7+OWLP?#rT&M}>PI7!?Ejt3b}K2j;z&!RHwC28zJRf-yoG4vZ(V5zd7p zj--Apx5d~X*m-l00I{K5=)+kqOG&qJH^QN0M!74Sd8m5F5WBkY{t75K>I&b5>S~Q1 zVBG~MQ1^w`TNxM5c2y}Y? zykY4+NKc$m6n}Ta##d2_!ky+8Ok1B0nfr2M%C*yIpwyIwf4bv4msouk!p+d^ayJlR z);!SDXtMMo)cu4DP)g8B(!QdC|CNhqh*$SSMdmvwr z*-L9&^*-AkQ4;sILp=rxe8kA1oJemYQ#!cp+I_EJk)+8WPDDwD<%KM2z3_5sdaWUM z;~g@z;SBJQiWajX464ql7=Fk9aN{3+X1I-=)*I@P{-jnmbZ!jP!ny$=#BWHX=U}@2 zdB@Ls3wS?R+|a_rNt_U(9qIp&cGAE+E`FScHMR(RdcCNNS(m{G#*S-wPvI5d+05$T zz)?99Nwhh!no?N!_;2WP`vr9&#oe2HU(34|)5N2!AZbNEHGuBgz-o^h6Aq>BiG!y| zNUfOF40ca69w7e)_GMD*g>Z7|yMM4mrEx)}YYoqso455xtZ53VOZ&(!o z2m|oTbWR7ZBeR_PsUV4MW}BzWc5ukL!T$f7wwJcPVSi5uXuW+9@h~vBnv9)dU~54~vOe zc0*3Eh!kicsoeU80ETV1$0J46OIg1MW6jc&pj*~e=13SBWmuiVD^Nu}4;j7LH*X^H zO3JLa`DAj$niU^}A}xHPo-bX<^6oW601@{hj4F}-a*|g=dCeY_a0@eDF4_s6`$Ks; zZrdSi_Qr1bUq-!;IUldik8A3}WIo%>GrGQCX3~OP$uM}OPTiD&F_zg)dN-Ak4}mvZ z%D{(U5A0-Ox+G|1wtFLM3p7R9KksFzxaq`C2x)>xffxay2ZHz-1S=oQu)d2Okbpx* zLDmFqoXyXGI9>xD{?Rv7KMQSnU1eyR##>Hvr)2)b5KKC* zgN=Cq84}(pvz%=g<0oPW1nYF--)B&&`cMR8R>qflG2R5-y>7G9j!Am4AvQGHO<_D$wQ}Zsgi=rFa#QW z4JCbG3VF~Zs!LKA1L0=VdPGNDj7gAO2Ig5I^L=6=hT~PLeHm_Q+6OS3NGKJmnuS&<4LWUzyUen=AGFzE+TMK) zhpW2S6FX?Kn@yXYKfO4C`Z$*}I3SbEy9;cog;z3yC3V(xp!6FqOO!^zlP0)l`2n3m zr*rP%%k&7#=H6&E(uBvl6?JOlo!AK>E2J91Y+O5lp+TtuWTv`F7+UQi;_)#voeqF^ zcNx9D^zoyFL-W*#)L}k!|8=3147?Y*Bs>PQ?H|1H``_cPkU5yhbc>JpahQ3J_Ei(- zEeNtYjRitil`?kB-|(*S!9Niwtl=y`ICp6SlYBP!UddNbDkx~-PtDCDfN>MF%;SF~ zt_w68g2wBviytr7Wnotgk~W_&QEK90OIfaBdb4w_pPz=cX%JL2KUB=~C}vINEo?*g z3|gpcTovIVHEpXL?38^HL3<2EGhm(wiT23SM(eFUcAJ;mT<#&a0w1ia>~24gupOo8 zKay8&!&(lW!h30T2_)paEF@uPpv_@m%b(!-4%z4e@XazMw^EK9VRj92DZ0J0^m*_| zb4`0MebKK3h4s7}&G}TCKZi#BBM0?+RBKb$H8A)@sJqy3YUOo8*GVfMs4P-Tfet{K zU%>znkH+Y_^_NJ3daEJ<7EMnWXSDP=+Y?Jy|ts^Ih#0Q2ER%dN`}BdBdzO z&|F%Rel8|=n`Uxgxd?l|0(ow|R6ruS@YVX0xJ(N|d8tMA&KkBUkQ&>LJtpwi{;16XL&m^XGD`ZzzR`cbxXjLm|n9 zqH1#yTnkmgv%5~3m4UUm4Ge6%bY|rQ!KdNwv^LoPd)U(c50W zumQ>B{n(^e`M-e_ye-qjj7wemAjFHNJx7QFq?*MxW-v9+Q&sYK9?gxj-V-;51}c#G z&thCWJoz3j9#vXduSHh>*xnlj%&AAw7O-n`DDwecqZEr5poa>C4)2GhyQbn->j7s? zWSrPiC~s)$7pK;1Y|yT-x!W>Oh9-2sAV|-;AzX7a|4q9m=3L>qw*=2VielEF8J!Wt z7{V1dgXD7P;POMfyt)6UCqI2X4^FG-!jZnFI9&ENwF#-uS@#eW$seyAIGDN;-^7Dd zcWM-Ouz23G94Y*G7=FUhYF%*!>+q1uUWs3y@Cq%_Q3TftL(!=AnilZ?;7?+ck<0Q- z@*ZAc)4_t16GP`aYK(ptB~x?fY*Veb(gas0K-iD1@t}}@|90C@^Ar$i-EyQ z_08Zld)v%1ncGgMGC^66WB@_bG(-Lpna&?AYnW#w*jHgK>A%Ce-s|*o&bxKJWg@(A zyi&BW140IK+^|FA07%cfZ^tLxtbdk*a6ygBPxZ~8N|u30(4@DICT=XP*bB}Z%ERZa@UtDv{?Yy)f0Zmg$-0&~ zl@ZGAqq^zY!V-qrGsvBy8(-R4VmD9oRi9lCXxqn~dBbbw)#CB(*+P_e`D>OR#0T(6 zI6Z*BuLHyfWNo`>OYFX=(@SEy&qtii0leyzEJb*+5hcv%j!XUKJ(|N}H7qc1+J@ha z!Jyvepg#I4a>DYmMp6wH(ll`a84=lJ7!J>4;I<4J51nBq!`qzcX&IOqJUR*Zd6K>w z#w|MKXVeO?fT};Sko0b&nRYC}2@w>$Pl#Lg*#`6~9BNTN{RC1SI=!=+HsB7NJF6=; zV@!H&S1~LObzvyJbARUU@ofl);-7WRc28h~9;PcW+X58Laide2q4etDi<`q62tm=| zO~`hdG5c(Rq8TIbsG=8PIzL8Ro;*7`#1-7f75)DMr=ycXu7}33KOX>eQu%SmJezjT zmP5&KhRa~j!f;dDUt96U^c->|fP3Mg9b6Ly_dv${nQtbqS*^is3xC~|W*l8 z%%17y0Vxr!yLv%{r(>E6S9r!M^4P6N6K46F(1El1`m5%Wj@JDl?NpfXEdyyK3}$S` zm2oYW4jK0+sU@Fr$Mp}m5pS`pu&<;~Hb9@SO0?*_*m5X~*P;`@D3@>qg^V>7-s5t6 zf}5vprtj_yDx1zNfd-b$f z*Itc)b@H`2m}8LxgA>RFg86lM;1@;SV49WDqu#2m>-9GW|(*X$t(&--21y!q3g z=i!$AfHUd`kO<2Unf1@lVZc=-d>GX%qgB{>rq3UhC1Ccxb z8$zjY{CF#%mYh)A!s1QhgH8Q#<61N~{sTX?wM*h`&7qj=uBGg^S%BdULph9RRIUeU z?7=vZC?HL1CLY2wu7GK}*EO}YTC#BU2&w%MPHxHOO;QUosiEd<1$C?#pK5?MM?5AE z?6!+RN7e`xaCG?fR5%jx8;`ip6JAF^C(5j{D&9FwY%rIVe-SQ*VbsZK+yL4Ld?pKi z(_U!83uQbtP5Dl9~t48bEEDx3P$IOU^$8(JQQlw!oh3&+>`8b6Te$T z)i)41oH~AdHka+HBj_U#dIs=n5KXtBOVwSo8H5Q|HQ5nY=4f!ib<7ET#B&mn{x6$$ zV=g697N?>n5Icm|U+Q8mrRV-zr{|KQkDl=EnqIi4xs(|S19V-VZ4?9bNW<_OWzbDH zF>V8?fIf>B+!gg~J~HW*1I&}2@taJp&s0F$+}3r*f*myAG_CrePTpB5s1OlnkA zYWA)j*^a2zsbt*V&q0Hop42ef+I8I6FL@cCtm|OpCAx}7a+lPVqdy-%Pl9KB@F{#( ztPym5I42afB#9sI(iY**<>&p(i4EEdw-!yUy<;_Y{eVxwAie)hMJ;=2j9i_6wGDA) zK;D0em`bE?hHtWX^t5bO(^LafDyflNfZH3uPbeb)U--!<@fIpthj%g1m?@2d(hHMRM+f{D?AKG_oJPp-Vw* z2&f?b%rmYOCof~&>yZ*Xl4VbLW#>8Ka{hsVil=NL=M6p`cVtj*4r1|EOs3(D9(Dy2 zj>%(a#5*O*!qcfNO=T=HU&Z;PVH`yvQ7-CWBvg+j^sc|k;=l7JvF#!gqIyn8G9|ScGia^b4|T9-Wxs4aXlU zL;<#Y78Z>Y?8vzlJe;=_$)!WShRLq)&3^;8XJYRE3Axx@Xa_>mYz(pq$1I8BLg?r9 zoO(F{td+SUIktb?ruUwv0>m>-Z&tQJ4FnZe4eXIWxcVjSnzT`ZR{qKymN3ugxDAAn zp}&BlAJI2OmaLRH3PBpkVs2PN0vJD|eWpKO3b2MzYDLrRM|cT0kBi&)ZSo@;1mhV| zi5ei3ba=vB6`yG5jTp&OL@>-0&obbu=|=A za2TbMA#UNe>dSlhLGH`RYyotvCe|M3B32I z$B3Y*c{(%~D1oRwI1N`daXaR4F;Zf)zD$>_peNI5B=Jjpr}qwSeMpbsoD+%=?9ls1 zxb3gs|0BuzG>HmB@%VnlaX%_euUG+f;I31HwXfQ`X;G{Ep0ur|=(w3HkR=}JOUJrnAFVhvQ zHrS5r1930)T;4oZQ%-HeNLD;kH(+oR`g-tzwU7IsPASs&kk!dLyCq zL)}Ntju)<6f4K|BaJuxcdGo>(r8IftOq0P)?RiJqxaVZ2zJqjjM4f#(ns9E%|I@unxlAI!m9>1B`1$^A4$i!J?NgP34DZXkWuL#Ge|lb z2@_}Y__SNCC17O`Yk_T4>cCExji(hH46uQk>wyz5EDVhC!*w;rI0B0vGU)f`Okt;)D%)s2^T883y-0FTn}1tdzSU+kq32y!m~&GG(|C$7{%fP zs5nF5LvGZdVAz!=J<~!t`_);1dFC##$V60evkj>q1b;wtvf(O=Gfd~^+-Rau13dbY zxt`Cgd#>`_xa8))O^gT*1VP|3{5kL(dIbUlrdVe^ek}&yWbfK&-ltC zrLXQg-_h&6=aphZr&U5zr%BFMqz=!a-q(y4fjrj7A~NhrBwP+x_n~sugDhddnU`{> zP4jCCKm|yZDWCyPTn7JPm)f7*Y&y({l8ywyqh?1suV)Aop|uB(7zriaBCj&cclNOb&oJ{XlC5zT1?ZgaDD$zuHpx~g!PK!x)f50V#X_h%47#?bN@Qs zJA^|;;*6VLXzm#b*w~c8XP|d|EpRIqf1@E{O4QF8s+4LP*}RIUIg)>eFg?3s7nmbR z{g-qBPFdGTG92SB8llC&haylx=}~xPXHTi3Dg)K)u>?=%)-AwT$d9nWL+Gsk%`FX~ zXCd(eQ&Gk8k3D=zVn5T5D~Qa7Y7aa#f>12aD+?Lg&2EkKI8*!%|EZW&#m4-NFNu!r zn@;cUWXK{q(YOv{T;cy47sdBu&skgSsZvyZ44+lpZa8}Pi|%&9p`7fdVw{l*Kh=7> zL@UkN6_ElZ)mRipaBzhGfD@rI_46gg|BM%{AhXIRCRqwOlD-9c#1#8h;rMhREqqBE zmw!D_z)cb%T`Oc1w}*r!Yz4~GV$C;{-X~L0_o)@W!-*KwEJX_lBylV1<9*Of!n?`H zfNYn>tt4{Fb&f6N7z&At3L3!jTHagK8%Nj~e<%`HtDd+d$igP3PBB-w5M5igft(j zhr;j(#Ak9eC(iu-p0A1x+R#AtNfQ!b!dCuyxc{N0>CnFZ#qpwx0=T+7rZK+Z2!jAd zQP)>*s?1T&XPk3WA6}ImW5zP17n~8@iT6~~L~)q?qqXOUTSuagWrro0&Hy!2r%eRy z&*oOby?(I!C@oP})Pb{m@I98#|FUv)DmFBxa4TW4qQ);MRt&rXMk7n8+c^i>T@kG( z>fW7rjB`>56@@}kde@WzIku`pq&=ul6Y@&{PigfB*iAcOH}n(=_y=)c)O8J0VM6R< zzSN91f+0C}q@y?TVNgx+_%=;e7@Wkqz*P#GBDDMJn5X%M86=@H zC7B*j(^Q$r#zn{%;X9+DrtW7qEojiLOq(5Q2zK~+5LY%Z&CfL^s5lXmr%flgSCIVsv2 zmM}Sjrymsv06cf;?1#Fcxfo~$rBooafVVQ!CQ9E^2Png_0u~65gZCLQ{zABkqIUS7 z?6`%;TLB}%ZWQFW<0QiA{U}QY6H5tLBk%l14t&X~y9+KpFj|oPTzi38Yg8K#&~8Gbs#(t*KicgQ4bq*#Cd?IH z!~riEz1^iZ&Jp6r8d7Y(;+7X&349_54tKGmcW*9Mh(X{63P6ryNm0O_xLT!{N)Mj+ znA#=XTU)$3c=CCjGG<$T`8>&iKcr+^zPPYZ+mS4a_z5nFp zs82Mg*RjkTL0SObv}WGm3(aUu_dK+gqJa_zCXt^12Q{H842v$smSVj2h2Wrhe+cYz za=<28p;;dis|p*=Wm!l^-0>0s{R`+57|1s`<&O$sMNMT=kD*{7_ypmRI{AFoU>=5r zPOfi(EFdAZiUZxLc@h=sY-X&ASE`A}ruFc{1zvu~*1$t^UiqJ{flAA12jNIb#xD7%cx!dCkI4(sXR#SQJ*+qgshaCR)!3M(_hdV_IV zjxeOxzCF%i-##;6o+Y8#YzBaj%HrM-f3)Bp%a4+c0oCDiipjh1#U16xMZSBl^Pzoa zXPT`&s)F}|G0&RXPrFM$Dw^Q?L6+lzG}97IKIt%boPmzKyF02kGO^l(rR1~P-v4-T zcREx^0lfnM4V{c?AtSac5C(pQLbq8h*{=U-@5|$%&j0vFI#;DF+ic}XmsCa}$}pr= zEK-h?W0Y2r7}uCwL)&2^N42pLQjTaP{$!*-!@NO{4HBkb=fnSK>X*c4Ixp5iz*m z>c5AFpwE4lhE7mD8G@wd$$#hYwrx@o-({;VRErXlI+2FKzXgkWf>Q3GTkrD@^IPnT z7f6+Dk)@2y2g3JLpi~?p9I96HBDbiRNsv9Rz$-nWvr(>x$eG9+ol(w+y*3Bq>wjf~ zKrUGQsI3OR1<`u|Y@6X3+*lG(F|b&zm>@e5hSdOh@Q;6_;M$ySVA;&ecNNuY?YX{qlD6 zifgy5`sWC_)+RTOyMwwthoE{dx0EMj}R(m96 zond-@LZ0C1qm+|>VXl9N=oKAJ65A%%s(NsYBr%?`^kIo|V&4hrqBJs5=LgwtI_*H) zNchCzyIXglT>tqV{r9G#t7Kc-jSf|B88lQ&7P89=>xg==V%v2ww~zbp22h ziNnQCzJWIpS)H(l%=}%q+UDs%QMRY5aFx4l-+OFNBTZ$l{f!oK&dK#BLktS4GqBSq zO!zQfiY(O)N@UI)Gc^tHf`@*KQ&H@*+}s;;GS>UX5>g%4Y-vc-#9jO>mx9OgVqHr% z+wW6~?C6atB`7ui)6ycW73kNGqI~pO!GY{OwB(7z?E4sAFO-$xbz7yiR?dx^d(YIz zgwFTfT&Y=ePd0{!t`hAYh#fxp#UA!OBRT}kVRxG}w6`1>A z=ySb`jQJ-cE-gUt&>lrgsq`JM;#SZy-DPnsl`-pCJHxYt$iLO4V#SQ|xw)D~I{VV1 z)Qd;L`*;=iqOxZ4F^rXteVMwsLwDKCAdxmaw&dY(&)3>1f43{~VK$_+RM-B42+F+d zH|z=wT<1dSI{KMP{f|IvLe=xL$MFxth?`u}8ryiVN3CCd3GL9rMOEHt&xI3OF zW2vR1x(1+5^6Xnw^_!__>T=mu%#4q=(p@Cg&NnTJxaipRv33J~db>ALw+#0fTRLx$ zw&&D`&JWxa0gRK~?!d;p&FOu~>vK$KoyL9|d!G+p!JoMtM}(ITYE{oYy&IZWVBTdf zf}$L7Lu?*DzTars9-6%$ygB7Pwz-{wk6Mf+B#rXR6RyS2p17YUH4(q$VXu~k6N3~c zX7v87nT)6e;|^jrs}hl+S3)6wgD!W}N?#|1!{ct6PGe>y?I9Q_w+vAz@t2>Xuu)mF zmIw+gGfBlM_jRa>{fV>FcqXN6g)UuLLBlN}X*Y72`ESu%3FuF0@oF7LP85~c_8S%z zX9#hOUc27kwTyf>(&en_Ydou zWO?+{(!FzavoeMzgpGb#$GEx>JNOyXMM;RU`F59_yFht|fj7DDwU19|*$=w>a~qu6 zpY)R}$CQ>lEICarGaOF48<6$j(iOdN(i_Lf>F1brJImkVh4kd*gt^lkk}mVRCF*{R zc|=e;?R}K*B3(oyZ$e{Lnrg$Mh(4#Gs(m%W_;PG9qnSHpBD#F|&=srGK}}uAIV5Dr z9lhT!x?=8lODAIC%x28Kb3~8STw0#ox%O~%fz`x#hn#lBZg|FSY(rkdhLwO1hCNBO z4DqD!E5R0$4rn)z&~h|RYQB2=jd&@L*=-~nxzS^_iy!uuip{@kM7%H5(#_sU0!Kb7 zuMl5Psy?YfJ!^0k@eWgeuy*RGp*|t<*#N^D`~wME%t)}l=E+)(h_3oK2IxqMzaW`A zWI3pCxLPz-ida7o>3bt-JHg;2FL||Svfv;ZPSs|zMC2fDL3mVe!|v6`D2IsXn=ww;R7dTq9%g$%qZ0-+i=m^**$NMYw2G!Km~|m+s|QPtb?N zqc|h&F?S$N-e8V@3F|1YSPJpTlj~6N5)w-@Imf>LAr@GUzYOajS~=-V&o$Xk{1g*H zP?~$t5=wK!9III0Nqv5?h-C_k@fSL+KoGq8AjP|t^C@i17h>8CnXPEN^9v9g^1vZK zh(ccfYE`iYp6@;yYHUl=FJbAJc~(*!eot6u;o#G!jXx@M+_WxEn$8)lK77%R z-Po_T0&=B7kz2F~k}L1qP&3DW0}L1&oG$fM20l9Q4|Y=rG>>=>ixH)ag!>sd;=cpp zZ%x#9#b3Vr5{b=JzarWxIGNnaOOfUmFas1nW83HRsw<%O@1|L&u`yu?WE??M#S#Ra zmd27);)63+^yqv69?1?pf7Z5PmzBRxdG0`e5$*DbP?h_ehT^2_Vngm2;_~Xvh>?>k z#r;04)5mP@>b9|tqn5wxl-pgt;1iQ1NeI@MPyC48YL|dimReo|k&GdMrT$NwoAMv4 zK8o((k`Bjr%^4>T)6|9uc6lCt=ilcd8G|Blhgg~0E1%|Dzd}?IGr83-s)j7P6n-(U zm%GJFiRrUnhDP$khrgxeR)qW@XtyMmq~c)PgpCGXeNoJ@krpQ2&Cg)c2r$ zA*`51=aeG{>eMz(-HR=?{^nyNwZ@`9GFJNS%52Cz_v!6Z$qrd;Jv2X~x7)y(^MP%0 zhI`LqarVsZ6|!?dWk1?`?$7h?UTdfV!LnkoX!is3V*e#U<_?$o*f`!>l&V?3?Trr+ zS!w>*i9;n&8CypY(AG zgqZh#DNx}SqLI(bvbFZQ+0J9UNijo3$mc03KS>vb9z-Mf?Wgh;a&UNd$z44BBy8^a zX;6&jVZTML@!9ZZ)XrX(qXa;;R}4vghT*oJPp~lX{FgsjWQ$)Tc2wVa8l9Id+H$$> zuv!tp?nPz;d*rNik^Dh4a*xy0fMs5!bxnpp#+TW?V~iY2_uL|vsY>+n0^=MMvu;Pv zT{d-0QkC}$K$Tgam@JA15WV9cJ*PBvxJx2-R^K^&L-0a|NH9=o2{l|P+ltdH59^EI z0gMaaqRF_`to_N0yUFsAj^3woqHOo$9{ILU$xAeAGQEe{XlTpL&niv5K+6Q4?YE0w zQ|n-W42l!{xBuN@tiC1wazvS!{q2TOzuuehRPcoA)5C$S&U<77#76r@E8tTic`WNjdqa?A&$KwIy?>JJb$PAVZHANI3b7 z;1uG_{pGUEnuNd%9lsw^8fMiEWzjs51hHh6ll>;zH3bp{Yo&_vI73*tS<(()aNSnc z`HR*nn7Uti{0J6N&TNSK>#5{MBmS`nx#~mk{`gqWEnpjQZ5w`&^}3oKFAl_r zbf5-U08eA7vJ~SQZiesgv3XCevUHZEQ(IVZ^G(Ix8-=Ru4oa;xnmLCpSI~b)?ehB! zK(VRRpr+?%%>7neDdZy+jk=&RTw$mrCb25@w4O^UH0*hQY;{oUdUpD=8p zsx^aL?h51q=p-_Bba$^Fg=b1i0eWe=Mh~7WMij~{nxtp}-r@LDdu{t>*k#0CP5FQ5 z)Q((5vUT?9uf)nq z!YZPd3#;sBdyV=a?@;asUwGR#WC}*&Wj1Exp8V~eUq9NTF8uNH6m}+p_6adxqGrDoiGDGE~b4VqlXn`RjMOMuy~rH zT5G)2e+O)NwL{XRJ-R`)nfeHeR-?gG@z^<2EPngXLmHE@s?Zr%M(REiZ~#`DdL_ok zsWPID2TK4r$C}z$F>RMWusbUBQ&=edbhp+SdsF6~%7_pQvYAYQVSw2D8||+d{{N)Q@B0Yrrt1|$DeZnZ>@zyHv@F-tTe)ex z)+)d8$La>~WLRDadN3fMrx5~rQ*S)We%c1}Cx73yUc(L~$9O?Yl)5&-ZpKrgT(T3( z7A_bWTB=O*Uci8I+K(-w-%FWD-O}?@%oZTvxk;)@@sqkZ(m3mMilkIvT;>yXMY3Q; zgi1AgM)nDnuVg3+sWN1MZry6b@--jpa{t&-uG{* z`Nq4#{)raZqa#Oeh;ev$N}fy=V}~qpm}#aGzuEFhh)gpM@}@DJyqKe=b749 z)PSo7SAp%%tbd+K#tQc7j&$ay3u^I)!vVi}hrAZB9_jObq|+ch z&F7TPupUYxJ!ktXvhx$BH^oZg>wJ`Nnw@ltP&0ZjO(%xr6^!Z|E+Isc;wyGz3>PCp zzeBcwkJMklV0hl9|Gr#ey-|;Hg!+i_@${ja1kIXN{LXcU1GBNPm05QXaUsS`>03F& zg_Y8dFpAx*CZ3dJ8s~eDhV(5r6h>DPpfI>i&4D6x8qq4cv)>q4Ibmx#Yl6h`x%y}@ zd!Sjux>FWb$`o+-OBXG{lG5~p8YC$dC^*+<#VTRg9oUQ&fE`B-e8?^3Ncpz}%h1=T zGkWNAYBM20BcCRbRACNOVjFI?!YKpvxz}Bx8^_P*h>gDE@#1M3go-QCsVI>+IHu}Z zcQXkg?Hc!{8`iB`CyH~>0}s&>FuH>pp?R^Yxqa@Hij;pM*d?fJ%nx{2c{2r=c<(OG z7I(w~pY!nyLG)9rMae&ocfO9adRh53br~@JKnZk<;vVIn^KMcs8AGj63T%S7!xA|y>{l12aJHd!ywPsRm=PzEtj23$I=B*qLvp(fvH4~ z#82|bXyQDj&sC=^^~2O)C4X=!q>6kd|2mi|&%RDK=~SyxYN~kDH0#A4(f!!fo-#Qy ze`#XhAho6ccb&5Caw40T3pDeFiw z5^%4NH<%usJ}F!^IcgmDEemZ7;32z%%5&vBWKz}@R5k*U&CGJW)b}eM#<$1m508?9GfXx$a_LgNi`v73aW zLdmbO(0oSsRKw89d+^X=2Y#nP!7IXXu{fdttLQ&l5qn;pOT-;2#u0bkc%Z52Wn1Mk zZ!q5WOie5TR?cL+#L_dW$}wW65^mmngP$e*&vJ6g)+Xk8Jv|uj^XrU4WIXSb!-xBP zN-;~oG&v2W+{T4X{V-c$O1ho#i}}x7Q}w#+_23G|YGt{Igc4wdz^scz2Pp+~B9d?_ z&z1V4(M(p^Ho0l9;n{-c1SM`>bcBXN{3IQ7au4{T2@+039V1n%7Z%ygD3AH9pc^!u zWaJ%9Uh0(JCtZ*VEZ_^H^%I(3%0wYAkA`FyCYU<}8_tH~R`+6!5#Nn;FXPlEuDaVz znk?9LOsL@xpoU{v$@1%3B(Pd6EzX|1h4Y3NYdolwHAclnAb>~78_lH9b`r$2AwpMS zw)3wdm*rYhOT){VJ-g$G^Hp7U)>|u9P7H#ObfiY#c?Tj=98*U)vD3&)LrL=JA>4b) zN)b~3)ATTjsBiwu>^<5Jf`OT79aO}{Xi+-)mBwj-;+IzQd351&5I}96VoE zEeFEfS*^P)t>SvYb+}e%j$ksZBNfX#|3XWt*k)zN{#qBjOW$UVR}kOGc_S zB5wLv`-Hd+7U!!@fxMY_tD0&3M?d4)gd^;2L1I0Ci=LE9xLBvNT_4BH@rZR~Q{#R& z%U*?F1=(oTSKtT>=?t&^59O4kL2gi{EaZRxM>_+Ns_)Ng=1gv_h))?1#}Av%ORY1? zFTy-EcXAIxQHEAtikY^?@doleaUqsE!4e@Qnt0Dv5Pjbe9`4i%*NVsbq^u*rD*$)|GGoq~qQvWhIE ztnxi`X<8S@d*JFqgDH^S8Xa1nA zhPZWKbrjDK62z`o$fxtznaTz+c36Ta^j!mmpWdFqPKB1%a}0N>9t&ar(VF*90PUfe z+hm|X%|O7BBF@XkrbB39t)tLyWWBErolUN-^?gc%x=ID1xgHvG!KiOg=ch*@63rPDDPpAAmD zoJU&$rQ1ZF8D&rWq%D>xvQ*LTSV-KtY)TQ9DEv3xDz~1AS14LSw3rr}4Wcav1iloT zVO7}3EW&&+{jCWLCjJ{UYX+opTB`k?-EAhb9DK+~>BjW2`KIx8KTw2*BG1X3J^as6 ztf@#i{umfYP7rlA$!l2DR}pcczWhqm?L;}Fj}Yq96va%(&mlO}7?o=2+Uw0_$IbU0 z6`UlXS=iuf%?OxH%H3m7jhkB>1R==wwB$wHrkQA&mnQ~dA59ob4GKjZXH?YbPg84y zjFOgV@A~*A$`c8K57Ye@LR}i`zD`Heema=;)sX-;!(=p}n+k}IZt-eg0cG1zbNkyQ zk4Q|ycP3mDn{P@mb8{HtJ?OIlww)To>UbqxREZP&VR0lmvX-hGo4`VF9k1IJ%Y>40 zb<+o5OP%3n%r?h8FPOJNzv}UR)p29o#>6$dV*0*@bvTj=H=4*Z-^oa!j)S$I)m+Dm zJe_@zJ|u*X+S53L6JI9fG zaV-KLm`!E?PaLE&USs@VG`a;-J6WRlF`%C>hg#$>z4WfUmBdjy+WDp=asNa_^AJfE z7*;GpIx>R;nBFG&bK7(oj=-Kp-)g*Da%IGMA%X4@-tbR>x9^>RD{Rfu5S_Q035BGunw)(!G6nV z+97SRSa&H!Q1Pq1#N`ikhJp7}4`OzM5~}CD3h@ZC{fw^{_Z(v2E?L`PNLZAD@a)0b zgP36SZ}-<>cX3i1bi&aTw6^-#a5Skh{M2mD^YaY@iauUwnSxM`h6iYljEvy?gG-~S z|LH;&t~J6dyenDP`sg0hpBKRuQ}Z!f0@y+19LU&Cs)OHjrYDPFYBu52?@cUnQr<5X z8}B81_k5hWC(2JoW&t9mCga081~HQw53+`?ES*1frMy`ZXD5ZApAWZL#>-u~o&!T3 zu_p;T1H)9MFy-V8ja>z!BS+sj0IH*DaP&9unV`T&Fgbu>j)`tacg8U2 zTO-VW`?G;^pW1|`4o7#UVAS_l00E@(YhpC4L)A~E#~}Xqx-{5W4x>JV@GBoQqI~sP zM1I~W3m;^@V`Rk=s3m7BR-myVH{S_lW$%2nc(17?FCcJ4t8Xr(EK}R#L&Fg1Ptdak z?!ZwYWW-4q`7tPH$DO2BhOjfTa8%M<1RlW3bnqfiBum=_<~(Bc0RoReE7UX8T+0)3 z=>v#T0C*24m*QE%_RAA7LywZIQ{nA-jF58cDd*T4_<$^W^`>AdSC@^n z>`A7S8e(aAM4Vkk>WzNtM&x9El2LKudHhoC9=bLR=#tu3>km?ULauB|^ZLV30`h*G zwYqBj<(H#qCl$VSi-N#WQ<~@(Rl%f!hjBBOjaTg5`R}(=9MQnl){O@gCf<5%E=^Bf zhiT*lyXVhGN3Mjal0HxLRB9$nn#L-jjxbM-znl%rC=}&i>_=rzzy1664HIyzH$KyM z3DwJ;ZG8XIw-mB|X)PDzKSPyT4qSbFxQV3q>`rC}R{1p1b?B$4{+}W?)LDZg3 z%2{M%#8@memLWO$)e3kD24jX)Fpu+}mjP-R;YOcdX@Zq_6f0n}h`hWvzCuG)3YnV7 zjEF|jF0M+qn9WA#RR~{wU8%r=&lBDED@(O?UR^@a{&0-@5-SX+3d&p^Mi=BSQ#?X` zZM&u3pPi0Dc&o0zX;0n}kR2LQ&I&ierFhW<8?22z;A8IVxR5Mm9&4 zNmCsb13Sp=HN5w&2}uB5Jg|Y4!J>iDqdh+3#mIqN0x%Ppzk!m=Y?wD`!HFzE<794< z*DpFyPc!&urJprSiNtP3JX<3R0|9UHf@gDAV;T(MBs>U|>hPA@q;8vE{(59-bw8OZ2uj_BJl23_0K&H%J-c{ zDm-&AxF*>GJTX}Mx;UMN+~pX_yoo3NmJ5$nOgKNoyipu~tKgC04+OCyXAR1}_{-SV zsPt-CL|K{N`|lJM!I^Wd)_^p|bhZujjMs3>FkFFTV3SCQX;eW`?$!SwC1-j1&zw&(B`j)b!a{ITe_>LQm_r~UYyOE zmV%<+V(}g5xIQ&JSO?2cZwLnd(`FCh^h{}QVb7Azy z{G3J10>}a=U=ffdg7ab4BXn{xEb}MpLhO%5Ee=2G7#(aYIb0n58~7$vjiLDUi|-v2 zW395h(d<1C!t0zF7lNupV=hj6Gt%?J+qn~~B^1?hT25GIqBHCeoHqb6#fTXq-?Asw z^fZy_lbJ#o_hBG5+?<%4z2M104N$;2RoS+o^;_C%%^HLErU9A8Ga1+#-M=eB$%jZn z|D*9ZAHT-r)1sU|s8sjIbf>KXN9HjqUoPH;SPR4I&a%+^S^pqYvCQ0slPH}VC2Az= zyPUmmJuw@^Q36B8hiR~t`f80)nM>ojXY*m4RDODRF{x4GQ~}W!>)NHQ1SM&j+m?YY z)G%L<&l2*M;PKD73P|f4=wis1l@(BD4*Q*jTfw__=5UqWWKX*?RJ-&u|5r|XzVlD^ zXUNVn2xCrZ`+gm4wZQX#@_&kLc5@*+cYHJ*5Xy76OS4ClW z@;qK%6M|qYB`u;vt7XMpB$zP});i3*JS&0HpndX|&k6Y1pWChS+e=B0?r7a!u#$h; z4}QQCxG>;x8Z+Z#-suQc<4F9c!*%8a2+u7>?9aQ6-ygNIP8~5@3_6r|beWtGa{Tt} z0!*^3U5`iDQ)5U+9UgMj8+nn|z+3OMR2H;a zuR@?EABNTuEb}_#e#>+nIyVTDvH0X5A^brV%UvnHqWTn8$IV)b5C%Yo;GuijTnv8&Z++ z798ge9q~vld7jm05trDB2uOi{A;q68^X(QS0#JS5+Cwzs8zwM4?FJg8@K!lN&zz+) z`mD(NLxa_+mktvf=HT}`VuMV+ZMZ+yN+e~V?LA5>MpFsl`8RWO-)QxVcWF(~#34&>X-{dnw+3PR7%e*aM(obPV=C$=Qpo99{Yz%~cYj5C> zg8@5^;?(KP=@smXi1l?*@?Kms!BYrKE3Kts*Bj-R!C62xLtD0xF>Q1B3pew^Z7hJi zRhquONZXoR6czLUL0SxS-T}gQln^c*Y44)iBYCgi5#-}NLRaHURl7B(~xsb$x zHZE%i`=G;}m2DH6+ z);Y3*JxNy{=h4!b3h1LhBJfQM|J0`;Skyt0U&hzfdh>s^o|YBHXsTUC zSRUu)JZU;l#MVzBKWVlUjUU!nHVA0*Jb{p!a&R8iH@F>aOiMxfPfTx)<-|By>Z?4& z^?m!ypd&qV3l@rND0zBJtq6|q=+if}Y-yHy6;^)$OdU|PwTjXLSXdVn3DtIdmi)`* zNa|_ev?DWu^MlS&JBo4G{D*3eMf;_WK1v%XKRIU#8MMBVHs2f8p&|#@NharxzedIp zcux4m5axnzw{E{`Ye4iJWagJ}b`pHdU=Ai7TYz4Hj@fvh@#&Y3!h|4#h9+oBb?|D= zxrv_128fj2FqQ^K`L{94h7MLDo(#VpzSMd`;zuJsliI}4Xt!QVDA+yLNkW2W zpl7+~1?Zb{XNwEFJ3|&W#k^J(%AsqJrq>@~m>Q0!K}+StgpK_QByxu0ysiAek8#zbB;=+T*7zPqIb5ZOIVsdF+AuToi<4n_8+>)XZ2vAqyKy*k_wy2 z?(fI^am1XZ{*>i4W|tLg&}a~bv;W=fIkgp9xbTDt)dH8yxU*T`{&z(6JP{`~H2p#2 zUei>LpDf}pfob?PKJY`D2V6PfP1$PoxKZXv0d0IMl?P`RIXV<#IGhHN_QXU=Ed0*K z=|`RFcPvuH)na{YI@|01!b*N!`CH<7Dt=Yk)`&(YwH)p;ep0ah3KGtd>9l-=2Tk|9 zXz|LypE-Ut?7X$f96zW48bkL)Hh@__iazhRJwB&lOIYovZt_7(v#xPkJ}Og!AdJtI z5}us+QdBvUB*J0(0)43?m;V3#A+RBI91|IeGiz5~{vw8ne z+%3N_vSxEiscH%O!@qY?$@I$B2*1$n#(nu`q%@XkWK{)q&X2o!SUd1pZ`$TJ6lj2e zo+eH|Jnlx%L{d!}f_DFxxfxN()O5MZ^d||zwXy4ADoYnrs*gW@p&=N1(PlN-s?`!P z69ixJGvO%hbNTq`V{MY$MY$5EO)v%Umf}(K>Eq`Me0DNNLOd$ZC3a)%^ysVMx-@oF`$k=z8GxCzUX|Z?2$uaW5$E3GOArdVI=(Pn(?(a>01|9HBEZL*qcxmXt_MVA^ zy5eK%PTYO+UY`q2UiRLIu1Vl)BbDZtBEBF3`-AWQ{*J(R1imBi9f9u%d`I9r0^bq% zj=*;Wz9aA*f$s?XzeT`*zFAUyE%J9RpPp~pgnZKK`#;|i_>RDL1imBi9f9u%d`IB_ z2Lygz9;hjFVxl|rHSBh~yY?yf-_E+*s-APTh5rx~_A2a^+p8?MPsL=ff~u0T>VC!D zd-tmD-D`Mj=HdT5;7I$;{=Db^{Q=5{U&P^o4af?{wDazav#z!T27^JecXDt$ch=dK XM033m#ZyCteO>KizdX}A^ZWk+*}K?S diff --git a/src/.vuepress/public/logo.svg b/src/.vuepress/public/logo.svg deleted file mode 100644 index 364d184e..00000000 --- a/src/.vuepress/public/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/.vuepress/public/logo.webp b/src/.vuepress/public/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..6f13c69bdd2f97d74282a8528e404c4265b52303 GIT binary patch literal 11460 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 eJzjj> Date: Mon, 15 Jun 2026 21:08:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/README.md | 9 +- src/api/v1/README.md | 8 +- src/api/v1/beta.md | 6 +- src/api/v1/bot.md | 384 ++++++++++++------------- src/api/v1/chat-background.md | 14 +- src/api/v1/check.md | 18 +- src/api/v1/coin.md | 44 +-- src/api/v1/community.md | 516 +++++++++++++++++----------------- src/api/v1/conversation.md | 80 +++--- src/api/v1/disk.md | 76 ++--- src/api/v1/event.md | 56 ++-- src/api/v1/expression.md | 46 +-- src/api/v1/file.md | 44 +-- src/api/v1/friend.md | 116 ++++---- src/api/v1/group-tag.md | 98 +++---- src/api/v1/group.md | 366 ++++++++++++------------ src/api/v1/instruction.md | 96 ++++--- src/api/v1/live.md | 80 +++--- src/api/v1/menu.md | 12 +- src/api/v1/misc.md | 80 +++--- src/api/v1/mount-setting.md | 20 +- src/api/v1/msg.md | 383 +++++++++++++------------ src/api/v1/report.md | 8 +- src/api/v1/search.md | 34 +-- src/api/v1/share.md | 34 +-- src/api/v1/sticker.md | 73 ++--- src/api/v1/sticky.md | 50 ++-- src/api/v1/user.md | 376 +++++++++++++------------ src/api/v1/verification.md | 24 +- src/api/v1/vip.md | 28 +- 30 files changed, 1597 insertions(+), 1582 deletions(-) diff --git a/src/api/README.md b/src/api/README.md index 730999ce..f37d87a8 100644 --- a/src/api/README.md +++ b/src/api/README.md @@ -18,7 +18,10 @@ title: API - 视频路由: - `https://chat-video1.jwznb.com/` -云湖数据床地址需要请求头加上 `Referer: http://myapp.jwznb.com` 才可正常获取内容,否则会403. +云湖数据床地址需要请求头加上 `Referer: http://myapp.jwznb.com` 才可正常获取内容,否则会403. + +chat_type 聊天对象的类型: 1-用户, 2-群组, 3-机器人 +content_type 信息类型: 1-文本,2-图片,3-markdown,4-文件,5-表单,6-文章,7-表情,8-html,11-语音,13-语音通话, 14-A2UI ::: ::: tip 如何让 LLM 写出可用性更高的代码 @@ -44,6 +47,8 @@ https://yh-api.yyyyt.top/llms-full.txt **请务必注意 protobuf 协议本身的特性.** **云湖账号的 Token 请务必小心对待不要泄露,不要将 token 硬编码到代码中.** ``` -:::: + +::: + diff --git a/src/api/v1/README.md b/src/api/v1/README.md index f19a5d1b..24783529 100644 --- a/src/api/v1/README.md +++ b/src/api/v1/README.md @@ -13,8 +13,8 @@ Proto 文件中的 Status 未特别备注均为下面内容: ```proto message Status { - uint64 number = 1; // 不知道干啥的,可能是请求ID - uint64 code = 2; // 状态码,1为正常 + uint64 request_id = 1; // 请求 ID + uint64 code = 2; // 状态码,1 为正常 string msg = 3; // 返回消息 } ``` @@ -23,8 +23,8 @@ message Status { ```JSONC { - "code":1, // 返回状态码 - "msg":"success" //返回状态信息 + "code":1, // 返回状态码,1 为正常 + "msg":"success" //返回状态消息 } ``` diff --git a/src/api/v1/beta.md b/src/api/v1/beta.md index 8142c706..e61cbe4b 100644 --- a/src/api/v1/beta.md +++ b/src/api/v1/beta.md @@ -19,13 +19,13 @@ POST /v1/beta/info ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1 为正常 + "code": 1, "data": { "beta": "allow", // 是否为内测用户,allow - 是,noapply - 否 "info": "\n即将内测的功能:\n1、更加完整的内测功能\n2、邀请码自定义功能\n3、地区排名活动\n4、网页版云湖\n" }, // 内测信息 - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/bot.md b/src/api/v1/bot.md index e6a65981..060193d5 100644 --- a/src/api/v1/bot.md +++ b/src/api/v1/bot.md @@ -19,27 +19,27 @@ POST /v1/bot/banner ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "banners": [ { - "id": 123, // banner的id + "id": 123, // banner 的 ID "title": "测试标题", // 标题 "introduction": "测试介绍", // 介绍 - "targetId": "", // "查看详情"点击后的id + "targetId": "", // "查看详情"点击后的 ID "targetUrl": "https://...", // "查看详情"跳转的链接 - "imageUrl": "https://...", // banner背景图 + "imageUrl": "https://...", // banner 背景图 "sort": 123, // 排列顺序 "delFlag": 0, "createTime": 0, // 创建时间 "remark": "", // 备注 - "createBy": 0, // banner创建者 + "createBy": 0, // banner 创建者 "typ": 2 // 类型 } // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -57,22 +57,22 @@ POST /v1/bot/new-list ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "bots": [ { - "chatId": "123", // 机器人id - "chatType": "3", // 识别对象类别,1-用户,2-群聊,3-机器人 + "chatId": "123", // 机器人 ID + "chatType": "3", // 对象类别: 1-用户,2-群聊,3-机器人 "headcount": "25", // 机器人使用人数 "nickname": "测试机器人名称", // 机器人名字 "introduction": "测试机器人介绍", // 机器人介绍 "instructions": "", - "avatarUrl": "https://..." // 机器人头像url - } - // ... + "avatarUrl": "https://..." // 机器人头像 URL + }, + // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -90,7 +90,7 @@ POST /v1/bot/bot-detail ```JSONC { - "id": "123" // 机器人id + "id": "123" // 机器人 ID } ``` @@ -98,18 +98,18 @@ POST /v1/bot/bot-detail ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "bot": { - "id": 1, // 排序id(? - "botId": "123", // 机器人id + "id": 1, // 排序 ID(? + "botId": "123", // 机器人 ID "nickname": "测试机器人每次", //机器人名字 - "nicknameId": 123, // 名称id - "avatarId": 123, // 头像id - "avatarUrl": "https://.。。", // 头像url + "nicknameId": 123, // 名称 ID + "avatarId": 123, // 头像 ID + "avatarUrl": "https://.。。", // 头像 URL "type": 0, // 类型 "introduction": "测试机器人介绍", // 机器人介绍 - "createBy": "123", // 机器人创建者id + "createBy": "123", // 机器人创建者 ID "createTime": 1231231230, // 机器人创建时间戳 "headcount": 123, // 机器人使用人数 "private": 0, // 是否私有(0为否,1为私人) @@ -118,33 +118,33 @@ POST /v1/bot/bot-detail "del_flag": 0, "alwaysAgree": 1, // 是否总是同意添加群聊 "banId": 0, // 顾名思义 - "uri": "https://chat-go.jwzhd.com/open-apis/v1/bot/send?token=" // 机器人发送消息url(? + "uri": "https://chat-go.jwzhd.com/open-apis/v1/bot/send?token=" // 机器人发送消息 URL(? }, "groups": [ { "id": 0, // 排序 (不知道为什么很多字段没有值,而客户端加入这个群显示群聊信息正常) - "groupId": "123", // 群组id + "groupId": "123", // 群组 ID "name": "测试群聊名称", // 群聊名字 "introduction": "测试群聊简介", // 群聊介绍 - "createBy": "", // 群聊创建者id + "createBy": "", // 群聊创建者 ID "createTime": 0, // 群聊创建时间 - "avatarId": 0, // 群聊头像id + "avatarId": 0, // 群聊头像 ID "del_flag": 0, - "avatarUrl": "https://...", // 群聊头像url + "avatarUrl": "https://...", // 群聊头像 URL "headcount": 0, // 群聊人数 "readHistory": 0, // 是否启用新成员查看历史记录 "alwaysAgree": 0, // 是否总是直接加入群聊 - "categoryId": 0, // 类别id - "category": "", // 类别 - "private": 0, // 群聊是否私有 - "banId": 0, // ban人的id + "categoryId": 0, // 分类 ID + "category": "", // 分类 + "private": 0, // 是否私有 + "banId": 0, // ban 人的 ID "gag": 0, "gagBy": "", "msgTypeLimit": "" }, // ... ], - "msg": "success" // 返回消息 + "msg": "success" }, } ``` @@ -163,39 +163,39 @@ POST /v1/bot/bot-group-list ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "botsTotal": 1, // 机器人数量 "list": { "bots": [ { "id": 0, // 机器人排列位置ID - "botId": "123", // 机器人ID + "botId": "123", // 机器人 ID "nickname": "测试机器人名称", // 机器人名称 - "nicknameId": 0, // 机器人名称ID - "avatarId": 0, // 机器人头像ID - "avatarUrl": "https://...", // 机器人头像ID - "token": "123123123123123123123", // 机器人token + "nicknameId": 0, // 机器人名称 ID + "avatarId": 0, // 机器人头像 ID + "avatarUrl": "https://...", // 机器人头像 ID + "token": "123123123123123123123", // 机器人 token "link": "", // 机器人分享链接? "type": 0, // 未知 "introduction": "测试机器人简介", // 机器人简介 - "createBy": "", // 创建者id + "createBy": "", // 创建者 ID "createTime": 0, // 机器人创建时间 "headcount": 0, // 未知 "private": 0, // 是否私有 "isStop": 0, // 是否停用 - "settingJson": "", // 机器人设置json,需转义 + "settingJson": "", // 机器人设置 json,需转义 "del_flag": 0, // 删除标签 "alwaysAgree": 0, // 拉机器人时机器人是否直接进群 "groupLimit": 0, // 机器人进群限制 - "banId": 0, // 被封禁的id + "banId": 0, // 被封禁的 ID "linkStop": 0, // 未知 - "uri": "https://chat-go.jwzhd.com/open-apis/v1/bot/send?token=" // 机器人示例API接口 + "uri": "https://chat-go.jwzhd.com/open-apis/v1/bot/send?token=" // 机器人示例 API 接口 }, ] } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -213,8 +213,8 @@ POST /v1/bot/edit-setting-json ```JSONC { - "id": "123", // 机器人id - "settingJson": "[]" // 机器人设置json,需转义 + "id": "123", // 机器人 ID + "settingJson": "[]" // 机器人设置 json,需转义 } ``` @@ -222,8 +222,8 @@ POST /v1/bot/edit-setting-json ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -244,7 +244,7 @@ POST /v1/bot/web-edit-bot "nickname":"测试机器人名称", // 机器人名称 "introduction":"测试机器人简介", // 机器人简介 "avatarUrl":"https://...", //机器人头像 - "botId":"123", // 机器人ID + "botId":"123", // 机器人 ID "private":0 // 0-公开,1-私有 } ``` @@ -253,8 +253,8 @@ POST /v1/bot/web-edit-bot ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -271,14 +271,14 @@ POST /v1/bot/bot-info 请求体: ```ProtoBuf -id: 123 // 机器人ID +id: 123 // 机器人 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message bot_info_send { - string id = 2; // 机器人ID + string id = 2; // 机器人 ID } ``` @@ -288,30 +288,30 @@ message bot_info_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } Bot_data { - bot_id: "123" // 机器人ID + bot_id: "123" // 机器人 ID name: "测试机器人名称" // 机器人名称 - name_id: 123 // 机器人名称ID - avatar_url: "https://..." // 机器人头像url - avatar_id: 123 // 机器人头像ID + name_id: 123 // 机器人名称 ID + avatar_url: "https://..." // 机器人头像 URL + avatar_id: 123 // 机器人头像 ID introduction: "测试机器人介绍" // 机器人介绍 - create_by: "123" // 机器人创建者ID + create_by: "123" // 机器人创建者 ID create_time: 123123123 // 机器人创建时间戳 headcount: 123 // 使用人数 - private: 0 // 是否为私有,0-公开,1-私有 - is_stop: 0 // 是否停用,0-启用,1-停用 - always_agree: 0 // 自动进群,0-不自动进群,1-自动进群 - do_not_disturb: 0 // 免打扰,0-不免打扰,1-免打扰 - top: 0 // 置顶,0-未置顶,1-已置顶 - group_limit: 0 // 限制进群,0-允许进群,1-限制进群 + private: 0 // 是否为私有: 0-公开,1-私有 + is_stop: 0 // 是否停用: 0-启用,1-停用 + always_agree: 0 // 自动进群: 0-不自动进群,1-自动进群 + do_not_disturb: 0 // 免打扰: 0-不免打扰,1-免打扰 + top: 0 // 置顶: 0-未置顶,1-已置顶 + group_limit: 0 // 限制进群: 0-允许进群,1-限制进群 } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 获取机器人信息返回信息 @@ -319,21 +319,21 @@ message bot_info { Status status = 1; Bot_data data = 2; message Bot_data { - string bot_id = 1; // 机器人ID + string bot_id = 1; // 机器人 ID string name = 2; // 机器人名称 - int64 name_id = 3; // 机器人名称ID - string avatar_url = 4; // 机器人头像url - string avatar_id = 5; // 机器人头像ID + int64 name_id = 3; // 机器人名称 ID + string avatar_url = 4; // 机器人头像 URL + string avatar_id = 5; // 机器人头像 ID string introduction = 6; // 机器人介绍 - string create_by = 7; // 机器人创建者ID + string create_by = 7; // 机器人创建者 ID int64 create_time = 8; // 机器人创建时间戳 int64 headcount = 9; // 使用人数 - int32 private = 10; // 是否为私有,0-公开,1-私有 - int32 is_stop = 11; // 是否停用,0-启用,1-停用 - int32 always_agree = 13; // 自动进群,0-不自动进群,1-自动进群 - int32 do_not_disturb = 15; // 免打扰,0-不免打扰,1-免打扰 - int32 top = 18; // 置顶,0-未置顶,1-已置顶 - int32 group_limit = 20; // 限制进群,0-允许进群,1-限制进群 + int32 private = 10; // 是否为私有: 0-公开,1-私有 + int32 is_stop = 11; // 是否停用: 0-启用,1-停用 + int32 always_agree = 13; // 自动进群: 0-不自动进群,1-自动进群 + int32 do_not_disturb = 15; // 免打扰: 0-不免打扰,1-免打扰 + int32 top = 18; // 置顶: 0-未置顶,1-已置顶 + int32 group_limit = 20; // 限制进群: 0-允许进群,1-限制进群 } } @@ -354,17 +354,17 @@ POST /v1/bot/board 请求体: ```ProtoBuf -id: 123 // 群聊ID -chat_type: 2 // 对象类型 1-用户 2-群聊 3-机器人 +id: 123 // 群聊 ID +chat_type: 2 // 对象类型 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 看板 message board_send { - string id = 3; // 群聊/用户/机器人ID - int64 chat_type = 4; // 对象类型 1-用户 2-群聊 3-机器人 + string id = 3; // 对象 ID + int64 chat_type = 4; // 对象类型 } ``` @@ -374,14 +374,14 @@ message board_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } Board_data { - bot_id: "123" // 机器人ID - chat_id: "123" // 对象ID - chat_type: 2 // 对象类别,2-群聊,3-机器人 + bot_id: "123" // 机器人 ID + chat_id: "123" // 对象 ID + chat_type: 2 // 对象类别 content: "测试看板内容" // 看板内容 content_type = 5; // 看板内容类别,1-文本,2-markdown,3-html last_update_time: 123123123 // 最后更新时间戳 @@ -389,7 +389,7 @@ Board_data { } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 获取看板返回 @@ -397,9 +397,9 @@ message board { Status status = 1; Board_data data = 2; message Board_data { - string bot_id = 1; // 机器人ID - string chat_id = 2; // 对象ID - int32 chat_type = 3; // 对象类别,2-群聊,3-机器人 + string bot_id = 1; // 机器人 ID + string chat_id = 2; // 对象 ID + int32 chat_type = 3; // 对象类别 string content = 4; // 看板内容 int32 content_type = 5; // 看板内容类别,1-文本,2-markdown,3-html int64 last_update_time = 6; // 最后更新时间戳 @@ -424,8 +424,8 @@ POST /v1/bot/remove-follower ```JSONC { - "botId": "123", // 机器人ID - "userId": "123" // 用户ID + "botId": "123", // 机器人 ID + "userId": "123" // 用户 ID } ``` @@ -433,8 +433,8 @@ POST /v1/bot/remove-follower ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -452,8 +452,8 @@ POST /v1/bot/remove-group ```JSONC { - "botId": "123", // 机器人ID - "groupId": "123" // 群聊ID + "botId": "123", // 机器人 ID + "groupId": "123" // 群聊 ID } ``` @@ -461,8 +461,8 @@ POST /v1/bot/remove-group ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -480,7 +480,7 @@ POST /v1/bot/llm/llm-setting-list ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { @@ -497,15 +497,15 @@ POST /v1/bot/llm/llm-setting-list "params": "[{\"name\": \"API Key\", \"type\": \"input\"}]", // 参数模板 "parent_id": 1, // 参数模板ID "subItems": null, - "tag": "测试模型数据" // tag数据,若无则为null + "tag": "测试模型数据" // tag数据,若无则为 null } // ... ], - "tag": "测试模型数据" // tag数据,若无则为null + "tag": "测试模型数据" // tag数据,若无则为 null } // ... ], - "msg": "success" // 返回消息 + "msg": "success" }, } ``` @@ -524,7 +524,7 @@ POST /v1/bot/llm/llm-setting-ref-info ```JSONC { - "botId": "123", // 机器人ID + "botId": "123", // 机器人 ID } ``` @@ -532,22 +532,22 @@ POST /v1/bot/llm/llm-setting-ref-info ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "historyCount": 0, "id": 0, - "isBigModel": 0, // 是否开启大模型,0-关闭,1-开启 + "isBigModel": 0, // 是否开启大模型: 0-关闭,1-开启 "isNeedReply": 0, - "key": "", // 大模型APIkey + "key": "", // 大模型 APIkey "llmBaseUrl": "", - "llmId": 0, // 大模型组ID + "llmId": 0, // 大模型组 ID "llmModelName": "测试大模型-chat", // 大模型名称 "llmName": "测试大模型", // 大模型组名称 - "mcpJson": "", // mcpJSON数据,json转义 - "paramJson": "", // paramJSON数据,json转义 - "prompt": "" // AI提示词 + "mcpJson": "", // mcpJSON 数据,json 转义 + "paramJson": "", // paramJSON 数据,json 转义 + "prompt": "" // AI 提示词 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -565,7 +565,7 @@ POST /v1/bot/reset-bot-token ```JSONC { - "botId": "123", // 机器人ID + "botId": "123", // 机器人 ID } ``` @@ -573,11 +573,11 @@ POST /v1/bot/reset-bot-token ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123" // 重置后的机器人token + "token": "123" // 重置后的机器人 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -596,17 +596,17 @@ POST /v1/bot/create-bot ```ProtoBuf name: 2 //机器人名称 introduction: 3 //机器人简介 -avatar_url:4 // 机器人头像Url +avatar_url:4 // 机器人头像 URL private:5 // 是否私有(0-公开,1-私有) ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message CreateBotRequest { string name = 2; // 机器人名称 string introduction = 3; // 机器人简介 - string avatar_url = 4; // 头像URL + string avatar_url = 4; // 头像 URL int32 private = 5; // 是否私有(0-公开,1-私有) } ``` @@ -621,13 +621,13 @@ message CreateBotResponse { BotData data = 2; message Status { - int64 number = 1; // 可能是请求ID - int32 code = 2; // 1表示成功 - string msg = 3; // success + int64 request_id = 1; + int32 code = 2; + string msg = 3; } message BotData { - string bot_id = 1; // 创建的机器人ID + string bot_id = 1; // 创建的机器人 ID } } ``` @@ -646,9 +646,9 @@ POST /v1/bot/edit-subscribed-link ```JSONC { - "botId": "75282754", // 机器人id + "botId": "75282754", // 机器人 ID "link": "http(s)://xxxxxx", // 设置消息订阅接口(地址) - "subscribeType": 0 // 订阅类别,0-url订阅,1-wss订阅 + "subscribeType": 0 // 订阅类别: 0-url 订阅,1-wss 订阅 } ``` @@ -656,8 +656,8 @@ POST /v1/bot/edit-subscribed-link ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -675,8 +675,8 @@ POST /v1/bot/get-user-settings-json ```JSONC { - "botId": "2468910", // 机器人id - "chatId": "1234567" // 会话id(一般是群聊) + "botId": "2468910", // 机器人 ID + "chatId": "1234567" // 会话 ID(一般是群聊) } ``` @@ -688,18 +688,18 @@ POST /v1/bot/get-user-settings-json "data": { "settingsJson": [ { - "id": "pqkyru", // 该项的id(表单id) + "id": "pqkyru", // 该项的 ID(表单ID) "key": 0, // 第几个项,这里是第一个 "props": [ { "name": "标签", // 该项名称 - "type": "label", // 类型,一个用于设置“标签”的配置项,有radio-单选框,input-输入框,switch-开关,chexkbox-多选框,textarea-多行输入框,select-选择器 + "type": "label", // 类型,一个用于设置“标签”的配置项,有 radio-单选框,input-输入框,switch-开关,chexkbox-多选框,textarea-多行输入框,select-选择器 "value": "" // 这个类型预定的值,默认空 }, { "name": "选项", "placeholder": "用#分割,如:北京#上海#天津", // 带有输入框的项/类型,会有选项,然后里面有占位符,这个就是占位符文本,其实这个叫选项 - "type": "options", // 带placeholder的类型有,Radio 单选框,Checkbox 多选框,Select 选择器 + "type": "options", // 带 placeholder 的类型有,Radio 单选框,Checkbox 多选框,Select 选择器 "value": "" } ], @@ -831,7 +831,7 @@ POST /v1/bot/get-user-settings-json } ] }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -849,9 +849,9 @@ POST /v1/bot/send-setting-json ```JSONC { - "id": "12345", // 机器人id - "groupId": "678910", // 群聊id - "settingJson": "" // 机器人设置json数组(需转义) + "id": "12345", // 机器人 ID + "groupId": "678910", // 群聊 ID + "settingJson": "" // 机器人设置 json 数组(需转义) } ``` @@ -859,8 +859,8 @@ POST /v1/bot/send-setting-json ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -878,7 +878,7 @@ POST /v1/bot/llm/clean-content ```JSONC { - "botId": "25637484" // 机器人ID + "botId": "25637484" // 机器人 ID } ``` @@ -886,8 +886,8 @@ POST /v1/bot/llm/clean-content ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -905,7 +905,7 @@ POST /v1/bot/llm/knowledge/list ```JSONC { - "botId": "123123123" // 机器人ID + "botId": "123123123" // 机器人 ID } ``` @@ -913,29 +913,29 @@ POST /v1/bot/llm/knowledge/list ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { "id": 123, // 知识文件ID - "botId": "123123123", // 机器人ID - "botLlmId": 123, // Llm智能体机器人ID + "botId": "123123123", // 机器人 ID + "botLlmId": 123, // Llm智能体机器人 ID "name": "轻韵助手-第三方云湖助手:第三方扩展插件编写文档.txt", "url": "https://chat-file.jwznb.com/knowledge/835a1ab0d63ba9921c25d5f4e8c3bfe5.txt", - "status": 0, // 知识库文件处理状态,0-处理中,1-处理成功,2-处理失败 - "isStop": 0, // 是否停用此文件,0-不停用,1-停用 + "status": 0, // 知识库文件处理状态: 0-处理中,1-处理成功,2-处理失败 + "isStop": 0, // 是否停用此文件: 0-不停用,1-停用 "charLength": 0, // 字符长度 "paragraphCount": 0, // 分段数 - "createBy": "123", // 知识库文件创建者ID + "createBy": "123", // 知识库文件创建者 ID "createTime": 123123123, // 知识库文件创建时间戳 - "updateBy": "", // 知识库文件更新用户ID + "updateBy": "", // 知识库文件更新用户 ID "updateTime": 0, // 知识库文件更新时间戳 "delFlag": 0 // 删除标签 - } + }, // ... ] }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -953,8 +953,8 @@ POST /v1/bot/llm/knowledge/create ```JSONC { - "botId": "123123123", // 机器人ID - "knowledgeId": 123 // 知识文件ID + "botId": "123123123", // 机器人 ID + "knowledgeId": 123 // 知识文件 ID } ``` @@ -962,8 +962,8 @@ POST /v1/bot/llm/knowledge/create ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -981,27 +981,27 @@ POST /v1/bot/console/my-bots ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "botsTotal": 1, // 创建的机器人总数 "list": { "bots": [ { - "botId": "123123123", // 机器人ID + "botId": "123123123", // 机器人 ID "nickname": "测试机器人名称", // 机器人名称 "avatarUrl": "https://...", // 机器人头像 - "token": "123123123123123123123", // 机器人token + "token": "123123123123123123123", // 机器人 token "link": "", // 订阅链接 - "linkStop": "0", // 订阅链接是否被停用,0-未停用,1-已停用 - "subscribeType": "0", // 订阅类别,0-url订阅,1-wss订阅 - "settingJson": "", // 机器人设置配置json,需将json数据转义后填入 + "linkStop": "0", // 订阅链接是否被停用: 0-未停用,1-已停用 + "subscribeType": "0", // 订阅类别: 0-url 订阅,1-wss 订阅 + "settingJson": "", // 机器人设置配置 json,需将 json 数据转义后填入 "introduction": "测试机器人简介" // 机器人简介 } // ... ] } }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -1019,14 +1019,14 @@ POST /v1/bot/group-permission-get ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "allowEditGroupInfo": 0, // 允许编辑群消息,0-不允许,1-允许 - "allowGagMember": 0, // 允许禁言用户,0-不允许,1-允许 - "allowRemoveMember": 0, // 允许移除用户,0-不允许,1-允许 - "allowGroupTagManage": 0 // 允许管理群标签,0-不允许,1-允许 + "allowEditGroupInfo": 0, // 允许编辑群信息: 0-不允许,1-允许 + "allowGagMember": 0, // 允许禁言用户: 0-不允许,1-允许 + "allowRemoveMember": 0, // 允许移除用户: 0-不允许,1-允许 + "allowGroupTagManage": 0 // 允许管理群标签: 0-不允许,1-允许 }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -1044,7 +1044,7 @@ POST /v1/bot/llm/llm-setting-ref-params ```JSONC { - "chatId": "123123123", // 对象ID + "chatId": "123123123", // 对象 ID "chatType": 2 // 对象类别 } ``` @@ -1053,11 +1053,11 @@ POST /v1/bot/llm/llm-setting-ref-params ```JSONC { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [] // 暂无实例数据 }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -1075,12 +1075,12 @@ POST /v1/bot/group-permission-edit ```JSONC { - "botId": "123123", // 机器人ID - "groupId": "123123123", // 群聊ID - "allowEditGroupInfo": 0, // 允许编辑群消息,0-不允许,1-允许 - "allowGagMember": 0, // 允许禁言用户,0-不允许,1-允许 - "allowRemoveMember": 0, // 允许移除用户,0-不允许,1-允许 - "allowGroupTagManage": 0 // 允许管理群标签,0-不允许,1-允许 + "botId": "123123", // 机器人 ID + "groupId": "123123123", // 群聊 ID + "allowEditGroupInfo": 0, // 允许编辑群信息: 0-不允许,1-允许 + "allowGagMember": 0, // 允许禁言用户: 0-不允许,1-允许 + "allowRemoveMember": 0, // 允许移除用户: 0-不允许,1-允许 + "allowGroupTagManage": 0 // 允许管理群标签: 0-不允许,1-允许 } ``` @@ -1088,8 +1088,8 @@ POST /v1/bot/group-permission-edit ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -1112,16 +1112,16 @@ data { size: 20 // 分页大小 page: 1 // 页数 } -bot_id: "123" // 机器人ID +bot_id: "123" // 机器人 ID keywords: "测试" // 搜索关键词 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_follower { Data data = 2; - string bot_id = 3; // 机器人ID + string bot_id = 3; // 机器人 ID string keywords = 4; // 搜索关键词 message Data { @@ -1137,22 +1137,22 @@ message list_follower { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } user { - user_id: "7356666" // 用户ID + user_id: "7356666" // 用户 ID name: "Feng" // 用户名 - avatar_url: "https://..." // 头像URL - is_vip: 0 // 是否为vip用户, 0-不为vip用户, 1-vip用户 + avatar_url: "https://..." // 头像 URL + is_vip: 0 // 是否为 vip 用户, 0-不为 vip 用户, 1-vip 用户 } // 可以有多个 // ... totol: 32 // 关注该机器人的用户总数 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_follower { @@ -1190,16 +1190,16 @@ data { size: 20 // 分页大小 page: 1 // 页数 } -bot_id: "123" // 机器人ID +bot_id: "123" // 机器人 ID keywords: "测试用户名" // 搜索关键词 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_join_group { Data data = 2; - string bot_id = 3; // 机器人ID + string bot_id = 3; // 机器人 ID string keywords = 4; // 搜索关键词 message Data { @@ -1215,21 +1215,21 @@ message list_join_group { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } group { - user_id: "123" // 群聊ID + user_id: "123" // 群聊 ID name: "测试群聊名称" // 群聊名字 - avatar_url: "https://..." // 头像URL + avatar_url: "https://..." // 头像 URL } // 可以有多个 // ... totol: 32 // 机器人加入的群聊总数 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_join_group { diff --git a/src/api/v1/chat-background.md b/src/api/v1/chat-background.md index 61dfa417..aaae482d 100644 --- a/src/api/v1/chat-background.md +++ b/src/api/v1/chat-background.md @@ -19,7 +19,7 @@ POST /v1/chat-background/edit ### 请求体 -```JSONC +```JSON { "userId": "用户 id", "chatId": "群聊 id", // 如果设置全部背景则填 all @@ -29,10 +29,10 @@ POST /v1/chat-background/edit ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1 为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -50,9 +50,9 @@ POST /v1/chat-background/list ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1 为正常 + "code": 1, "data": { "list": [ { @@ -67,6 +67,6 @@ POST /v1/chat-background/list // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/check.md b/src/api/v1/check.md index 2c755098..65f2c341 100644 --- a/src/api/v1/check.md +++ b/src/api/v1/check.md @@ -18,7 +18,7 @@ POST /v1/check/get-latest-version ### 请求体 -```JSONC +```JSON { "packageInfo":"{\"appName\":\"云湖\",\"packageName\":\"com.yhchat.app\",\"version\":\"1.4.83\",\"buildNumber\":\"347\"}", // 当前应用信息,为 JSON 数组,需转义后才可使用 "platform":"android", // 设备标识 @@ -32,7 +32,7 @@ POST /v1/check/get-latest-version `packageInfo` 转换后的 JSON 结构 -```JSONC +```JSON { "appName": "云湖", // 软件名称 "packageName": "com.yhchat.app", // 软件包名 @@ -45,7 +45,7 @@ POST /v1/check/get-latest-version ### 响应体 -```JSONC +```JSON { "ApkMd5": "", // 更新包 MD5 "ApkSize": 74491, // 包体大小 @@ -68,7 +68,7 @@ POST /v1/check/check-version ### 请求体 -```jsonc +```JSON { "packageInfo": "{\"appName\":\"云湖\",\"packageName\":\"云湖\",\"version\":\"1.6.50\",\"buildNumber\":\"225\"}", // 当前应用信息,为 JSON 数组,需转义后才可使用 "platform": "windows", // 平台 @@ -81,7 +81,7 @@ POST /v1/check/check-version `packageInfo` 转换后的 JSON 结构 -```JSONC +```JSON { "appName": "云湖", // 软件名称 "packageName": "云湖", // 软件包名 @@ -96,7 +96,7 @@ POST /v1/check/check-version `deviceinfo` 设备信息示例。 -```JSONC +```JSON { "computerName":"", // 设备名称 "numberOfCores":12, // CPU 线程数 @@ -130,14 +130,14 @@ POST /v1/check/check-version ### 响应体 -```jsonc +```JSON { - "code": 1, // 成功 + "code": 1, "data": { "latestDesc": "1、全新发布云湖APP\\n2、修复多个bug", // 更新日志 "latestVersion": "1.6.50", // 最新版本 "update": 0 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/coin.md b/src/api/v1/coin.md index 4d142c64..ecb1e96e 100644 --- a/src/api/v1/coin.md +++ b/src/api/v1/coin.md @@ -17,7 +17,7 @@ POST /v1/coin/shop/product-recommend 请求体: -```JSONC +```JSON { "size": 100, // 字号 "page": 1 // 商品页数 @@ -26,20 +26,20 @@ POST /v1/coin/shop/product-recommend 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 1, // 商品id + "id": 1, // 商品 ID "type": 1, // "cycle": 7, //会员持续时间(持续7天 "info": "7", "name": "【云湖】会员7天", // 商品名 - "imageUrls": "[\"https://chat-img.jwznb.com/999955a351c67b761ed078dc40d28ede.png\"]", // 商品图片url,为json数组,需转义后才可使用 + "imageUrls": "[\"https://chat-img.jwznb.com/999955a351c67b761ed078dc40d28ede.png\"]", // 商品图片 URL,为 json 数组,需转义后才可使用 "price": 100, // 价格(单位为金币) - "priceVip": 90, // vip专项价格 + "priceVip": 90, // vip 专项价格 "stock": 49, // 商品库存 "sale": 0, // 已经出售了0件 "description": "云湖会员7天,享受所有会员服务\r\n\r\n### **商品不定期补充库存,请留意全员群及官方消息**\r\n##### 注意事项\r\n1. 该商品每7天可兑换一次\r\n2. 兑换后直接开通或续费会员,无额外操作\r\n3. 虚拟商品,兑换后不支持退换\r\n4. 如有疑问联系官方客服", // 商品描述 @@ -50,7 +50,7 @@ POST /v1/coin/shop/product-recommend ], "total": 1 // 商品总数 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -66,16 +66,16 @@ POST /v1/coin/task/my-task-info 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "adsWatchNumber": 5, // 广告观看次数 - "avatarEditNumber": 0, // 判断是否改了头像,0是未更改,1是已更改 + "avatarEditNumber": 0, // 判断是否改了头像,0 是未更改,1 是已更改 "nicknameEditNumber": 1, // 判断是否改了名字,同上 - "raffleTimes": 1 // 抽奖时间(来自bing翻译 + "raffleTimes": 1 // 抽奖时间(来自 bing 翻译 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -91,25 +91,25 @@ POST /v1/coin/shop/product-detail 请求体: -```JSONC +```JSON { - "id": 1 // 商品id + "id": 1 // 商品 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "product": { - "id": 1, // 商品id + "id": 1, // 商品 ID "type": 1, "cycle": 7, //会员持续时间(持续7天 "info": "7", "name": "【云湖】会员7天", // 商品名 - "imageUrls": "[\"https://chat-img.jwznb.com/999955a351c67b761ed078dc40d28ede.png\"]", // 商品图片url,为json数组,需转义后才可使用 + "imageUrls": "[\"https://chat-img.jwznb.com/999955a351c67b761ed078dc40d28ede.png\"]", // 商品图片 URL,为 json 数组,需转义后才可使用 "price": 100, // 价格(单位为金币) "priceVip": 90, // vip专项价格 "stock": 49, // 商品库存 @@ -120,7 +120,7 @@ POST /v1/coin/shop/product-detail "lastUpdate": 0 // 商品更新时间 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -136,9 +136,9 @@ POST /v1/coin/task/raffle 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回成功信息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/community.md b/src/api/v1/community.md index 7d7fa4f8..ae40d767 100644 --- a/src/api/v1/community.md +++ b/src/api/v1/community.md @@ -17,26 +17,26 @@ POST /v1/community/posts/create 请求体: -```JSONC +```JSON { - "baId": 40, // 文章分区ID - "groupId": "123", // 文本引用群聊ID + "baId": 40, // 文章分区 ID + "groupId": "123", // 文本引用群聊 ID "title": "测试文章标题", // 文章标题 "content": "测试文章内容", // 文章内容 - "contentType": 1, // 文章内容类别,1-文本,2-markdown - "draftId": 123 // 草稿ID,若此值不为0则云湖会删除这里设定的草稿ID所对应的草稿 + "contentType": 1, // 文章内容类别: 1-文本,2-markdown + "draftId": 123 // 草稿 ID,若此值不为 0 则云湖会删除这里设定的草稿 ID 所对应的草稿 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "audioUrl": 123, // 文章ID + "audioUrl": 123, // 文章 ID }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -52,18 +52,18 @@ POST /v1/community/posts/delete 请求体: -```JSONC +```JSON { - "postId": 123 // 文章ID + "postId": 123 // 文章 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -79,20 +79,20 @@ POST /v1/community/posts/post-reward 请求体: -```JSONC +```JSON { - "postId": 123, // 文章ID - "recvId": "123", // 接受用户ID + "postId": 123, // 文章 ID + "recvId": "123", // 接受用户 ID "amount": 1.0 // 打赏金币数 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -108,9 +108,9 @@ POST /v1/community/comment/comment-reward 请求体: -```JSONC +```JSON { - "postId": 123, // 文章ID + "postId": 123, // 文章 ID "commentId": 123, // 打赏评论 "amount": 1.0// 打赏金币数 } @@ -118,10 +118,10 @@ POST /v1/community/comment/comment-reward 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -137,18 +137,18 @@ POST /v1/community/posts/post-like 请求体: -```JSONC +```JSON { - "id": 123, // 文章ID + "id": 123, // 文章 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -164,18 +164,18 @@ POST /v1/community/posts/post-collect 请求体: -```JSONC +```JSON { - "id": 123, // 文章ID + "id": 123, // 文章 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -191,24 +191,24 @@ POST /v1/community/posts/edit 请求体: -```JSONC +```JSON { - "postId": 123, // 文章ID + "postId": 123, // 文章 ID "title": "测试文章标题", "content": "测试文章内容", // 文章内容 - "contentType": 2 // 文章内容类别,1-文本,2-markdown + "contentType": 2 // 文章内容类别: 1-文本,2-markdown } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "id": 123 // 文章ID(不知道为什么要再返回一遍) + "id": 123 // 文章 ID(不知道为什么要再返回一遍) }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -224,10 +224,10 @@ POST /v1/community/posts/post-list 请求体: -```JSONC +```JSON { "typ": 1, // 典型值 - "baId": 41, // 分区id + "baId": 41, // 分区 ID "size": 20, // 尺寸 "page": 1 // 页数 } @@ -235,18 +235,18 @@ POST /v1/community/posts/post-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "posts": [ { - "id": 123, // 文章id - "baId": 41, // 分区id - "senderId": "114514", // 文章作者id - "senderNicknameId": 123, // 发送者昵称 Id - "senderAvatarId": 123, // 发送者头像 Id - "groupId": "", // 绑定该分区且从这个群聊发送文章的群聊id + "id": 123, // 文章 ID + "baId": 41, // 分区 ID + "senderId": "114514", // 文章作者 ID + "senderNicknameId": 123, // 发送者昵称 ID + "senderAvatarId": 123, // 发送者头像 ID + "groupId": "", // 绑定该分区且从这个群聊发送文章的群聊 ID "title": "我是标题", // 标题 "contentType": 2, // 文章类型(2是Markdown,1是普通文本) "content": "文章内容部分预览", @@ -259,26 +259,26 @@ POST /v1/community/posts/post-list "commentNum": 4, // 评论数量 "collectNum": 0, // 收藏数量 "amountNum": 0, // 投币数量 - "senderNickname": "文章作者id", - "senderAvatar": "https://.。。", // 作者头像url + "senderNickname": "文章作者 ID", + "senderAvatar": "https://.。。", // 作者头像 URL "createTimeText": "2025-08-05 16:30:13", // 创建文章时间 - "group": { // 以下是绑定该分区且从这个群聊发送文章的群聊id + "group": { // 以下是绑定该分区且从这个群聊发送文章的群聊 ID "id": 0, // - "groupId": "", // 群聊id + "groupId": "", // 群聊 ID "name": "", // 群聊名字 "introduction": "", // 群聊简介 - "createBy": "", // 群主id + "createBy": "", // 创建者 ID "createTime": 0, // 创建时间戳 - "avatarId": 0, // 群聊头像id + "avatarId": 0, // 群聊头像 ID "del_flag": 0, - "avatarUrl": "", // 群聊头像url + "avatarUrl": "", // 群聊头像 URL "headcount": 0, // 群聊人数 "readHistory": 0, // 是否开启新成员浏览历史信息(1为开启,0为关闭) "alwaysAgree": 0, // 是否直接进群(1为开启,0为关闭) - "categoryId": 0, // 群聊分类Id + "categoryId": 0, // 群聊分类 ID "category": "", // 群聊所属分类 "private": 0, // 是否私有(1为开启,0为关闭) - "banId": 0, // 被禁言的id + "banId": 0, // 被禁言的 ID "gag": 0, // 是否禁言 "gagBy": "", // 禁言者 "msgTypeLimit": "" // 消息类型限制 @@ -286,13 +286,13 @@ POST /v1/community/posts/post-list "isLiked": "0", // 你有没有给这个文章点赞(1为是,0则不是) "isCollected": 0, // 你有没有收藏这个文章(1为是,0则不是) "isReward": 0, // 你有没有给这个文章投币 (1为是,0则不是) - "isVip": 0 // 你是不是vip(1为是,0则不是) + "isVip": 0 // 是否 vip(1为是,0则不是) } // ... ], "total": 360 // 已经加载的文章(共360篇文章) }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -308,22 +308,22 @@ POST /v1/community/ba/info 请求体: -```JSONC +```JSON { - "id": 41 // 分区id + "id": 41 // 分区 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ba": { - "id": 41, // 分区id + "id": 41, // 分区 ID "name": "云湖", // 分区名 - "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 分区头像url + "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 分区头像 URL "delTime": 0, // 删除时间 "createTime": 1665233353, // 创建时间戳 "lastActive": 1754474179, // 上次活跃时间戳 @@ -331,10 +331,10 @@ POST /v1/community/ba/info "postNum": 9656, // 该分区的文章数量 "groupNum": 55, // 绑定该分区的群聊数量 "createTimeText": "2022-10-08 20:49:13", // 分区创建时间 - "isFollowed": "1" // 你是否关注了此分区(1为已关注,0为未关注) + "isFollowed": "1" // 是否关注了此分区(1为已关注,0为未关注) } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -350,7 +350,7 @@ POST /v1/community/ba/following-ba-list 请求体: -```JSONC +```JSON { "typ": 2, // 类型(1-关注, 2-热门, 3-我的, 4-全部) "size": 20, // 排序 @@ -360,15 +360,15 @@ POST /v1/community/ba/following-ba-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ba": [ { - "id": 41, // 分区id + "id": 41, // 分区 ID "name": "云湖", // 分区名字 - "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 分区头像url + "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 分区头像 URL "delTime": 0, // 删除时间 "createTime": 1665233353, // 创建时间 "lastActive": 1754474179, // 上次活跃时间 @@ -381,7 +381,7 @@ POST /v1/community/ba/following-ba-list ], "total": 11 // 总共的分区数量(共11个) }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -397,7 +397,7 @@ POST /v1/community/reward-record 请求体: -```JSONC +```JSON { "typ": "post", // 类型(post-文章,comment-评论) "size": 20, // 尺寸 @@ -407,29 +407,29 @@ POST /v1/community/reward-record 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "rewards": [ { - "id": 123, // 打赏id - "senderId": "123", // 打赏者id - "recvId": "123", // 文章作者id - "postId": 123, // 文章id - "commentId": 123, // 评论id + "id": 123, // 打赏 ID + "senderId": "123", // 打赏者 ID + "recvId": "123", // 文章作者 ID + "postId": 123, // 文章 ID + "commentId": 123, // 评论 ID "amount": 0.01, // 打赏者减少金币的数量 "recvAmount": 0.01, // 收到的金币数量 "createTime": 1753427517, "reason": "打赏文章扣金币", // 扣大赏者金币原因 "remark": "", // 备注 "post": { - "id": 123, // 文章id - "baId": 41, // 分区id - "senderId": "123", // 文章作者id - "senderNicknameId": 123, // 发送者名字id - "senderAvatarId": 84, // 发送者头像id - "groupId": "", // 文章关联群组id + "id": 123, // 文章 ID + "baId": 41, // 分区 ID + "senderId": "123", // 文章作者 ID + "senderNicknameId": 123, // 发送者名称 ID + "senderAvatarId": 84, // 发送者头像 ID + "groupId": "", // 文章关联群组的 ID "title": "测试文章标题", // 文章标题 "contentType": 1, // 文章类型(1-Markdown,0-普通文章) "delTime": 0, // 删除时间戳 @@ -441,15 +441,15 @@ POST /v1/community/reward-record "collectNum": 6, // 收藏数量 "amountNum": 0.01, // 文章投币数量 "senderNickname": "测试打赏者名称", // 文章作者昵称 - "senderAvatar": "https://...", // 文章作者头像url + "senderAvatar": "https://...", // 文章作者头像 URL "createTimeText": "2025-07-05 21:21:47", // 创建文章时间 "auditStatus": 0 }, "sender": { - "id": 106634, // 打赏id - "user_id": "123", // 打赏者id + "id": 106634, // 打赏 ID + "user_id": "123", // 打赏者 ID "nickname": "测试打赏者昵称", // 打赏者昵称 - "avatar_url": "https://..." // 打赏者头像url + "avatar_url": "https://..." // 打赏者头像 URL }, "comment": { "id": 0, @@ -475,7 +475,7 @@ POST /v1/community/reward-record ], "total": 1 // 总共的记录 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -491,20 +491,20 @@ POST /v1/community/comment/comment 请求体: -```JSONC +```JSON { - "postId": 123, // 文章id - "commentId": 123, // 评论id(若直接评论文章那id=0) + "postId": 123, // 文章 ID + "commentId": 123, // 评论 ID(若直接评论文章那 id=0) "content": "🤣" // 评论内容 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -520,9 +520,9 @@ POST /v1/community/comment/comment-list 请求体: -```JSONC +```JSON { - "postId": 31153, // 文章id + "postId": 31153, // 文章 ID "size": 10, // 尺寸 "page": 1 // 页数 } @@ -530,18 +530,18 @@ POST /v1/community/comment/comment-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "comments": [ { - "id": 123, // 评论id - "postId": 123, // 文章id - "parentId": 0, // 父id - "senderId": "114514", //发送者id - "sender_nicknameId": 123, // 发送者名称id - "sender_avatarUd": 123, // 发送者头像id + "id": 123, // 评论 ID + "postId": 123, // 文章 ID + "parentId": 0, // 父 ID + "senderId": "114514", // 发送者 ID + "sender_nicknameId": 123, // 发送者名称 ID + "sender_avatarUd": 123, // 发送者头像 ID "content": "?", // 评论内容 "delTime": 0, // 删除时间戳 "createTime": 1754746982, // 发送时间戳 @@ -551,7 +551,7 @@ POST /v1/community/comment/comment-list "auditStatus": 0, // 审核状态 "replies": [], // 评论内容 "senderNickname": "测试评论发送者名称", // 发送者昵称 - "senderAvatar": "https://...", // 发送者头像url + "senderAvatar": "https://...", // 发送者头像 URL "createTimeText": "2025-08-09 21:43:02", // 评论时间 "isLiked": "0", // 是否点赞(1-是,0-否) "isReward": 0, // 是否投币(1-是,0-否) @@ -562,7 +562,7 @@ POST /v1/community/comment/comment-list "isAdmin": 0, // 判断你是否为管理员(1/是,2-否) "total": 3 // 总共评论数量(3个) }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -578,7 +578,7 @@ POST /v1/community/search 请求体: -```JSONC +```JSON { "typ": 3, // 未知 "keyword": "123", // 关键词文本 @@ -589,21 +589,21 @@ POST /v1/community/search 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ba": [], "posts": [ { - "id": 30315, // 文章ID - "baId": 43, // 文章所属分区ID - "senderId": "123", // 文章发送者ID - "senderNicknameId": 123, // 文章发送者名称ID - "senderAvatarId": 123, // 文章发送者头像ID - "groupId": "", // 文章引用群聊ID + "id": 30315, // 文章 ID + "baId": 43, // 文章所属分区 ID + "senderId": "123", // 文章发送者 ID + "senderNicknameId": 123, // 文章发送者名称 ID + "senderAvatarId": 123, // 文章发送者头像 ID + "groupId": "", // 文章引用群聊 ID "title": "测试文章标题", // 文章标题 - "contentType": 2, // 文章内容类别,1-文本,2-Markdown + "contentType": 2, // 文章内容类别: 1-文本,2-markdown "content": "测试文章内容", // 文章内容 "delTime": 0, // 未知 "createTime": 1749736140, // 文章创建时间戳 @@ -639,7 +639,7 @@ POST /v1/community/search "msgTypeLimit": "" // 未知 }, "ba": { - "id": 123, // 文章所处分区ID + "id": 123, // 文章所处分区 ID "name": "测试文章所处分区名称", // 文章所处分区名称 "avatar": "https://...", // 文章所处分区头像 "delTime": 0, // 未知 @@ -657,7 +657,7 @@ POST /v1/community/search // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -673,7 +673,7 @@ POST /v1/community/set-black-list 请求体: -```JSONC +```JSON { "isAdd": 0, // 0-取消屏蔽,1-屏蔽 "authorId": "123" @@ -682,10 +682,10 @@ POST /v1/community/set-black-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -701,7 +701,7 @@ POST /v1/community/black-list 请求体: -```JSONC +```JSON { "size": 20, // 返回文章数量 "page": 1 // 页数 @@ -710,14 +710,14 @@ POST /v1/community/black-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 0, // 屏蔽ID - "user_id": "123", // 屏蔽用户ID + "id": 0, // 屏蔽 ID + "user_id": "123", // 屏蔽用户 ID "nickname": "测试屏蔽用户", // 屏蔽用户名称 "avatar_url": "https://..." // 屏蔽用户头像 } @@ -725,7 +725,7 @@ POST /v1/community/black-list ], "total": 1 // 屏蔽用户数 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -741,22 +741,22 @@ POST /v1/community/posts/post-detail 请求体: -```JSONC +```JSON { - "id": 31622 //文章id + "id": 31622 //文章 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ba": { - "id": 41, // 文章分区id + "id": 41, // 文章分区 ID "name": "云湖", // 分区名称 - "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 作者头像url + "avatar": "https://chat-img2.jwznb.com/FoHHKnX-QNuD33-NnGWlq74xkgpg.webp", // 作者头像 URL "delTime": 0, // 删除时间(戳) "createTime": 1665233353, // 文章创建时间戳 "lastActive": 1757794419, // 上次活跃时间戳 @@ -768,12 +768,12 @@ POST /v1/community/posts/post-detail }, "isAdmin": 0, // 文章作者是否为管理员 "post": { - "id": 123, // 文章id - "baId": 41, // 该文章所处的分区id - "senderId": "7384288", // 文章作者id + "id": 123, // 文章 ID + "baId": 41, // 该文章所处的分区 ID + "senderId": "7384288", // 文章作者 ID "senderNicknameId": 123, // 文章作者名称id "senderAvatarId": 123, // 文章作者头像id - "groupId": "", // 该文章所处的群聊id + "groupId": "", // 该文章所处的群聊 ID "title": "文章标题", // 文章标题 "contentType": 2, // 文章类型,1-普通文字,2-Markdown "content": "文章内容", // 文章内容 @@ -789,11 +789,11 @@ POST /v1/community/posts/post-detail "isSticky": 0, // 置顶时间戳,若不是置顶则为0 "amountNum": 0, // 文章投币数量 "senderNickname": "作者名称", // 文章作者名称 - "senderAvatar": "https://c...", // 文章作者头像url + "senderAvatar": "https://c...", // 文章作者头像 URL "createTimeText": "2025-09-13 17:29:14", // 文章发送时间 "group": { // 该文章下绑定的群聊信息 "id": 0, // 会话类型id - "groupId": "", // 群聊id + "groupId": "", // 群聊 ID "name": "", // 群聊名称 "introduction": "", // 群聊简介 "createBy": "", // 该群群主id @@ -813,9 +813,9 @@ POST /v1/community/posts/post-detail "msgTypeLimit": "" // 群聊消息类型限制 }, "ba": { // 分区相关信息 - "id": 41, // 该文章所属分区id + "id": 41, // 该文章所属分区 ID "name": "云湖", // 分区名称 - "avatar": "https://chat-img.jwznb.com/1665235278282.2976yunhu192.png", // 分区头像url + "avatar": "https://chat-img.jwznb.com/1665235278282.2976yunhu192.png", // 分区头像 URL "delTime": 0, // 分区删除时间戳 "createTime": 1665233353, // 分区创建时间戳 "lastActive": 1757794419, // 分区上次活跃时间戳 @@ -829,7 +829,7 @@ POST /v1/community/posts/post-detail "isVip": 0 // 文章作者是否为vip,0-没有,1-有 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -845,7 +845,7 @@ POST /v1/community/posts/my-post-list 请求体: -```JSONC +```JSON { "size": 20, // 显示文章数量 "page": 1 // 页数 @@ -854,18 +854,18 @@ POST /v1/community/posts/my-post-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "posts": [ // 帖子相关 { - "id": 123, // 文章id - "baId": 49, // 文章所属分区id + "id": 123, // 文章 ID + "baId": 49, // 文章所属分区 ID "senderId": "1659829", // 文章作者 "senderNicknameId": 123, // 作者名称id "senderAvatarId": 123, // 作者头像id - "groupId": "", // 文章所属群聊id + "groupId": "", // 文章所属群聊 ID "title": "test", // 文章标题 "contentType": 1, // 文章类型,1-普通文字,2-Markdown "content": "内容", // 文章内容 @@ -882,18 +882,18 @@ POST /v1/community/posts/my-post-list "amountNum": 0, // 文章投币数量 "senderNickname": "作者", // 文章作者名称 "auditStatus": 0, // 审核状态,0-通过,1-不通过 - "senderAvatar": "https://...", // 文章作者头像url + "senderAvatar": "https://...", // 文章作者头像 URL "createTimeText": "2025-09-14 10:47:58", // 文章发布时间 "group": { // 文章绑定群聊相关 "id": 0, // 文章所属群聊的类型id - "groupId": "", // 文章所属群聊id + "groupId": "", // 文章所属群聊 ID "name": "", // 群聊名称 "introduction": "", // 群聊简介 "createBy": "", // 群聊群主id "createTime": 0, // 群聊创建时间戳 - "avatarId": 0, // 群聊头像id + "avatarId": 0, // 群聊头像 ID "del_flag": 0, - "avatarUrl": "", // 群聊头像url + "avatarUrl": "", // 群聊头像 URL "headcount": 0, // 群聊人数 "readHistory": 0, // 是否开启聊天历史记录,0-没有,1-开了 "alwaysAgree": 0, // 新成员是否直接进入群聊,0-没有,1-开了 @@ -929,9 +929,9 @@ POST /v1/community/ba/group-list 请求体: -```JSONC +```JSON { - "baId": 41, //分区id + "baId": 41, //分区 ID "size": 10, // 分页大小 "page": 1 // 页数 } @@ -939,14 +939,14 @@ POST /v1/community/ba/group-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "groups": [ { "id": 10497, // 群聊创建id - "groupId": "554470989", // 群聊id + "groupId": "554470989", // 群聊 ID "name": "这个是群聊", // 群聊名称 "introduction": "这个是介绍", // 群聊简介 "createBy": "6016104", // 群聊创建者id(群主id) @@ -1010,7 +1010,7 @@ POST /v1/community/ba/forward 请求体: -```JSONC +```JSON { "baId": 0, "receive": [ @@ -1025,10 +1025,10 @@ POST /v1/community/ba/forward 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1044,9 +1044,9 @@ POST /v1/community/ba/manage 请求体: -```JSONC +```JSON { - "baId": 0, // 分区ID + "baId": 0, // 分区 ID "visibleRange": 0, // 分区可见状态,0-所有人可见,1-只有分区所有者可见 "publishAuthority": 0 // 分区开放度,0-所有人都可以发文章和评论,1-仅分区所有者可以发文章任何人都可以评论,2-仅分区所有者可以发文章和评论 } @@ -1054,10 +1054,10 @@ POST /v1/community/ba/manage 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1073,7 +1073,7 @@ POST /v1/community/ba/create 请求体: -```JSONC +```JSON { "name": "1111111111", // 分区名称,最多10字 "avatar": "https://..." // 分区头像 @@ -1082,13 +1082,13 @@ POST /v1/community/ba/create 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "id": 0 // 分区ID + "id": 0 // 分区 ID }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1104,9 +1104,9 @@ POST /v1/community/ba/edit 请求体: -```JSONC +```JSON { - "baId": 0, // 分区ID + "baId": 0, // 分区 ID "name": "1111111111", // 分区名称,最多10字 "avatar": "https://..." // 分区头像 } @@ -1114,10 +1114,10 @@ POST /v1/community/ba/edit 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1133,18 +1133,18 @@ POST /v1/community/ba/delete 请求体: -```JSONC +```JSON { - "baId": 0 // 分区ID + "baId": 0 // 分区 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1160,9 +1160,9 @@ POST /v1/community/posts/create-draft 请求体: -```JSONC +```JSON { - "baId": 0, // 草稿所在分区ID + "baId": 0, // 草稿所在分区 ID "title": "测试完整草稿标题", // 草稿标题 "content": "测试文章草稿内容", // 草稿内容 "contentType": 1, // 草稿类别,1-文本,2-Markdown @@ -1172,13 +1172,13 @@ POST /v1/community/posts/create-draft 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "id": 123 // 草稿ID }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1194,26 +1194,26 @@ POST /v1/community/posts/get-draft 请求体: -```JSONC +```JSON { - "baId": 0, // 草稿所处文章分区ID,一般为0 + "baId": 0, // 草稿所处文章分区 ID,一般为0 "draftId": 123 // 草稿ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "posts": { // 帖子相关 - "id": 123, // 文章id - "baId": 41, // 文章所属分区id + "id": 123, // 文章 ID + "baId": 41, // 文章所属分区 ID "senderId": "123", // 文章作者 "senderNicknameId": 123, // 作者名称id "senderAvatarId": 123, // 作者头像id - "groupId": "", // 文章所属群聊id + "groupId": "", // 文章所属群聊 ID "title": "test", // 文章标题 "contentType": 1, // 文章类型,1-普通文字,2-Markdown "content": "内容", // 文章内容 @@ -1229,18 +1229,18 @@ POST /v1/community/posts/get-draft "isSticky": 0, // 置顶时间戳,若不是置顶则为0 "amountNum": 0, // 文章投币数量 "senderNickname": "作者", // 文章作者名称 - "senderAvatar": "https://...", // 文章作者头像url + "senderAvatar": "https://...", // 文章作者头像 URL "createTimeText": "2025-09-14 10:47:58", // 文章发布时间 "group": { // 文章绑定群聊相关 "id": 0, // 文章所属群聊的类型id - "groupId": "", // 文章所属群聊id + "groupId": "", // 文章所属群聊 ID "name": "", // 群聊名称 "introduction": "", // 群聊简介 "createBy": "", // 群聊群主id "createTime": 0, // 群聊创建时间戳 - "avatarId": 0, // 群聊头像id + "avatarId": 0, // 群聊头像 ID "del_flag": 0, - "avatarUrl": "", // 群聊头像url + "avatarUrl": "", // 群聊头像 URL "headcount": 0, // 群聊人数 "readHistory": 0, // 是否开启聊天历史记录,0-没有,1-开了 "alwaysAgree": 0, // 新成员是否直接进入群聊,0-没有,1-开了 @@ -1258,7 +1258,7 @@ POST /v1/community/posts/get-draft "isVip": 0 // 暂时不清楚 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1274,7 +1274,7 @@ POST /v1/community/posts/cancel-draft 请求体: -```JSONC +```JSON { "draftId": 123 // 草稿ID } @@ -1282,10 +1282,10 @@ POST /v1/community/posts/cancel-draft 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1301,19 +1301,19 @@ POST /v1/community/ba/user-follow-ba 请求体: -```JSONC +```JSON { - "baId": 45, // 分区id + "baId": 45, // 分区 ID "followSource": 2 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1329,18 +1329,18 @@ POST /v1/community/ba/user-unfollow-ba 请求体: -```JSONC +```JSON { - "baId": 45, // 分区id + "baId": 45, // 分区 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1356,18 +1356,18 @@ POST /v1/community/posts/edit-sticky 请求体: -```JSONC +```JSON { - "postId": 45008 // 文章id(如果已经置顶了,则会取消置顶) + "postId": 45008 // 文章 ID(如果已经置顶了,则会取消置顶) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1383,9 +1383,9 @@ POST /v1/community/ba/follower-list 请求体: -```JSONC +```JSON { - "id": 115, // 分区id + "id": 115, // 分区 ID "size": 20, // 每页显示的数量 "page": 1, // 第1页 "memberName": "" // 搜索关注者的关键词 @@ -1394,28 +1394,28 @@ POST /v1/community/ba/follower-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "followers": [ { "id": 11930, //关注id(应该是) - "baId": 115, // 分区id - "userId": "1234567", // 关注者用户id + "baId": 115, // 分区 ID + "userId": "1234567", // 关注者用户 ID "delTime": 0, "followSource": 2, "createTime": 1763132265, // 关注时间戳 "userLevel": 0, // 关注者等级(0-普通,2-分区管理员) "nickname": "是个人", // 关注者名称 "avatarUrl": "https://chat-img.jwznb.com/6900488d625d48ac45ba34eff5b1246c.jpg", // 关注者头像url - "vipUserid": "1234567", // 关注者vip用户id + "vipUserid": "1234567", // 关注者vip用户 ID "vipEndTime": 1765728069 // vip结束时间戳 } ], "total": 1 // 总关注者数量 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1431,20 +1431,20 @@ POST /v1/community/ba/manage-setting 请求体: -```JSONC +```JSON { - "baId": 115, // 分区id - "userId": "1234567", // 用户id + "baId": 115, // 分区 ID + "userId": "1234567", // 用户 ID "userLevel": 2 // 关注者(用户)等级(0-普通,2-分区管理员) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1460,27 +1460,27 @@ POST /v1/community/ba/list-by-create 请求体: -```JSONC +```JSON { - "userId": "1234567" // 用户id + "userId": "1234567" // 用户 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ba": [ { - "id": 50, // 分区id + "id": 50, // 分区 ID "name": "123", // 分区名称 - "avatar": "https://..." // 分区头像url + "avatar": "https://..." // 分区头像 URL } ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1496,7 +1496,7 @@ POST /v1/community/posts/post-list-recommend 请求体: -```JSONC +```JSON { "size":1, // 每页的文章数量 "page":2 // 页数 @@ -1505,18 +1505,18 @@ POST /v1/community/posts/post-list-recommend 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "posts": [ { - "id": 29950, // 文章id - "baId": 41, // 文章所属分区id - "senderId": "1234567", // 文章作者id - "senderNicknameId": 127504, // 作者昵称id - "senderAvatarId": 32537, // 作者头像id - "groupId": "", // 文章所属群聊id + "id": 29950, // 文章 ID + "baId": 41, // 文章所属分区 ID + "senderId": "1234567", // 文章作者 ID + "senderNicknameId": 127504, // 作者昵称 ID + "senderAvatarId": 32537, // 作者头像 ID + "groupId": "", // 文章所属群聊 ID "title": "测试", // 文章标题 "contentType": 2, // 文章类型,1-普通文字,2-Markdown "content": "如果缺少您所在的城市,欢迎反馈添加。", // 文章部分内容 @@ -1534,7 +1534,7 @@ POST /v1/community/posts/post-list-recommend "auditStatus": 0, // 审核状态 "delBy": "", "senderNickname": "昵称", // 作者昵称 - "senderAvatar": "https://chat-img.jwznb.com/xxx.jpg", // 作者头像url + "senderAvatar": "https://chat-img.jwznb.com/xxx.jpg", // 作者头像 URL "createTimeText": "", "group": { "id": 0, @@ -1571,6 +1571,6 @@ POST /v1/community/posts/post-list-recommend ], "total": 3933 // 总文章数量 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/conversation.md b/src/api/v1/conversation.md index 7b172de0..bca40e63 100644 --- a/src/api/v1/conversation.md +++ b/src/api/v1/conversation.md @@ -17,18 +17,18 @@ POST /v1/conversation/dismiss-notification 请求体: -```JSONC +```JSON { - "chatId": "123" // 用户/机器人/群组ID + "chatId": "123" // 用户/机器人/群组 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 返回状态码,1为正常 - "msg": "success" // 返回信息 + "code": 1, + "msg": "success" } ``` @@ -45,10 +45,10 @@ POST /v1/conversation/list 请求体 ```ProtoBuf -md5: "123123" // 上次获取对话列表的md5,如果与服务器一致则返回空列表 +md5: "123123" // 上次获取对话列表的 md5,如果与服务器一致则返回空列表 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 请求标识符 @@ -63,41 +63,41 @@ message address_book_list_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } data { - chat_id: "7356666" // 对象ID - chat_type: 1 // 对象类型,1-用户 2-群聊 3-机器人 + chat_id: "7356666" // 对象 ID + chat_type: 1 // 对象类型: 1-用户 2-群聊 3-机器人 remark: "测试" // 备注名称 chat_content: "我信(" // 会话内容 timestamp_ms: 1755566778727 // 加入对话列表时间戳(毫秒) unread_message: 1 // 是否存在未读消息 - at: 1 // 是否被@,1表示被@ - avatar_id: 12345 // 头像ID - avatar_url: "https://chat-img.jwznb.com/..." // 头像URL - do_not_disturb: 1 // 免打扰,1表示开启 + at: 1 // 是否被 @,1 表示被 @ + avatar_id: 12345 // 头像 ID + avatar_url: "https://chat-img.jwznb.com/..." // 头像 URL + do_not_disturb: 1 // 免打扰,1 表示开启 send_timestamp: 1755566778 // 消息发送时间戳(秒) at_data { - unknown: 123456 // 似乎是名称ID - mentioned_id: "7356666" // 被@的ID + unknown: 123456 // 似乎是名称 ID + mentioned_id: "7356666" // 被@的 ID mentioned_name: "测试" // 被@人名称 - mentioned_in: "8826666" // @消息所属的对话ID,例如群ID - mentioner_id: "8827777" // 发起@的对象的ID + mentioned_in: "8826666" // @消息所属的对话 ID,例如群 ID + mentioner_id: "8827777" // 发起@的对象的 ID mentioner_name: "测试" // 发起@的对象的名称 msg_seq: 1234 // 消息序列 } name: "测试"; // 用户真实名称 - certification_level: 1 // 认证相关,1是官方,2是地区 + certification_level: 1 // 认证相关,1 是官方,2 是地区 } // ... total: 8 // 会话数目 -md5: "abcdef" // 对话列表的md5 +md5: "abcdef" // 对话列表的 md5 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 列出对话 @@ -105,30 +105,30 @@ message list { Status status = 1; repeated Data data = 2; uint64 total = 3; // 列表中对话的数量 - string md5 = 4; // 对话列表的md5 + string md5 = 4; // 对话列表的 md5 message Data { - string chat_id = 1; // 对象ID + string chat_id = 1; // 对象 ID uint64 chat_type = 2; // 对象类型 string remark = 3; // 备注名称 string chat_content = 4; // 消息内容 uint64 timestamp_ms = 5; // 加入对话列表时间戳(毫秒) uint64 unread_message = 6; // 1表示有未读消息 uint64 at = 7; // 是否被@ - uint64 avatar_id = 8; // 头像ID - string avatar_url = 9; // 头像URL + uint64 avatar_id = 8; // 头像 ID + string avatar_url = 9; // 头像 URL uint64 do_not_disturb = 11; // 免打扰 uint64 send_timestamp = 12; // 消息发送时间戳(秒) At_data at_data = 14; // @数据 string name = 15; // 用户真实名称 - uint64 certification_level = 16; // 认证,1是官方 2是地区 + uint64 certification_level = 16; // 认证,1 是官方 2 是地区 message At_data { - uint64 unknown = 1; // 似乎是名称ID - string mentioned_id = 2; // 被@的ID,感觉没啥用 + uint64 unknown = 1; // 似乎是名称 ID + string mentioned_id = 2; // 被@的 ID,感觉没啥用 string mentioned_name = 3; // 被@的名称,感觉也没啥用 - string mentioned_in = 4; // @消息所属的对话ID(例如群ID),感觉还没啥用 - string mentioner_id = 6; // 发起@的对象ID + string mentioned_in = 4; // @消息所属的对话 ID(例如群 ID),感觉还没啥用 + string mentioner_id = 6; // 发起@的对象 ID string mentioner_name = 7; // 发起@对象的名称 uint64 msg_seq = 8; // 发起@的消息序列 } @@ -150,18 +150,18 @@ POST /v1/conversation/sort-change 请求体: -```JSONC +```JSON { - "userId": "123" // 对象ID + "userId": "123" // 对象 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 返回状态码,1为正常 - "msg": "success" // 返回信息 + "code": 1, + "msg": "success" } ``` @@ -177,17 +177,17 @@ POST /v1/conversation/remove 请求体: -```JSONC +```JSON { - "chatId": "123" // 用户/机器人/群组ID + "chatId": "123" // 对象 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 返回状态码,1为正常 - "msg": "success" // 返回信息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/disk.md b/src/api/v1/disk.md index 6d0efbce..f1609bdc 100644 --- a/src/api/v1/disk.md +++ b/src/api/v1/disk.md @@ -17,21 +17,21 @@ POST /v1/disk/create-folder 请求体: -```JSONC +```JSON { - "chatId": "群聊id", // 群聊id + "chatId": "群聊id", // 群聊 id "chatType": 2, // 会话类型 "folderName": "文件名", - "parentFolderId": 0 // 父文件夹id + "parentFolderId": 0 // 父文件夹 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -47,32 +47,32 @@ POST /v1/disk/file-list 请求体: -```JSONC +```JSON { - "chatId": "群聊id", + "chatId": "群聊 id", "chatType": 2, // 会话类型 - "folderId": 0, // 文件夹id(在根目录就是0) + "folderId": 0, // 文件夹 id(在根目录就是 0) "sort": "name_asc" // 排序 } ``` 响应体: -```JSONC +```JSON { "code": 1, "data": { "list": [ { - "id": 1818, // 文件id + "id": 1818, // 文件 id "name": "114514", // 文件名称 "fileSize": 0, // 文件大小 "objectType": 1, // 对象类型 "uploadTime": 1754534188, // 更新时间 - "uploadBy": "114514", // 上传者id + "uploadBy": "114514", // 上传者 id "uploadByName": "上传者名称", "qiniuKey": "" // 七牛云密钥 - } + }, // ... ] }, @@ -92,29 +92,31 @@ POST /v1/disk/file-size 请求体: -```JSONC +```JSON { - "chatId": "群聊id", + "chatId": "群聊 id", "chatType": 2, // 会话类型 } ``` 响应体: -```JSONC +```JSON { "code": 1, "data": { "totalSize": 0 // 群网盘总占用大小(单位:B) }, - "msg": "success" // 返回消息 + "msg": "success" } ``` -## 上传文件(需搭配[获取上传文件token](/api/v1/misc.html#%E8%8E%B7%E5%8F%96%E5%8A%9F%E8%83%BD%E8%B7%AF%E7%94%B1)使用) +## 上传文件 POST /v1/disk/upload-file +需搭配[获取上传文件token](/api/v1/misc.html#%E8%8E%B7%E5%8F%96%E5%8A%9F%E8%83%BD%E8%B7%AF%E7%94%B1)使用. + 请求头: | 名称 | 必须 | 备注 | @@ -123,25 +125,25 @@ POST /v1/disk/upload-file 请求体: -```JSONC +```JSON { - "chatId": "群聊id", + "chatId": "群聊 id", "chatType": 2, // 会话类型 - "fileSize": 124080, // 文件大小(单位是KB) + "fileSize": 124080, // 文件大小(单位是 KB) "fileName": "1114514.png", // 文件名 - "fileMd5": "6b14eab6a86c93c802de85e09561cb5c.png", // 文件的md5+文件拓展名(你的文件上传到云端文件名就是“文件的md5.文件拓展名”) + "fileMd5": "6b14eab6a86c93c802de85e09561cb5c.png", // 文件的 md5+文件拓展名(你的文件上传到云端文件名就是“文件的 md5.文件拓展名”) "fileEtag": "FqhRXAMU8qSP_omDntW7D6BUk50q", // Etag - "qiniuKey": "disk/6b14eab6a86c93c802de85e09561cb5c.png", // 七牛云key(目测在七牛云文件的路径) - "folderId": 0 // 文件夹id(在根目录就是0) + "qiniuKey": "disk/6b14eab6a86c93c802de85e09561cb5c.png", // 七牛云 key(目测在七牛云文件的路径) + "folderId": 0 // 文件夹 id(在根目录就是 0) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -157,9 +159,9 @@ POST /v1/disk/rename 请求体: -```JSONC +```JSON { - "id": 123, // 文件ID + "id": 123, // 文件 ID "objectType": 2, // 文件类型(1-文件夹, 2-文件) "name": "测试文件名称" // 文件名称 } @@ -167,10 +169,10 @@ POST /v1/disk/rename 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -186,18 +188,18 @@ POST /v1/disk/remove 请求体: -```JSONC +```JSON { - "id": 123, // 文件ID + "id": 123, // 文件 ID "objectType": 2, // 文件类型(1-文件夹, 2-文件) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/event.md b/src/api/v1/event.md index cceb7132..f2556dcc 100644 --- a/src/api/v1/event.md +++ b/src/api/v1/event.md @@ -17,32 +17,32 @@ POST /v1/event/list 请求体: -```JSONC +```JSON { - "botId": "123" // 机器人id + "botId": "123" // 机器人 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": { - "id": 123, // 列表ID - "botId": "123", // 机器人ID - "messageReceiveNormal": 1, // 推送普通信息事件,0-不推送,1-推送 - "messageReceiveInstruction": 1, // 推送指令信息事件,0-不推送,1-推送 - "groupJoin": 0, // 推送加入群事件,0-不推送,1-推送 - "groupLeave": 0, // 推送退出群事件,0-不推送,1-推送 - "botFollowed": 0, // 推送关注机器人事件,0-不推送,1-推送 - "botUnfollowed": 0, // 推送取关机器人事件,0-不推送,1-推送 - "botSetting": 0, // 推送机器人信息设置事件,0-不推送,1-推送 - "del_flag": 0 // 删除flag标签 + "id": 123, // 列表 ID + "botId": "123", // 机器人 ID + "messageReceiveNormal": 1, // 推送普通信息事件: 0-不推送,1-推送 + "messageReceiveInstruction": 1, // 推送指令信息事件: 0-不推送,1-推送 + "groupJoin": 0, // 推送加入群事件: 0-不推送,1-推送 + "groupLeave": 0, // 推送退出群事件: 0-不推送,1-推送 + "botFollowed": 0, // 推送关注机器人事件: 0-不推送,1-推送 + "botUnfollowed": 0, // 推送取关机器人事件: 0-不推送,1-推送 + "botSetting": 0, // 推送机器人信息设置事件: 0-不推送,1-推送 + "del_flag": 0 // 删除标签 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -58,25 +58,25 @@ POST /v1/event/edit 请求体: -```JSONC +```JSON { - "botId": "75282754", // 机器人id - "messageReceiveNormal": 1, // 普通消息事件,1开启,0-关闭 - "messageReceiveInstruction": 0, // 指令消息事件,1开启,0-关闭 - "botFollowed": 1, // 关注机器人事件,1开启,0-关闭 - "botUnfollowed": 1, // 取关机器人事件,1开启,0-关闭 - "groupJoin": 1, // 加入群事件,1开启,0-关闭 - "groupLeave": 1, // 退出群事件,1开启,0-关闭 - "botSetting": 1, // 机器人设置消息事件,1开启,0-关闭 - "typ": "messageReceiveInstruction" // 每次机器人设置的key值,为该请求2-8的key值中的一个 + "botId": "75282754", // 机器人 id + "messageReceiveNormal": 1, // 普通消息事件: 1开启,0-关闭 + "messageReceiveInstruction": 0, // 指令消息事件: 1开启,0-关闭 + "botFollowed": 1, // 关注机器人事件: 1开启,0-关闭 + "botUnfollowed": 1, // 取关机器人事件: 1开启,0-关闭 + "groupJoin": 1, // 加入群事件: 1开启,0-关闭 + "groupLeave": 1, // 退出群事件: 1开启,0-关闭 + "botSetting": 1, // 机器人设置消息事件: 1开启,0-关闭 + "typ": "messageReceiveInstruction" // 每次机器人设置的 key 值,为该请求 2-8 的 key 值中的一个 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/expression.md b/src/api/v1/expression.md index 2762edef..986a6039 100644 --- a/src/api/v1/expression.md +++ b/src/api/v1/expression.md @@ -17,7 +17,7 @@ POST /v1/expression/list 响应体: -```JSONC +```JSON { "code": 1, "data": { @@ -25,10 +25,10 @@ POST /v1/expression/list { "id": 114514, "url": "expression/abcdef123456789abcdef123456789ab.jpg", // 需要前面加上 https://chat-img.jwznb.com/ - "urlOriginal": "https://chat-img.jwznb.com/123456789abcdefabcf43bce54e4e242.jpg", // 来源URL + "urlOriginal": "https://chat-img.jwznb.com/123456789abcdefabcf43bce54e4e242.jpg", // 来源 URL "delFlag": 0, "createTime": 114514, // 创建时间戳 - "createBy": "7356666" // 创建者ID + "createBy": "7356666" // 创建者 ID } ] }, @@ -48,18 +48,18 @@ POST /v1/expression/create 请求体: -```JSONC +```JSON { - "url": "https://chat-img.jwznb.com/......" // 图片URL + "url": "https://chat-img.jwznb.com/......" // 图片 URL } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 - "msg": "success" // 状态信息 + "code": 1, + "msg": "success" } ``` @@ -75,18 +75,18 @@ POST /v1/expression/delete 请求体: -```JSONC +```JSON { - "id": 114514 // // 要删除的表情ID + "id": 114514 // // 要删除的表情 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 - "msg": "success" // 状态信息 + "code": 1, + "msg": "success" } ``` @@ -102,18 +102,18 @@ POST /v1/expression/topping 请求体: -```JSONC +```JSON { - "id": 114514 // 要置顶的表情ID + "id": 114514 // 要置顶的表情 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 - "msg": "success" // 状态信息 + "code": 1, + "msg": "success" } ``` @@ -129,17 +129,17 @@ POST /v1/expression/add 请求体: -```JSONC +```JSON { - "id": 123 // 表情ID + "id": 123 // 表情 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 - "msg": "success" // 状态信息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/file.md b/src/api/v1/file.md index fb53795a..2322c4a5 100644 --- a/src/api/v1/file.md +++ b/src/api/v1/file.md @@ -17,17 +17,17 @@ POST /v1/file/send 请求体: -```JSONC +```JSON { - "userId": "123", // 目标用户ID - "deviceId": "123", // 目标用户指定分享的设备ID,为空则为发送给目标用户的所有设备 - "fileData": "{}" // 文件分享数据,格式为json转义 + "userId": "123", // 目标用户 ID + "deviceId": "123", // 目标用户指定分享的设备 ID,为空则为发送给目标用户的所有设备 + "fileData": "{}" // 文件分享数据,格式为 json 转义 } ``` ::: fileData属性,json数据格式 -```JSONC +```JSON { "path": "C:\\Windows\\test.exe", // 文件原始目录 "size": 5774088, // 文件大小 @@ -35,7 +35,7 @@ POST /v1/file/send "isDirectory": 0, // 未知 "count": 1, // 未知 "current": 1, // 未知 - "uuid": "123123123123123123" // 文件分享uuid,应该是随机的,可以随便写 + "uuid": "123123123123123123" // 文件分享 uuid,应该是随机的,可以随便写 } ``` @@ -43,10 +43,10 @@ POST /v1/file/send 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -62,21 +62,21 @@ POST /v1/file/reply 请求体: -```JSONC +```JSON { - "deviceId": "123123123123", // 拒绝请求的设备ID + "deviceId": "123123123123", // 拒绝请求的设备 ID "isAccept": "0", // 未知 - "userId": "123", // 拒绝请求的用户ID + "userId": "123", // 拒绝请求的用户 ID "fileData": "" // 未知 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -92,20 +92,20 @@ POST /v1/file/offer 请求体: -```JSONC +```JSON { - "deviceId": "123", // 目标用户指定分享的设备ID - "description": "{}", // 连接协议,为json格式数据转义,未完成 + "deviceId": "123", // 目标用户指定分享的设备 ID + "description": "{}", // 连接协议,为 json 格式数据转义,未完成 "userId": "123", //目标用户ID - "sessionId": "123123123123123123123" // 连接请求标识ID,应该是随机的,可以随便写 + "sessionId": "123123123123123123123" // 连接请求标识 ID,应该是随机的,可以随便写 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/friend.md b/src/api/v1/friend.md index a9c71eb8..22af5f74 100644 --- a/src/api/v1/friend.md +++ b/src/api/v1/friend.md @@ -19,20 +19,20 @@ POST /v1/friend/apply ### 请求体 -```JSONC +```JSON { - "chatId": "123", // 目标对象ID - "chatType": 2, // 目标对象类别,1-用户,2-群聊,3-机器人 + "chatId": "123", // 目标对象 ID + "chatType": 2, // 目标对象类别: 1-用户,2-群聊,3-机器人 "remark": "测试申请简介" // 申请简介 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常,-1为群聊不存在,-9为已在群聊中 - "msg": "success" // 返回消息 + "code": 1, // 请求状态码,1 为正常,-1 为群聊不存在,-9 为已在群聊中 + "msg": "success" } ``` @@ -40,7 +40,7 @@ POST /v1/friend/apply 群主无法退群,会响应: -```JSONC +```JSON { "code": -1, "msg": "群主不可退群,请先转移群聊" @@ -63,19 +63,19 @@ POST /v1/friend/delete-friend ### 请求体 -```JSONC +```JSON { - "chatId": "123", // 目标对象ID - "chatType": 2, // 目标对象类别,1-用户,2-群聊,3-机器人 + "chatId": "123", // 目标对象 ID + "chatType": 2, // 目标对象类别: 1-用户,2-群聊,3-机器人 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -93,19 +93,19 @@ POST /v1/friend/agree-apply ### 请求体 -```JSONC +```JSON { - "id": 123, // 申请ID + "id": 123, // 申请 ID "agree": 1 // 1-通过请求,2-拒绝请求,3-显示请求过期,4-显示已解散 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -123,19 +123,19 @@ POST /v1/friend/ignore-apply ### 请求体 -```JSONC +```JSON { - "id": 123, // 申请ID + "id": 123, // 申请 ID "ignore": 1 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -154,10 +154,10 @@ POST /v1/friend/address-book-list ### 请求体 ```ProtoBuf -md5: "123123" // 上次获取通讯录的md5,如果与服务器一致则返回空列表 +md5: "123123" // 上次获取通讯录的 md5,如果与服务器一致则返回空列表 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 请求标识符 @@ -172,27 +172,27 @@ message address_book_list_send { ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } data { list_name: "测试聊天对象列表名称" // 聊天对象列表名称,为"用户","我加入的群聊","机器人" data: { - chat_id: "123" // 聊天对象ID + chat_id: "123" // 聊天对象 ID chat_name: "测试聊天对象名称" // 聊天对象名称 - chat_avatar_url: "https://..." // 聊天对象头像url - permisson_level: 2 // 群权限等级(普通用户无此项(数值为0或无此项),群主100,管理员2),只有群列表才有此项 + chat_avatar_url: "https://..." // 聊天对象头像 url + permisson_level: 2 // 群权限等级(普通用户无此项(数值为 0 或无此项),群主 100,管理员 2),只有群列表才有此项 temp_text1 = 1 // 未知 chat_name_up: "测试聊天对象名称" // 聊天对象名称 } chat_type: 1 - // ...单个列表输出完成后,连带list_name和chat_type一起重复 + // ...单个列表输出完成后,连带 list_name 和 chat_type 一起重复 } -md5: "123123" // 通讯录的md5 +md5: "123123" // 通讯录的 md5 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 聊天对话列表 @@ -209,10 +209,10 @@ message address_book_list { // 聊天对象数据 message Data_list { - string chat_id = 1; // 聊天对象ID + string chat_id = 1; // 聊天对象 ID string remark = 2; // 聊天对象备注名称 - string avatar_url = 3; // 聊天对象头像url - int32 permisson_level = 4; // 群权限等级(普通用户无此项(数值为0或无此项),群主100,管理员2),只有群列表才有此项 + string avatar_url = 3; // 聊天对象头像 url + int32 permisson_level = 4; // 群权限等级(普通用户无此项(数值为 0 或无此项),群主 100,管理员 2),只有群列表才有此项 bool noDisturb = 5; // 免打扰 //int32 field6 = 6; // 未知 string name = 8; // 聊天对象真实名称 @@ -239,9 +239,9 @@ POST /v1/friend/request-list ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } requests { receiverName: "测试接收者名称" // 接收者名称 @@ -250,16 +250,16 @@ requests { avatar: "https://..." // 请求方头像 groupName: "测试群组名称" // 群组名称 groupAvata: "https://..." // 群组头像 - inviterId: "123" // 邀请者ID (字段8同此含义) + inviterId: "123" // 邀请者 ID (字段8同此含义) ourceType: 1 // 来源类型 targetType: 1 // 目标类型 - targetId: "123" // 目标ID - receiverId: "123" // 接收者ID + targetId: "123" // 目标 ID + receiverId: "123" // 接收者 ID result: 0 // 处理结果 processedAt: 1231231230 // 处理时间戳 inviteAt: 1231231230 // 邀请时间戳 inviteAtStr: "1231-23-12 31:23:00" // 邀请时间字符串 - requestI: 123; // 请求ID + requestI: 123; // 请求 ID botName: "测试机器人名称" // 机器人名称 botAvatar: "https://..." // 机器人头像 processorName: "测试处理者名称" // 处理者名称 @@ -269,7 +269,7 @@ total: 1 // 总请求数 pending: 0 // 待处理请求数 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 对象请求列表 @@ -282,16 +282,16 @@ message Response { string avatar = 4; // 请求方头像 string groupName = 5; // 群组名称 string groupAvatar = 6; // 群组头像 - string inviterId = 7; // 邀请者ID (字段8同此含义) + string inviterId = 7; // 邀请者 ID (字段8同此含义) int32 sourceType = 9; // 来源类型 int32 targetType = 10; // 目标类型 - string targetId = 11; // 目标ID - string receiverId = 12; // 接收者ID + string targetId = 11; // 目标 ID + string receiverId = 12; // 接收者 ID int32 result = 13; // 处理结果 int64 processedAt = 14; // 处理时间戳 int64 inviteAt = 16; // 邀请时间戳 string inviteAtStr = 17; // 邀请时间字符串 - int32 requestId = 18; // 请求ID + int32 requestId = 18; // 请求 ID string botName = 19; // 机器人名称 string botAvatar = 20; // 机器人头像 string processorName = 22; // 处理者名称 @@ -319,19 +319,19 @@ POST /v1/friend/no-notify ### 请求体 -```JSONC +```JSON { - "chatId": "118738312", // 会话ID + "chatId": "118738312", // 会话 ID "noNotify": 0 // 0-取消免打扰,1-设置免打扰 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -349,7 +349,7 @@ POST /v1/friend/delete-request ### 请求体 -```JSONC +```JSON { "id": 123 // 请求ID } @@ -357,9 +357,9 @@ POST /v1/friend/delete-request ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/group-tag.md b/src/api/v1/group-tag.md index 0ab3513a..c690716a 100644 --- a/src/api/v1/group-tag.md +++ b/src/api/v1/group-tag.md @@ -17,25 +17,25 @@ POST /v1/group-tag/list 请求体: -```JSONC +```JSON { - "groupId": "123456789", //要获取的群聊ID - "size": 20,// 页面总数 - "page": 1,//页码 - "tag": ""// 搜索词语 + "groupId": "123456789", //要获取的群聊 ID + "size": 20, // 页面总数 + "page": 1, // 页码 + "tag": "" // 搜索词语 } ``` 响应体: -```JSONC +```JSON { "code": 1, "data": { "list": [ { - "id": 1234, // 标签ID - "groupId": "123456789", // 群聊ID + "id": 1234, // 标签 ID + "groupId": "123456789", // 群聊 ID "tag": "一个标签", // 标签名称 "color": "#E91E63", // 标签颜色 "desc": "", // 描述 @@ -61,19 +61,19 @@ POST /v1/group-tag/relate 请求体: -```JSONC +```JSON { - "userId": "1234567", // 要关联的用户ID - "tagGroupId": 1145 // 要关联的标签ID + "userId": "1234567", // 要关联的用户 ID + "tagGroupId": 1145 // 要关联的标签 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -89,19 +89,19 @@ POST /v1/group-tag/relate-cancel 请求体: -```JSONC +```JSON { - "userId": "1234567", // 要关联的用户ID - "tagGroupId": 1145 // 要关联的标签ID + "userId": "1234567", // 要关联的用户 ID + "tagGroupId": 1145 // 要关联的标签 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -117,10 +117,10 @@ POST /v1/group-tag/edit 请求体: -```JSONC +```JSON { - "id": 1234, // 要更改的标签ID - "groupId": "123456789", // 要更改的标签所在的群聊ID + "id": 1234, // 要更改的标签 ID + "groupId": "123456789", // 要更改的标签所在的群聊 ID "tag": "一个标签", // 标签名称 "color": "#E91E63", // 标签颜色 "desc": "", //,标签描述 @@ -130,10 +130,10 @@ POST /v1/group-tag/edit 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -149,9 +149,9 @@ POST /v1/group-tag/create 请求体: -```JSONC +```JSON { - "groupId": "123456789", // 要创建标签的群聊ID + "groupId": "123456789", // 要创建标签的群聊 ID "tag": "标签名称", // 标签名称 "color": "#2196F3", // 标签颜色 "desc": "", // 标签描述 @@ -162,10 +162,10 @@ POST /v1/group-tag/create 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -181,18 +181,18 @@ POST /v1/group-tag/delete 请求体: -```JSONC +```JSON { - "id": 1234 // 要删除的标签ID + "id": 1234 // 要删除的标签 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -213,11 +213,11 @@ data { size: 50 // 分页大小 page: 1 // 页数 } -group_id: "123" // 群聊ID -tag_id: 123 // 标签ID +group_id: "123" // 群聊 ID +tag_id: 123 // 标签 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message tag_member_send { @@ -226,8 +226,8 @@ message tag_member_send { int32 size = 1; // 分页大小 int32 page = 2; // 页数 } - string group_id = 3; // 标签所处群聊ID - int64 tag_id = 4; // 标签ID + string group_id = 3; // 标签所处群聊 ID + int64 tag_id = 4; // 标签 ID } ``` @@ -237,26 +237,26 @@ message tag_member_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } user { - group_id: "big" // 所属群聊ID + group_id: "big" // 所属群聊 ID user_info { - user_id: "123" // 用户ID + user_id: "123" // 用户 ID name: "测试用户名" // 用户名 - avatar_url: "https://..." // 头像URL - int32 is_vip: 0 // 是否为vip,0-非vip用户,1-vip用户 + avatar_url: "https://..." // 头像 URL + int32 is_vip: 0 // 是否为 vip: 0-非 vip 用户,1-vip 用户 } - permission_level: 0 // 权限等级, 群主100 管理员2 普通用户无/0 + permission_level: 0 // 权限等级, 群主 100 管理员 2 普通用户无/0 gag_time: 123 // 禁言时间戳 is_gag: 0; // 是否被禁言,0-未被禁言,1-已被禁言 } total: 1 // 总数 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 标签绑定的用户列表 @@ -273,7 +273,7 @@ message tag_member { string avatar_url = 4; int32 is_vip = 6; } - int32 permission_level = 3; // 权限等级, 群主100 管理员2 普通用户无/0 + int32 permission_level = 3; // 权限等级, 群主 100 管理员 2 普通用户无/0 int64 gag_time = 4; // 禁言时间戳 int32 is_gag = 5; // 是否被禁言 } diff --git a/src/api/v1/group.md b/src/api/v1/group.md index e512e0d5..c0c33551 100644 --- a/src/api/v1/group.md +++ b/src/api/v1/group.md @@ -18,7 +18,7 @@ POST /v1/group/info | token | 是 | 无 | ::: warning -此处响应数据部分项目需要在打开相应开关后才会出现,例如private必须打开群聊私有才能在响应数据中看到. +此处响应数据部分项目需要在打开相应开关后才会出现,例如 private 必须打开群聊私有才能在响应数据中看到. ::: ### 请求体 @@ -27,7 +27,7 @@ POST /v1/group/info group_id: "123123" // 群聊 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message info_send { @@ -41,61 +41,61 @@ message info_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } data { - id: "123" //群聊ID + id: "123" //群聊 ID name: "测试群聊" // 群聊名称 - avatar_url: "https://..." // 头像url - avatar_id: 123 // 头像ID + avatar_url: "https://..." // 头像 url + avatar_id: 123 // 头像 ID introduction: "测试群聊" // 群聊简介 member: 123 // 群人数 - create_by: "123" // 创建者ID + create_by: "123" // 创建者 ID direct_join: 0 // 进群免审核,1为开启 - permisson_level: 2 // 权限等级(普通用户无此项(数值为0或无此项),群主100,管理员2) + permisson_level: 2 // 权限等级(普通用户无此项(数值为0或无此项),群主 100,管理员 2) history_msg: 1 // 历史消息,1为开启 category_name: "无" // 分类名 - category_id: 40 // 分类ID - private: 0 // 是否私有,1为私有 - do_not_disturb: 1 // 免打扰,1为开启 - community_id: 123 // 加入社区的ID + category_id: 40 // 分类I D + private: 0 // 是否私有,1 为私有 + do_not_disturb: 1 // 免打扰,1 为开启 + community_id: 123 // 加入社区的 ID community_name: "云湖" // 加入社区的名称 - top: 0 // 置顶会话,1为开启 - admin: "123" // 管理员ID,可以有多个 + top: 0 // 置顶会话,1 为开启 + admin: "123" // 管理员 ID,可以有多个 create_time: 1231231230 // 群聊创建时间 limited_msg_type: "" // 被限制的消息类型,如1,2,3,使用","分格 - owner: "123" // 群主ID - recommandation: 1 // 是否加入群推荐,1为开启 + owner: "123" // 群主 ID + recommandation: 1 // 是否加入群推荐,1 为开启 tag_old: "冲刺一百万用户!" // 标签 tag { - id: 123 // 标签id + id: 123 // 标签 id text: "" // 标签文字 color: "#FFFFFFFF" // 标签颜色 } my_group_nickname: "12345" // 我的群昵称 group_code: "test1234" // 群口令 - hide_group_members: 1 // 隐藏群成员(开启时为1) + hide_group_members: 1 // 隐藏群成员(开启时为 1) auto_delete_message: 730 // 消息自动销毁时间(0-永久不删,90-2个月后删除,365-1年后删除,730-2年后删除) deny_members_upload_to_group_disk: 1 // 禁止群成员上传文件到群云盘(开启时为1) } history_bot { - id: "123" // 机器人ID + id: "123" // 机器人 ID name: "测试" // 机器人名称 name_id: 123 // 机器人名称的序列(数据库中第N个用户/机器人/群组) - avatar_url: "https://..." // 头像URL - avatar_id: 123 // 头像ID + avatar_url: "https://..." // 头像 URL + avatar_id: 123 // 头像 ID introduction: "测试机器人" // 机器人简介 - create_by: "123" // 创建者ID + create_by: "123" // 创建者 ID create_time: 1231231230 // 创建时间戳 user_number: 123 // 使用人数 - private: 1 // 1表示私有机器人. + private: 1 // 1 表示私有机器人. } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 群聊信息 @@ -109,7 +109,7 @@ message info { string group_id = 1; string name = 2; string avatar_url = 3; - uint64 avatar_id = 4; // 头像ID + uint64 avatar_id = 4; // 头像 ID string introduction = 5; uint64 member = 6; // 群人数 string create_by = 7; @@ -117,7 +117,7 @@ message info { uint64 permisson_level = 9; // 权限等级 uint64 history_msg = 10; // 历史消息 string category_name = 11; // 分类名 - uint64 category_id = 12; // 分类ID + uint64 category_id = 12; // 分类 ID uint64 private = 13; // 是否为私有群聊 uint64 do_not_disturb = 14; // 免打扰 uint64 community_id = 15; @@ -132,13 +132,13 @@ message info { repeated Tag tag = 27; string my_group_nickname = 28; // 我的群昵称 string group_code = 29; // 群口令 - uint64 hide_group_members = 30; // 隐藏群成员(开启时为1) + uint64 hide_group_members = 30; // 隐藏群成员(开启时为 1) uint64 auto_delete_message = 32; // 消息自动销毁时间 - uint64 deny_members_upload_to_group_disk = 33; // 禁止群成员上传文件到群云盘(开启时为1) + uint64 deny_members_upload_to_group_disk = 33; // 禁止群成员上传文件到群云盘(开启时为 1) // 已使用标签信息,2没啥用不解析了 message Tag { - uint64 id = 1; // 标签ID(貌似) + uint64 id = 1; // 标签 ID (貌似) string text = 3; string color = 4; } @@ -181,11 +181,11 @@ data { size: 50 // 分页大小 page: 1 // 页数 } -group_id: "big" // 群聊ID +group_id: "big" // 群聊 ID keywords: "测试群成员" // 搜索关键词 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_member_send { @@ -196,7 +196,7 @@ message list_member_send { int32 page = 2; // 页数 } - string group_id = 3; // 群聊ID + string group_id = 3; // 群聊 ID string keywords = 4; // 搜索关键词 } ``` @@ -207,20 +207,20 @@ message list_member_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } user { - group_id: "big" // 所属群聊ID + group_id: "big" // 所属群聊 ID user_info { - user_id: "7356666" // 用户ID + user_id: "7356666" // 用户 ID name: "Feng" // 用户名 - avatar_url: "https://..." // 头像URL - is_vip: 0 // 是否为vip用户, 0-不为vip用户, 1-vip用户 + avatar_url: "https://..." // 头像 URL + is_vip: 0 // 是否为 vip 用户,: 0-非 vip 用户, 1-vip 用户 } - permission_level: 100 // 权限等级, 群主100 管理员2 普通用户无/0 + permission_level: 100 // 权限等级, 群主 100 管理员 2 普通用户无/0 gag_time: 123456 // 禁言时间戳 is_gag: 0 // 是否处于禁言状态 } @@ -228,7 +228,7 @@ user { // ... ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_member { @@ -269,35 +269,35 @@ POST /v1/group/live-room ### 请求体 -```JSONC +```JSON { - "groupId": "123" // 群聊id + "groupId": "123" // 群聊 id } ``` ### 响应数据 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "rooms": [ { - "userId": "123", // 房间管理员用户ID - "roomId": "123", // 房间ID - "chatId": "123", // 房间所属对象ID + "userId": "123", // 房间管理员用户 ID + "roomId": "123", // 房间 ID + "chatId": "123", // 房间所属对象 ID "title": "测试房间", // 房间名称 "chatType": 2, // 房间所属对象类别,一般为2-群聊 "status": 0, // 房间状态码 - "createBy": "123", // 房间创建用户ID + "createBy": "123", // 房间创建用户 ID "createTime": 1231231230, //房间创建时间戳 "nickname": "测试用户", // 房间创建用户名称 "count": 123, // 房间内人数 - "avatarUrl": "https://..." // 房间头像url + "avatarUrl": "https://..." // 房间头像 url } ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -315,7 +315,7 @@ POST /v1/group/instruction-list ### 请求体 -```JSONC +```JSON { "groupId": "big" // 目标群聊 } @@ -323,24 +323,24 @@ POST /v1/group/instruction-list ### 响应数据 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "instructions": [ { - "botId": "123", // 机器人ID + "botId": "123", // 机器人 ID "botName": "测试机器人", // 机器人名称 "name": "测试指令", // 指令名称 "desc": "测试指令简介", // 指令简介 - "id": 123, // 指令ID + "id": 123, // 指令 ID "sort": 0, // 未知 - "auth": 0 // 可用状态,0-所有人可用,1-所有人禁用,2-群主可用,3-群主管理员可用 + "auth": 0 // 可用状态: 0-所有人可用,1-所有人禁用,2-群主可用,3-群主管理员可用 }, // ... ] }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -358,9 +358,9 @@ POST /v1/group/invite ### 请求体 -```JSONC +```JSON { - "chatId": "123", // 邀请成员ID,必须为目标用户token已添加的token + "chatId": "123", // 邀请成员 ID,必须添加目标对象为好友 "chatType": 1, // 邀请成员类别,1-用户,3-机器人 "groupId": "123" // 目标群聊 } @@ -368,10 +368,10 @@ POST /v1/group/invite ### 响应数据 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -389,19 +389,19 @@ POST /v1/group/remove-member ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 目标群聊ID - "userId": "123" // 踢出用户ID + "groupId": "123", // 目标群聊 ID + "userId": "123" // 踢出用户 ID } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -419,20 +419,20 @@ POST /v1/group/gag-member ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 目标群聊ID - "userId": "123", // 禁言用户ID - "gag": 0 // 禁言时间,只能为这些时间,0-取消禁言,600-10分钟,3600-1小时,21600-6小时,43200-12小时,1-永久禁言 + "groupId": "123", // 目标群聊 ID + "userId": "123", // 禁言用户 ID + "gag": 0 // 禁言时间,只能为这些时间: 0-取消禁言,600-10分钟,3600-1小时,21600-6小时,43200-12小时,(-1)-永久禁言 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -444,7 +444,7 @@ GET /v1/group/category ### 响应体 -```JSONC +```JSON { "code": 1, "data": { @@ -624,18 +624,18 @@ POST /v1/group/recommend/list ### 请求体 -```JSONC +```JSON { - "categoryId": 22, // 群聊分类id, 0 代表全部 + "categoryId": 22, // 群聊分类 id, 0 代表全部 "keyword": "114514" // 搜索关键词,留空获取全部群聊 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "groups": [ { @@ -643,26 +643,26 @@ POST /v1/group/recommend/list "groupId": "114514", "name": "这是群聊名字", "introduction": "这是个群聊介绍", - "createBy": "114514", // 创建者id + "createBy": "114514", // 创建者 id "createTime": 1754113069, // 创建时间戳 "avatarId": 43821, // 头像id "del_flag": 0, - "avatarUrl": "https://chat-img.jwznb.com/3d805b635cc54829e461102ab315381b.gif", // 群头像url + "avatarUrl": "https://chat-img.jwznb.com/3d805b635cc54829e461102ab315381b.gif", // 群头像 url "headcount": 16, // 群聊人数 "readHistory": 1, // 是否开启新成员查看消息历史记录(1为开启,0为关闭) "alwaysAgree": 1, // 是否直接进群(1为开启,0为关闭) - "categoryId": 22, // 群聊分类id + "categoryId": 22, // 群聊分类 id "category": "技术-IT/互联网", // 群聊分类名称 "private": 0, // 群聊是否私有(1为开启,0为关闭) "banId": 0, // "gag": 0, // 是否禁言(1为开启,0为关闭) - "gagBy": "", // 被禁言的id + "gagBy": "", // 被禁言的 id "msgTypeLimit": "" // 消息类型限制 }, // ... ] }, - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -680,7 +680,7 @@ POST /v1/group/msg-type-limit ### 请求体 -```JSONC +```JSON { "groupId": "群聊id", "type": "消息类型" // 1-文本消息,2-图片消息,3-Markdown消息,4-文件消息,6-帖子消息,7-表情消息,8-HTML消息,10-视频消息,11-语音消息,13-语音通话(限制多个消息类型一般是 1,2,3,4··· 之类) @@ -689,10 +689,10 @@ POST /v1/group/msg-type-limit ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -711,31 +711,31 @@ POST /v1/group/edit-group ### 请求体 ```ProtoBuf -group_id: "123" // 目标群聊ID +group_id: "123" // 目标群聊 ID name: "测试群聊名称" // 群聊名称 introduction: "测试群聊简介" // 群聊简介 -avatarUrl: "https://..." // 群聊头像url -direct_join: 0 // 进群免审核,1为开启 -history_msg: 1 // 历史消息,1为开启 +avatarUrl: "https://..." // 群聊头像u rl +direct_join: 0 // 进群免审核,1 为开启 +history_msg: 1 // 历史消息,1 为开启 category_name: "无" // 分类名 -category_id: 40 // 分类ID -private: 0 // 是否私有,1为私有 +category_id: 40 // 分类 ID +private: 0 // 是否私有,1 为私有 hide_group_members: 0 // 隐藏群成员 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_group_send { - string group_id = 2; // 目标群聊ID + string group_id = 2; // 目标群聊 ID string name = 3; // 群聊名称 string introduction = 4; // 群聊简介 - string avatarUrl = 5; // 群聊头像url - uint64 direct_join = 6; // 进群免审核,1为开启 - uint64 history_msg = 7; // 历史消息,1为开启 + string avatarUrl = 5; // 群聊头像 url + uint64 direct_join = 6; // 进群免审核,1 为开启 + uint64 history_msg = 7; // 历史消息,1 为开启 string category_name = 8; // 分类名 - uint64 category_id = 9; // 分类ID - uint64 private = 10; // 是否私有,1为私有 + uint64 category_id = 9; // 分类 ID + uint64 private = 10; // 是否私有,1 为私有 uint64 hide_group_members = 11; // 隐藏群成员 } @@ -747,13 +747,13 @@ message edit_group_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_group { @@ -778,14 +778,14 @@ POST /v1/group/bot-list ### 请求体 ```ProtoBuf -group_id: "123" // 目标群聊ID +group_id: "123" // 目标群聊 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_group_send { - string group_id = 2; // 目标群聊ID + string group_id = 2; // 目标群聊 ID } ``` @@ -795,14 +795,14 @@ message edit_group_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } // ... ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 获取群机器人列表 @@ -837,11 +837,11 @@ message bot_list { // int32 hidden/del_flag = 3; // 是否隐藏/删除,猜的 string name = 4; string content = 5; // 内容 - int32 menu_type = 6; // 按钮类型,1-普通按钮 2-选中按钮 3-下拉选择 + int32 menu_type = 6; // 按钮类型: 1-普通按钮 2-选中按钮 3-下拉选择 int64 create_time = 7; // 8,9没找到 int32 menu_action = 10; // 操作类型 - string select = 99; // 选择的选项,在选择按钮的时候也作为状态,选中为1,未选中为0 + string select = 99; // 选择的选项,在选择按钮的时候也作为状态,选中为 1,未选中为 0 } } ``` @@ -862,19 +862,19 @@ POST /v1/group/remove-bot ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 群聊id - "botId": "123" // 机器人id + "groupId": "123", // 群聊 id + "botId": "123" // 机器人 id } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -892,18 +892,18 @@ POST /v1/group/edit-my-group-nickname ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 目标群聊ID + "groupId": "123", // 目标群聊 ID "nickname": "测试群昵称" // 欲设置的群昵称 } ``` ### 响应体 -```JSONC +```JSON { - "msg": "success" // 返回状态消息 + "msg": "success" } ``` @@ -927,19 +927,19 @@ POST /v1/group/edit-group-keyword ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 目前群聊ID + "groupId": "123", // 目前群聊 ID "keyword": "测试群口令" // 欲设置的群口令 } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -961,7 +961,7 @@ POST /v1/group/info-add-friend keyword: "测试群口令" // 欲要搜索的群口令 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message info_add_friend_send { @@ -975,26 +975,26 @@ message info_add_friend_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } Data { - id: "123" // 群聊ID + id: "123" // 群聊 ID name: "测试群名称" // 群聊名称 - avatar_url: "https://..." // 群聊头像url - avatar_id: 123; // 群聊头像ID + avatar_url: "https://..." // 群聊头像 url + avatar_id: 123; // 群聊头像 ID introduction: "测试群聊简介" // 群聊简介 headcount: 123 // 群人数 - createBy: "123" // 群聊创建者ID - readHistory: 1 // 是否允许阅读历史信息,0-不允许,1-允许 + createBy: "123" // 群聊创建者 ID + readHistory: 1 // 是否允许阅读历史信息: 0-不允许,1-允许 limited_msg_type: "1" // 被限制的消息类型,如1,2,3,使用","分格 - keyword: "测试群口令" // 群聊设置的口令 + keyword: "测试群口令" // 群聊设置的群口令 } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message info_add_friend { @@ -1002,16 +1002,16 @@ message info_add_friend { Data data = 1; message Data { - string id = 1; // 群聊ID + string id = 1; // 群聊 ID string name = 2; // 群聊名称 - string avatar_url = 3; // 群聊头像url - uint64 avatar_id = 4; // 群聊头像ID + string avatar_url = 3; // 群聊头像 url + uint64 avatar_id = 4; // 群聊头像 ID string introduction = 5; // 群聊简介 uint64 headcount = 6; // 群人数 - string createBy = 7; // 群聊创建者ID - uint64 readHistory = 10; // 是否允许阅读历史信息,0-不允许,1-允许 + string createBy = 7; // 群聊创建者 ID + uint64 readHistory = 10; // 是否允许阅读历史信息: 0-不允许,1-允许 string limited_msg_type = 22; // 被限制的消息类型,如1,2,3,使用","分格 - string keyword = 29; // 群聊设置的口令 + string keyword = 29; // 群聊设置的群口令 } } ``` @@ -1032,19 +1032,19 @@ POST /v1/group/edit-auto-delete-message ### 请求体 -```JSONC +```JSON { - "groupId": "123", // 群聊id + "groupId": "123", // 群聊 id "autoDeleteMessage": 0 // 消息自动销毁时间(0-永久不删,90-2个月后删除,365-1年后删除,730-2年后删除) } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -1062,19 +1062,19 @@ POST /v1/group/edit-stop-member-upload-group-file ### 请求体 -```JSONC +```JSON { - "groupId": "123456789", // 群聊id + "groupId": "123456789", // 群聊 id "stopMemberUploadGroupFile":1 // 是否开启(0-关闭,1-开启) } ``` ### 响应体 -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -1095,10 +1095,10 @@ POST /v1/group/create-group ```ProtoBuf name: "测试群聊" // 群聊名称 introduction: "测试群聊" // 群聊简介 -avatar_url: "https://..." // 头像url +avatar_url: "https://..." // 头像 url ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message create_send { @@ -1114,14 +1114,14 @@ message create_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } -group_id: "123" // 新群聊ID +group_id: "123" // 新群聊 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message dismiss_group { @@ -1142,7 +1142,7 @@ POST /v1/group/dismiss-group | 名称 | 必须 | 备注 | | ----- | ---- |--------------| -| token | 是 | 必须为群主的 | +| token | 是 | 群主 | ### 请求体 @@ -1150,7 +1150,7 @@ POST /v1/group/dismiss-group group_id: "123123" // 群聊 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message dismiss_send { @@ -1164,13 +1164,13 @@ message dismiss_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message dismiss_group { @@ -1192,35 +1192,35 @@ POST /v1/group/live-room 请求体: -```JSONC +```JSON { - "groupId": "big" // 群聊id + "groupId": "big" // 群聊 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "rooms": [ { - "userId": "1234567", // 用户id - "roomId": "c7552ca7c79546dd93baca4e4adxxxxx", // 房间id - "chatId": "123456789", // 房间所发起的会话id + "userId": "1234567", // 用户 id + "roomId": "c7552ca7c79546dd93baca4e4adxxxxx", // 房间 id + "chatId": "123456789", // 房间所发起的会话 id "title": "", // 房间标题 "chatType": 2, // 房间所发起的会话类型 "status": 0, // 房间状态 - "createBy": "1234567", // 发起房间的用户id + "createBy": "1234567", // 发起房间的用户 id "createTime": 1775881889, // 房间创建时间戳 "nickname": "111", // 房间创建者名称 "count": 1, // 房间人数 - "avatarUrl": "https://chat-img.jwznb.com/defalut-avatars/Nellie%20Bly.png" // 房间创建者头像Url + "avatarUrl": "https://chat-img.jwznb.com/defalut-avatars/Nellie%20Bly.png" // 房间创建者头像 Url } ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -1238,19 +1238,19 @@ POST /v1/group/agree-invite 请求体: -```JSONC +```JSON { - "id": 123, // 申请ID + "id": 123, // 申请 ID "agree": 1 // 1-通过请求,2-拒绝请求,3-显示请求过期,4-显示已解散 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1268,16 +1268,16 @@ POST /v1/group/member-is-removed 请求体: -```JSONC +```JSON { - "userId": "123", // 用户ID - "groupId": "123" // 群聊ID + "userId": "123", // 用户 ID + "groupId": "123" // 群聊 ID } ``` 响应体: -```JSONC +```JSON { "code": 1, // 1-踢过,2-没踢过 "msg": "success" // 返回消息 @@ -1298,18 +1298,18 @@ POST /v1/group/switch 请求体: -```JSONC +```JSON { - "groupId": "123", // 群聊ID + "groupId": "123", // 群聊 ID "hide": 0 // 0-关闭隐藏(加入群推荐),1-隐藏(不加入群推荐) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/instruction.md b/src/api/v1/instruction.md index 3f29b8ac..86c20174 100644 --- a/src/api/v1/instruction.md +++ b/src/api/v1/instruction.md @@ -17,28 +17,28 @@ POST /v1/instruction/web-list 请求体: -```JSONC +```JSON { - "botId": "45669202" // 机器人id + "botId": "45669202" // 机器人 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 2062, // 指令Id - "botId": "45669202", // 机器人id + "id": 2062, // 指令 id + "botId": "45669202", // 机器人 id "name": "普通指令", // 指令名称 "desc": "指令描述", // 指令描述 - "instructionType": 1, // 指令类型,1-普通指令,2-直发指令,5-自定义输入指令,更多(如下两个指令) + "instructionType": 1, // 指令类型: 1-普通指令,2-直发指令,5-自定义输入指令,更多(如下两个指令) "hintText": "输入框提示文字", // 输入框提示文字 "defaultText": "输入框默认文字", // 输入框默认文字 - "customJson": "", // 自定义输入指令json数组 + "customJson": "", // 自定义输入指令 json 数组 "createTime": 0, // 创建时间戳 "sort": 0, // 排序 "hidden": 0 // 是否隐藏(0-显示,1-隐藏) @@ -71,32 +71,32 @@ POST /v1/instruction/web-list } ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` ::: details 自定义输入指令部分解释 -```JSONC +```JSON [{ "key": 0, "type": "radio", "title": "Radio 单选框", - "propsValue": { // propsValue是成品,保存了当前组件实际生效的配置数据。用于组件在页面上显示和运行。 + "propsValue": { // propsValue 是成品,保存了当前组件实际生效的配置数据。用于组件在页面上显示和运行。 "label": "标签", "options": "用#分割,比如:北京#上海#天津" }, - "props": [{ // prop是蓝图,定义了可以配置什么,以及默认值是什么。用于渲染一个配置界面。 - "type": "label", // 类型,一个用于设置“标签”的配置项,有radio-单选框,input-输入框,switch-开关,chexkbox-多选框,textarea-多行输入框,select-选择器 + "props": [{ // prop 是蓝图,定义了可以配置什么,以及默认值是什么。用于渲染一个配置界面。 + "type": "label", // 类型,一个用于设置“标签”的配置项,有 radio-单选框,input-输入框,switch-开关,chexkbox-多选框,textarea-多行输入框,select-选择器 "name": "标签", // 显示给用户的名字叫“标签” - "value": "" // 这个type预定的值,默认空 + "value": "" // 这个 type 预定的值,默认空 }, { "type": "options", "name": "选项", // 显示给用户的名字叫“选项” - "placeholder": "用#分割,如:北京#上海#天津", // 输入框里的提示文字,通常只有Radio-单选框,Checkbox-多选框,Select-选择器会有这个key + "placeholder": "用#分割,如:北京#上海#天津", // 输入框里的提示文字,通常只有 Radio-单选框,Checkbox-多选框,Select-选择器会有这个key "value": "" }], - "id": "ykwmdt" // 该表单的id + "id": "ykwmdt" // 该表单的 id }] ``` @@ -114,23 +114,23 @@ POST /v1/instruction/create 请求体: -```JSONC +```JSON { "name": "名称", // 指令名称 "desc": "描述", // 指令描述 "hintText": "输入框提示文字", // 输入框提示文字 "defaultText": "输入框默认文字", // 输入框默认文字 - "type": 1, // 指令类型,1-普通指令,2-直发指令,5-自定义输入指令 - "botId": "45669202" // 机器人id + "type": 1, // 指令类型: 1-普通指令,2-直发指令,5-自定义输入指令 + "botId": "45669202" // 机器人 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -146,24 +146,24 @@ POST v1/instruction/edit 请求体: -```JSONC +```JSON { - "id": 2064, // 已有的指令id + "id": 2064, // 已有的指令 id "name": "自定义输入指令", // 指令名称 "desc": "指令描述", // 指令描述 - "botId": "45669202", // 机器人id - "customJson": "", // 自定义输入指令(表单指令),只有type为5的自定义输入指令需要,这个是json数组,需转义,具体设置可以看 **获取机器人指令列表(网页控制台)** 对一些表单指令的解释 - "type": 5, // 指令类型,1-普通指令,2-直发指令,5-自定义输入指令 + "botId": "45669202", // 机器人 id + "customJson": "", // 自定义输入指令(表单指令),只有 type 为 5 的自定义输入指令需要,这个是 json 数组,需转义,具体设置可以看 **获取机器人指令列表(网页控制台)** 对一些表单指令的解释 + "type": 5, // 指令类型: 1-普通指令,2-直发指令,5-自定义输入指令 "delFlag": 0 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -183,47 +183,55 @@ POST /v1/instruction/list id: "123123123" ``` +::: details ProtoBuf 数据结构 + ```proto message get_bot_instruction { string id = 3; } ``` +::: + 响应体: ```protobuf status { - number: 123456 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 123456 + code: 1 + msg: "success" } data { - command_id: 123 // 指令id - bot_id: 123123123 // 机器人id + command_id: 123 // 指令 id + bot_id: 123123123 // 机器人 id command_name: "测试指令名称" // 指令名称 - instruction_type: 5 // 指令类型,1-普通指令,2-直发指令,5-自定义输入指令 + instruction_type: 5 // 指令类型: 1-普通指令,2-直发指令,5-自定义输入指令 command_defaultText: "测试默认输入文本" // 指令输入框默认文本 - command_settingsJso: "{}" // 指令设置JSON(表单指令,自定义输入指令) + command_settingsJso: "{}" // 指令设置 JSON(表单指令,自定义输入指令) } ``` +::: details ProtoBuf 数据结构 + ```proto message Status { - uint64 number = 1; // 不知道干啥的,可能是请求ID - uint64 code = 2; // 状态码,1为正常 - string msg = 3; // 返回消息 + uint64 request_id = 1; + uint64 code = 2; + string msg = 3; } message instruction_list { Status status = 1; Data data = 2; message Data { - uint64 command_id = 1; // 指令id - string bot_id = 2; // 机器人id + uint64 command_id = 1; // 指令 id + string bot_id = 2; // 机器人 id string command_name = 3; // 指令名称 - uint64 instruction_type = 5; // 指令类型,1-普通指令,2-直发指令,5-自定义输入指令 + uint64 instruction_type = 5; // 指令类型: 1-普通指令,2-直发指令,5-自定义输入指令 string command_defaultText = 7; // 指令输入框默认文本 - string command_settingsJson = 10; // 指令设置JSON(表单指令,自定义输入指令) + string command_settingsJson = 10; // 指令设置 JSON(表单指令,自定义输入指令) } } ``` + +::: \ No newline at end of file diff --git a/src/api/v1/live.md b/src/api/v1/live.md index cf35d44c..f6ea06da 100644 --- a/src/api/v1/live.md +++ b/src/api/v1/live.md @@ -9,7 +9,7 @@ title: live 云湖的语音频道使用的是标准的 livekit,wss 地址: `wss://livekit.jwznb.com` ::: -## 获取语音频道进入token +## 获取语音频道进入 token POST /v1/live/add @@ -21,22 +21,22 @@ POST /v1/live/add 请求体: -```JSONC +```JSON { - "roomId": "123123123123", // 目标语音频道ID - "chatId": "123" // 目标语言频道所处对象ID + "roomId": "123123123123", // 目标语音频道 ID + "chatId": "123" // 目标语言频道所处对象 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "joinToken": "123123123123123123", // livekit 的 access_token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -52,18 +52,18 @@ POST /v1/live/close 请求体: -```JSONC +```JSON { - "roomId": "123123123123", // 目标语音频道ID + "roomId": "123123123123", // 目标语音频道 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -79,19 +79,19 @@ POST /v1/live/hang_up 请求体: -```JSONC +```JSON { - "roomId": "123123123123", // 目标语音频道ID + "roomId": "123123123123", // 目标语音频道 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": {}, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -107,26 +107,26 @@ POST /v1/live/room-info 请求体: -```JSONC +```JSON { - "roomId": "123123123123", // 目标语音频道ID + "roomId": "123123123123", // 目标语音频道 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "room": { "id": 18658, - "userId": "123", // 房间管理员用户ID - "roomId": "ef8beba697c84a5f889af45211b449a1", // 房间ID + "userId": "123", // 房间管理员用户 ID + "roomId": "ef8beba697c84a5f889af45211b449a1", // 房间 ID "recvIds": "", // 未知 - "chatId": "872440499", // 房间ID所属对象 - "title": "测试频道", // 房间ID标题 - "chatType": 2, // 房间ID所属对象类别 + "chatId": "872440499", // 房间 ID 所属对象 + "title": "测试频道", // 房间 ID 标题 + "chatType": 2, // 房间 ID 所属对象类别 "status": 0, //房间状态 "duration": 0, // 未知 "typ": 2, // 未知 @@ -136,7 +136,7 @@ POST /v1/live/room-info "updateTime": 1754455159 // 房间创建时间戳 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -152,19 +152,19 @@ POST /v1/live/title-edit 请求体: -```JSONC +```JSON { - "roomId": "123123123123", // 目标语音频道ID + "roomId": "123123123123", // 目标语音频道 ID "title": "测试语音频道名称" //目标语音频道名称 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -180,25 +180,25 @@ POST /v1/live/get-calling 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "callTime": 12, // 请求呼叫时间 "chatType": 1, // 发起通话的会话类型 "message": { - "msgId": "20902d6a256d436ebfc4a2xxxxxxxxxx", // 发起通话的消息id - "senderId": "1234567", // 发起通话的用户id + "msgId": "20902d6a256d436ebfc4a2xxxxxxxxxx", // 发起通话的消息 id + "senderId": "1234567", // 发起通话的用户 id "senderType": 0, // 未知 - "senderAvatarId": 123456, // 发送者头像id - "senderNicknameId": 123456, // 发送者名称id + "senderAvatarId": 123456, // 发送者头像 id + "senderNicknameId": 123456, // 发送者名称 id "contentType": 13, // 发起通话的消息类型 "content": "" // 语音通话参数 }, - "senderAvatar": "https://chat-img.jwznb.com/123....jpg", // 发起通话的用户头像Url + "senderAvatar": "https://chat-img.jwznb.com/123....jpg", // 发起通话的用户头像 Url "senderNickname": "1114" // 发起通话的用户名称 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/menu.md b/src/api/v1/menu.md index 74509fb8..beaa2746 100644 --- a/src/api/v1/menu.md +++ b/src/api/v1/menu.md @@ -17,10 +17,10 @@ POST /v1/menu/event 请求头: -```JSONC +```JSON { - "id": 338, // 按钮id - "chatId": "114514", // 聊天id + "id": 338, // 按钮 id + "chatId": "114514", // 聊天 id "chatType": 2, // 会话类型 "value": "" // 按钮的值 } @@ -28,9 +28,9 @@ POST /v1/menu/event 响应头: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/misc.md b/src/api/v1/misc.md index f660dc7c..461744bb 100644 --- a/src/api/v1/misc.md +++ b/src/api/v1/misc.md @@ -17,9 +17,9 @@ GET /v1/misc/configure-distribution 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "audioUrl": "https://chat-audio1.jwznb.com/", // 音频路由 "fileUrl": "https://chat-file.jwznb.com/", // 文件路由 @@ -27,9 +27,9 @@ GET /v1/misc/configure-distribution "serverUrl": "http://chat.jwznb.com:8888/", // 未知 "shareUrl": "https://yhfx.jwznb.com/", // 分享链接路由 "videoUrl": "https://chat-video1.jwznb.com/", // 视频路由 - "websocketUrl": "wss://chat-ws-go.jwzhd.com/ws" // ws路由 + "websocketUrl": "wss://chat-ws-go.jwzhd.com/ws" // WS 路由 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -45,13 +45,13 @@ GET /v1/misc/qiniu-token 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123:123" // 图片上传token + "token": "123:123" // 图片上传 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -67,13 +67,13 @@ GET /v1/misc/qiniu-token-audio 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123:123" // 音频上传token + "token": "123:123" // 音频上传 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -89,13 +89,13 @@ GET /v1/misc/qiniu-token2 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123:123" // 文件上传token + "token": "123:123" // 文件上传 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -111,13 +111,13 @@ GET /v1/misc/qiniu-token-video 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123:123" // 视频上传token + "token": "123:123" // 视频上传 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -133,13 +133,13 @@ GET /v1/misc/qiniu-token-group-disk 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "123:123" // 群文件上传token + "token": "123:123" // 群文件上传 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -155,18 +155,18 @@ GET /v1/misc/setting 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "fileSizeLimitNormal": 40, // 非vip用户文件上传大小,单位MB - "fileeSizeLimitVip": 1024, // VIP用户文件上传大小 /单位MB - "imageSizeLimitNormal": 40, // 非vip用户图片上传大小,单位MB - "imageSizeLimitVip": 50, // vip用户图片上传大小,单位MB - "videoSizeLimitNormal": 40, // 非vip用户视频上传大小,单位MB - "videoSizeLimitVip": 200 // vip用户视频上传大小,单位MB + "fileSizeLimitNormal": 40, // 非 vip 用户文件上传大小,单位 MB + "fileeSizeLimitVip": 1024, // vip 用户文件上传大小 /单位 MB + "imageSizeLimitNormal": 40, // 非 vip 用户图片上传大小,单位 MB + "imageSizeLimitVip": 50, // vip 用户图片上传大小,单位 MB + "videoSizeLimitNormal": 40, // 非 vip 用户视频上传大小,单位 MB + "videoSizeLimitVip": 200 // vip 用户视频上传大小,单位 MB }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -176,13 +176,13 @@ GET /v1/misc/gray-status 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "status": 0 // 0-不为灰色状态,1-灰色状态,处于灰色状态下云湖窗口将加上一层灰色滤镜 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -193,8 +193,8 @@ GET /v1/misc/auto-update URL 参数: ```TEXT -platform=windows // 目标平台标识符,windows,android,macos,ios -userId=123 // 获取更新的用户ID +platform=windows // 目标平台标识符: windows,android,macos,ios +userId=123 // 获取更新的用户 ID ``` 响应体: @@ -206,8 +206,8 @@ userId=123 // 获取更新的用户ID 云湖社交更新中 -// url属性为更新安装包网址,参数platform为macos,ios是此值可能为空 -// version属性为版本号 +// url属性为更新安装包网址,参数 platform 为 macos,ios 是此值可能为空 +// version 属性为版本号 diff --git a/src/api/v1/mount-setting.md b/src/api/v1/mount-setting.md index 97b56131..9fcff1cc 100644 --- a/src/api/v1/mount-setting.md +++ b/src/api/v1/mount-setting.md @@ -17,9 +17,9 @@ POST /v1/mount-setting/create 请求体: -```JSONC +```JSON { - "groupId": "big", // 目标群聊ID + "groupId": "big", // 目标群聊 ID "mountName": "测试挂载名称", // 挂载名称 "webdavUrl": "https://...", // 挂载网址 "webdavUserName": "测试挂载用户名", // 挂载用户名 @@ -30,10 +30,10 @@ POST /v1/mount-setting/create 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -49,17 +49,17 @@ POST /v1/mount-setting/delete 请求体: -```JSONC +```JSON { - "id": 123 // 挂载ID + "id": 123 // 挂载 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/msg.md b/src/api/v1/msg.md index 4891a9ba..39d33fdd 100644 --- a/src/api/v1/msg.md +++ b/src/api/v1/msg.md @@ -16,47 +16,40 @@ POST /v1/msg/send-message | token | 是 | 无 | 请求体: -建议参考proto文件中的内容. +建议参考 proto 文件中的内容. ```ProtoBuf -msg_id: "信息ID" -chat_id: "欲发送到的信息对象" -chat_type: 1 // 欲发送到的信息对象的类别,1-用户,2-群聊,3-机器人 +msg_id: "abcdef" +chat_id: "114514" +chat_type: 2 data { - text: "信息文本" - quote_msg_text: "引用信息文本" - image_key: "欲发送图片key" - msg_text1: "信息文本" - msg_text2: "信息文本" - form: "" // 表单消息 - temp_text2: "" - temp_text3: "" - temp_code1: 0 + text: "文本内容" + image: "abcdef.jpg" } -content_type: 1 -temp_code: 0 -quote_msg_id: "引用信息ID" -temp_text: "" +content_type: 2 // 内容类型 +quote_msg_id: "引用消息的 ID" + +// media 其实没啥用 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 发送消息 message send_message_send { - string msg_id = 2; // 信息ID + string msg_id = 2; // 信息 ID string chat_id = 3; // 欲发送到的信息对象 - uint64 chat_type = 4; // 欲发送到的信息对象的类别,1-用户,2-群聊,3-机器人 + uint64 chat_type = 4; // 欲发送到的信息对象的类别 Data data = 5; message Data { string text = 1; // 信息文本 string buttons = 2; // 按钮 string file_name = 4; // 欲发送文件名称 - string file_key = 5; // 欲发送文件key - repeated string mentioned_id = 6; // @用户ID,可以填写多个 + string file_key = 5; // 欲发送文件 key + repeated string mentioned_id = 6; // @对象 ID ,可以填写多个 string form = 7; // 表单消息 string quote_msg_text = 8; // 引用信息文本 - string image = 9; // 欲发送图片key/url(expression/abcdef.jpg) + string image = 9; // 欲发送图片 key/url(expression/abcdef.jpg) string post_id = 10; // 文章ID string post_title = 11; // 文章标题 string post_content = 12; // 文章内容 @@ -65,21 +58,21 @@ message send_message_send { string quote_image_url = 16; // 引用图片直链,https://... string quote_image_name = 17; // 引用图片文件名称 uint64 file_size = 18; // 欲发送文件大小 - string video = 19; // 欲发送视频key/url(123.mp4) - string audio = 21; // 语音key/url(123.m4a) + string video = 19; // 欲发送视频 key/url(123.mp4) + string audio = 21; // 语音 key/url(123.m4a) uint64 audio_time = 22; // 语音秒数 string quote_video_url = 23; // 引用视频直链,https://... uint64 quote_video_time = 24; // 引用视频时长 - uint64 sticker_item_id = 25; // 表情ID - uint64 sticker_pack_id = 26; // 表情包ID + uint64 sticker_item_id = 25; // 表情 ID + uint64 sticker_pack_id = 26; // 表情包 ID string room_name = 29; // 语音房间发送显示信息的文本 } - uint64 content_type = 6; // 信息类别,1-文本,2-图片,3-markdown,4-文件,5-表单,6-文章,7-表情,8-html,11-语音,13-语音通话 - uint64 command_id = 7; // 所使用命令ID - string quote_msg_id = 8; // 引用信息ID + uint64 content_type = 6; // 信息类别 + uint64 command_id = 7; // 所使用命令 ID + string quote_msg_id = 8; // 引用信息 ID Media media = 9; - message Media { // 在media发送对象为,图片/音频/视频 - string file_key = 1; // 发送对象key(就是上传后七牛对象存储给你返回的file_key) + message Media { // 在 media 发送对象为,图片/音频/视频 + string file_key = 1; // 发送对象 key (就是上传后七牛对象存储给你返回的 file_key) string file_hash = 2; // 发送对象上传返回哈希 string file_type = 3; // 发送对象类别,image/jpeg-图片,video/mp4-音频 uint64 image_height = 5; // 图片高度 @@ -184,13 +177,13 @@ message send_message_send { ```ProtoBuf status { - number: 123456 + request_id: 123456 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 信息发送是否成功状态信息 @@ -220,18 +213,18 @@ POST /v1/msg/edit-message 请求体: ```ProtoBuf -msg_id: "123456" // 要编辑的消息ID -chat_id: "big" // 消息所属聊天对象的ID -chat_type: 2 // 消息所属聊天对象的类型,1-用户 2-群组 3-机器人 +msg_id: "123456" // 要编辑的消息 ID +chat_id: "big" // 消息所属聊天对象的 ID +chat_type: 2 // 消息所属聊天对象类型 content { text: "123" // 文本 - // 剩下的建议看proto文件 + // 剩下的建议看 proto 文件 } -content_type: 1 // 要编辑为的消息类型,1-文本 3-markdown 8-html -quote_msg_id: "11451419180" // 引用的消息ID +content_type: 1 // 要编辑为的消息类型 +quote_msg_id: "11451419180" // 引用的消息 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 编辑消息 @@ -245,8 +238,8 @@ message edit_message_send { string buttons = 2; // 按钮 string quote_msg_text = 8; // 引用消息文字 } - uint64 content_type = 6; // 信息类别,1-文本,3-markdown,8-html - string quote_msg_id = 8; // 引用信息ID + uint64 content_type = 6; // 信息类别 + string quote_msg_id = 8; // 引用信息 ID } ``` @@ -256,13 +249,13 @@ message edit_message_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_message { @@ -277,7 +270,7 @@ message edit_message { POST /v1/msg/list-message-by-seq ::: warning -由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照proto文件理解相关内容.也欢迎来PR补充. +由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照 proto 文件理解相关内容.也欢迎来 PR 补充. ::: 请求头: @@ -290,18 +283,18 @@ POST /v1/msg/list-message-by-seq ```ProtoBuf msg_start: 1234 // 开始的消息序列 -chat_type: 2 // 对象类型, 1-用户 2-群聊 3-机器人 -chat_id: "big" // 对象ID +chat_type: 2 // 对象类型 +chat_id: "big" // 对象 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 通过消息序列列出消息 message list_message_by_seq_send { - uint64 msg_start = 3; // 从第N个消息开始 + uint64 msg_start = 3; // 从第 N 个消息开始 uint64 chat_type = 4; // 对象类型 - string chat_id = 5; // 对象ID + string chat_id = 5; // 对象 ID } ``` @@ -311,21 +304,21 @@ message list_message_by_seq_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } msg { - msg_id: "abcdef" // 消息ID + msg_id: "abcdef" // 消息 ID sender { - chat_id: "7356666" // 发送者ID + chat_id: "7356666" // 发送者 ID chat_type: 1 // 发送者类型。 name: "测试" // 发送者名称 - avatar_url: "https://chat-img.jwznb.com/..." // 头像URL + avatar_url: "https://chat-img.jwznb.com/..." // 头像 URL tag_old: "测试成员" // 标签(旧版显示) // ... tag { - id: 114514 // 标签ID + id: 114514 // 标签 ID text: "测试成员" // 标签文字 color: "#FFFFFFFF" // 颜色 } @@ -335,7 +328,7 @@ msg { content_type: 1 // 消息类型 content { text: "ok" // 消息内容 - // 剩下的建议看ProtoBuf序列文件,太多不写了 + // 剩下的建议看 ProtoBuf 序列文件,太多不写了 } send_time: 123456789 // 发送时间(毫秒时间戳) cmd { @@ -344,7 +337,7 @@ msg { type: 1 // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } msg_delete_time: 8888 // 消息撤回时间(毫秒时间戳) - quote_msg_id: "abcdef" // 引用消息的ID + quote_msg_id: "abcdef" // 引用消息的 ID msg_seq: 6666 // 消息序列 edit_time: 1234 // 最后编辑时间 } @@ -352,11 +345,11 @@ msg { total: 23 // 获取的消息数量,貌似最大31个,实际获取的数量是请求中的数量+1 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message Tag { - uint64 id = 1; // 标签ID(貌似) + uint64 id = 1; // 标签 ID (貌似) string text = 3; string color = 4; } @@ -367,7 +360,7 @@ message list_message_by_seq { uint64 msg_count = 3; // 消息数 message Msg { - string msg_id = 1; // 消息ID + string msg_id = 1; // 消息 ID Sender sender = 2; string direction = 3; // 消息位置,左边/右边 uint64 content_type = 4; @@ -375,12 +368,12 @@ message list_message_by_seq { uint64 send_time = 6; // 时间戳(毫秒) Cmd cmd = 7; // 指令 uint64 msg_delete_time = 8; // 消息撤回时间 - string quote_msg_id = 9; // 引用消息ID + string quote_msg_id = 9; // 引用消息 ID uint64 msg_seq = 10; uint64 edit_time = 12; // 最后编辑时间 message Cmd { - uint64 cmd_id = 1; // 指令ID + uint64 cmd_id = 1; // 指令 ID string name = 2; // 指令名 uint64 type = 4; // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } @@ -388,28 +381,28 @@ message list_message_by_seq { message Content { string text = 1; // 消息内容 string buttons = 2; // 按钮 - string image_url = 3; // 图像URL + string image_url = 3; // 图像 URL string file_name = 4; // 文件名 - string file_url = 5; // 文件URL - repeated string at = 6; // @ + string file_url = 5; // 文件 URL + repeated string at = 6; // 被 @ 对象的 ID string form = 7; // 表单消息 string quote_msg_text = 8; // 引用消息文字 - string sticker_url = 9; // 表情URL - string post_id = 10; // 文章ID + string sticker_url = 9; // 表情 URL + string post_id = 10; // 文章 ID string post_title = 11; // 文章标题 string post_content = 12; // 文章内容 string post_content_type = 13; // 文章类型 - string expression_id = 15; // 个人表情ID(不知道为啥为STR) + string expression_id = 15; // 个人表情 ID (不知道为啥类型为字符串) string quote_image_url = 16; // 引用图片直链,https://... string quote_image_name = 17; // 引用图片文件名称 uint64 file_size = 18; // 文件/图片大小(字节) - string video_url = 19; // 视频URL - string audio_url = 21; // 语音URL + string video_url = 19; // 视频 URL + string audio_url = 21; // 语音 URL uint64 audio_time = 22; // 语音时长 string quote_video_url = 23; // 引用视频直链,https://... uint64 quote_video_time = 24; // 引用视频时长 - uint64 sticker_item_id = 25; // 表情ID - uint64 sticker_pack_id = 26; // 表情包ID + uint64 sticker_item_id = 25; // 表情 ID + uint64 sticker_pack_id = 26; // 表情包 ID string call_text = 29; // 语音通话文字 string call_status_text = 32; // 语音通话状态文字 uint64 width = 33; // 图片的宽度 @@ -418,10 +411,10 @@ message list_message_by_seq { } // 发送者信息 message Sender { - string chat_id = 1; // 发送者ID + string chat_id = 1; // 发送者 ID uint64 chat_type = 2; // 发送者类型 string name = 3; // 发送者名称 - string avatar_url = 4; // 头像URL + string avatar_url = 4; // 头像 URL repeated string tag_old = 6; // 标签(旧版显示) repeated Tag tag = 7; // 标签 } @@ -436,7 +429,7 @@ message list_message_by_seq { POST /v1/msg/list-message ::: warning -由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照proto文件理解相关内容.也欢迎来PR补充. +由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照 proto 文件理解相关内容.也欢迎来 PR 补充. ::: 请求头: @@ -449,40 +442,40 @@ POST /v1/msg/list-message ```ProtoBuf msg_count: 233 // 获取的消息数 -msg_id: "abcdef" // 从指定消息id开始,可不写 -chat_type: 2 // 对象类型,1-用户 2-群聊 3-机器人 -chat_id: "big" // 对象ID +msg_id: "abcdef" // 从指定消息 id 开始,可不写 +chat_type: 2 // 对象类型 +chat_id: "big" // 对象 ID ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message list_message_send { uint64 msg_count = 2; // 获取消息数 - string msg_id = 3; // 从指定消息ID开始 + string msg_id = 3; // 从指定消息 ID 开始 uint64 chat_type = 4; // 对象类型 - string chat_id = 5; // 对象ID + string chat_id = 5; // 对象 ID } ``` ::: 响应体: -列出的是指定消息ID前的消息. +列出的是指定消息 ID 前的消息. ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } msg { - msg_id: "abcdef" // 消息ID + msg_id: "abcdef" // 消息 ID sender { - chat_id: "7356666" // 发送者ID + chat_id: "7356666" // 发送者 ID chat_type: 1 // 发送者类型。 name: "测试" // 发送者名称 - avatar_url: "https://chat-img.jwznb.com/..." // 头像URL + avatar_url: "https://chat-img.jwznb.com/..." // 头像 URL tag_old: "测试成员" // 标签(旧版显示) // ... tag { @@ -496,34 +489,34 @@ msg { content_type: 1 // 消息类型 content { text: "ok" // 消息内容 - // 剩下的建议看ProtoBuf序列文件,太多不写了 + // 剩下的建议看 ProtoBuf 序列文件,太多不写了 } send_time: 123456789 // 发送时间(毫秒时间戳) cmd { - cmd_id = 123; // 指令ID + cmd_id = 123; // 指令 ID name: "指令名" // 指令名 type: 1 // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } msg_delete_time: 8888 // 消息撤回时间(毫秒时间戳) - quote_msg_id: "abcdef" // 引用消息的ID + quote_msg_id: "abcdef" // 引用消息的 ID msg_seq: 6666 // 消息序列 edit_time: 1234 // 最后编辑时间 } // ... ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 标签 message Tag { - uint64 id = 1; // 标签ID(貌似) + uint64 id = 1; // 标签 ID (貌似) string text = 3; string color = 4; } message Msg { - string msg_id = 1; // 消息ID + string msg_id = 1; // 消息 ID Sender sender = 2; string direction = 3; // 消息位置,左边/右边 uint64 content_type = 4; @@ -531,12 +524,12 @@ message Msg { uint64 send_time = 6; // 时间戳(毫秒) Cmd cmd = 7; // 指令 uint64 msg_delete_time = 8; // 消息撤回时间 - string quote_msg_id = 9; // 引用消息ID + string quote_msg_id = 9; // 引用消息 ID uint64 msg_seq = 10; uint64 edit_time = 12; // 最后编辑时间 message Cmd { - uint64 cmd_id = 1; // 指令ID + uint64 cmd_id = 1; // 指令 ID string name = 2; // 指令名 uint64 type = 4; // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } @@ -547,25 +540,25 @@ message Msg { string image_url = 3; string file_name = 4; string file_url = 5; - repeated string at = 6; // @ + repeated string at = 6; // 被 @ 对象的 ID string form = 7; // 表单消息 string quote_msg_text = 8; // 引用消息文字 - string sticker_url = 9; // 表情URL - string post_id = 10; // 文章ID + string sticker_url = 9; // 表情 URL + string post_id = 10; // 文章 ID string post_title = 11; // 文章标题 string post_content = 12; // 文章内容 string post_content_type = 13; // 文章类型 - string expression_id = 15; // 个人表情ID(不知道为啥为STR) + string expression_id = 15; // 个人表情 ID (不知道为啥为类型为字符串) string quote_image_url = 16; // 引用图片直链,https://... string quote_image_name = 17; // 引用图片文件名称 uint64 file_size = 18; // 文件/图片大小(字节) - string video_url = 19; // 视频URL - string audio_url = 21; // 语音URL + string video_url = 19; // 视频 URL + string audio_url = 21; // 语音 URL uint64 audio_time = 22; // 语音时长 string quote_video_url = 23; // 引用视频直链,https://... uint64 quote_video_time = 24; // 引用视频时长 - uint64 sticker_item_id = 25; // 表情ID - uint64 sticker_pack_id = 26; // 表情包ID + uint64 sticker_item_id = 25; // 表情 ID + uint64 sticker_pack_id = 26; // 表情包 ID string call_text = 29; // 语音通话文字 string call_status_text = 32; // 语音通话状态文字 uint64 width = 33; // 图片的宽度 @@ -584,7 +577,7 @@ message Msg { } // 获取消息 -message list_message { // 其实可以和 list-message-by-seq共用的。 +message list_message { // 其实可以和 list-message-by-seq 共用的。 Status status = 1; repeated Msg msg = 2; } @@ -597,11 +590,11 @@ message list_message { // 其实可以和 list-message-by-seq共用的。 POST /v1/msg/list-message-by-mid-seq ::: warning -由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照proto文件理解相关内容.也欢迎来PR补充. +由于没有所有消息情况,因此此处响应相关内容(尤其是指令等测试群不常见部分)可能会有缺失/错误,见谅.同时建议参照 proto 文件理解相关内容.也欢迎来 PR 补充. ::: ::: tip -此接口和 list-message 的区别在于此接口获取到的消息包含请求的消息ID的消息内容. 实际获取到的消息数量是请求消息数量+1 +此接口和 list-message 的区别在于此接口获取到的消息包含请求的消息 ID 的消息内容. 实际获取到的消息数量是请求消息数量+1 ::: 请求头: @@ -613,12 +606,12 @@ POST /v1/msg/list-message-by-mid-seq 请求体: ```ProtoBuf -msg_seq: 123456 // 开始消息的seq,不写默认0 -chat_type: 2 // 对象类型,1-用户 2-群聊 3-机器人 -chat_id: "big" // 对象ID +msg_seq: 123456 // 开始消息的 seq,不写默认0 +chat_type: 2 // 对象类型 +chat_id: "big" // 对象 ID unknown: 0 // 不知道干啥的 msg_count: 10 // 请求获取消息数量 -msg_id: abcdef // 消息ID +msg_id: abcdef // 消息 ID ``` ::: details ProtoBuf 数据结构 @@ -626,7 +619,7 @@ msg_id: abcdef // 消息ID ```proto // 列出包含请求 msg_id 消息 message list_message_by_mid_seq_send { - uint64 msg_seq = 3; // 开始消息的seq + uint64 msg_seq = 3; // 开始消息的 seq uint64 chat_type = 4; string chat_id = 5; uint64 unknown = 6; // 不知道干啥的 @@ -641,21 +634,21 @@ message list_message_by_mid_seq_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } msg { - msg_id: "abcdef" // 消息ID + msg_id: "abcdef" // 消息 ID sender { - chat_id: "7356666" // 发送者ID + chat_id: "7356666" // 发送者 ID chat_type: 1 // 发送者类型。 name: "测试" // 发送者名称 - avatar_url: "https://chat-img.jwznb.com/..." // 头像URL + avatar_url: "https://chat-img.jwznb.com/..." // 头像 URL tag_old: "测试成员" // 标签(旧版显示) // ... tag { - id: 114514 // 标签ID + id: 114514 // 标签 ID text: "测试成员" // 标签文字 color: "#FFFFFFFF" // 颜色 } @@ -665,16 +658,16 @@ msg { content_type: 1 // 消息类型 content { text: "ok" // 消息内容 - // 剩下的建议看ProtoBuf序列文件,太多不写了 + // 剩下的建议看 ProtoBuf 序列文件,太多不写了 } send_time: 123456789 // 发送时间(毫秒时间戳) cmd { - cmd_id = 123; // 指令ID + cmd_id = 123; // 指令 ID name: "指令名" // 指令名 type: 1 // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } msg_delete_time: 8888 // 消息撤回时间(毫秒时间戳) - quote_msg_id: "abcdef" // 引用消息的ID + quote_msg_id: "abcdef" // 引用消息的 ID msg_seq: 6666 // 消息序列 edit_time: 1234 // 最后编辑时间 } @@ -682,18 +675,18 @@ msg { total: 11 // 获取的消息数量 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 标签 message Tag { - uint64 id = 1; // 标签ID(貌似) + uint64 id = 1; // 标签 ID (貌似) string text = 3; string color = 4; } message Msg { - string msg_id = 1; // 消息ID + string msg_id = 1; // 消息 ID Sender sender = 2; string direction = 3; // 消息位置,左边/右边 uint64 content_type = 4; @@ -701,12 +694,12 @@ message Msg { uint64 send_time = 6; // 时间戳(毫秒) Cmd cmd = 7; // 指令 uint64 msg_delete_time = 8; // 消息撤回时间 - string quote_msg_id = 9; // 引用消息ID + string quote_msg_id = 9; // 引用消息 ID uint64 msg_seq = 10; uint64 edit_time = 12; // 最后编辑时间 message Cmd { - uint64 cmd_id = 1; // 指令ID + uint64 cmd_id = 1; // 指令 ID string name = 2; // 指令名 uint64 type = 4; // 指令类型(1-普通指令, 2-直发指令, 5-自定义输入指令) } @@ -717,25 +710,25 @@ message Msg { string image_url = 3; string file_name = 4; string file_url = 5; - repeated string at = 6; // @ + repeated string at = 6; // 被 @ 对象的 ID string form = 7; // 表单消息 string quote_msg_text = 8; // 引用消息文字 - string sticker_url = 9; // 表情URL - string post_id = 10; // 文章ID + string sticker_url = 9; // 表情 URL + string post_id = 10; // 文章 ID string post_title = 11; // 文章标题 string post_content = 12; // 文章内容 string post_content_type = 13; // 文章类型 - string expression_id = 15; // 个人表情ID(不知道为啥为STR) + string expression_id = 15; // 个人表情 ID (不知道为啥为类型是字符串) string quote_image_url = 16; // 引用图片直链,https://... string quote_image_name = 17; // 引用图片文件名称 uint64 file_size = 18; // 文件/图片大小(字节) - string video_url = 19; // 视频URL - string audio_url = 21; // 语音URL + string video_url = 19; // 视频 URL + string audio_url = 21; // 语音 URL uint64 audio_time = 22; // 语音时长 string quote_video_url = 23; // 引用视频直链,https://... uint64 quote_video_time = 24; // 引用视频时长 - uint64 sticker_item_id = 25; // 表情ID - uint64 sticker_pack_id = 26; // 表情包ID + uint64 sticker_item_id = 25; // 表情 ID + uint64 sticker_pack_id = 26; // 表情包 ID string call_text = 29; // 语音通话文字 string call_status_text = 32; // 语音通话状态文字 uint64 width = 33; // 图片的宽度 @@ -775,9 +768,9 @@ POST /v1/msg/list-message-edit-record 请求体: -```JSONC +```JSON { - "msgId": "12312312312312312312312313", // 信息ID + "msgId": "12312312312312312312312313", // 信息 ID "size": 10, // 获取的历史编辑内容数 "page": 1 // 页面数 } @@ -785,16 +778,16 @@ POST /v1/msg/list-message-edit-record 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 1018684, // 信息编辑ID - "msgId": "123123123123123123123123", // 信息ID + "id": 1018684, // 信息编辑 ID + "msgId": "123123123123123123123123", // 信息 ID "contentType": 1, // 信息类别 - "contentOld": "{\"text\":\"测试原始编辑文本\"}", // 信息文本,转义后json数据 + "contentOld": "{\"text\":\"测试原始编辑文本\"}", // 信息文本,转义后 json 数据 "createTime": 1231231231230, // 信息创建时间戳 "msgTime": 1231231231230 // 编辑时间戳 } @@ -802,7 +795,7 @@ POST /v1/msg/list-message-edit-record ], "total": 1 // 历史编辑总数 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -819,22 +812,22 @@ POST /v1/msg/button-report 请求体: ```ProtoBuf -msg_id: "123123123123123123" // 信息ID -chat_type: 2 // 对象类型, 1-用户 2-群聊 3-机器人 -chat_id: "123" // 对象ID -user_id: "123" // 按钮事件发送者ID +msg_id: "123123123123123123" // 信息 ID +chat_type: 2 // 对象类型 +chat_id: "123" // 对象 ID +user_id: "123" // 按钮事件发送者 ID button_value: "测试按钮文本" // 欲点击按钮的值 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 通过按钮事件点击消息 message button_report_send { - string msg_id = 2; // 信息ID - uint64 chat_type = 3; // 对象类型, 1-用户 2-群聊 3-机器人 - string chat_id = 4; // 对象ID - string user_id = 5; // 按钮事件发送者ID + string msg_id = 2; // 信息 ID + uint64 chat_type = 3; // 对象类型 + string chat_id = 4; // 对象 ID + string user_id = 5; // 按钮事件发送者 ID string button_value = 6; // 欲点击按钮的值 } ``` @@ -842,17 +835,17 @@ message button_report_send { ::: 响应体: -列出的是指定消息ID前的消息. +列出的是指定消息 ID 前的消息. ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 按钮事件点击返回状态信息 @@ -876,19 +869,19 @@ POST /v1/msg/recall-msg 请求体: ```ProtoBuf -msg_id: "123123123123123123" // 信息ID -chat_id: "123" // 信息所属对象ID -chat_type: 2 // 信息所属对象类型, 1-用户 2-群聊 3-机器人 +msg_id: "123123123123123123" // 信息 ID +chat_id: "123" // 信息所属对象 ID +chat_type: 2 // 信息所属对象类型 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto -// 通过msgId撤回消息 +// 通过 msgId 撤回消息 message recall_msg_send { - string msg_id = 2; // 信息ID - string chat_id = 3; // 信息所属对象ID - uint64 chat_type = 4; // 信息所属对象类型, 1-用户 2-群聊 3-机器人 + string msg_id = 2; // 信息 ID + string chat_id = 3; // 信息所属对象 ID + uint64 chat_type = 4; // 信息所属对象类型 } ``` @@ -898,13 +891,13 @@ message recall_msg_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 撤回消息返回数据 @@ -928,20 +921,20 @@ POST /v1/msg/recall-msg-batch 请求体: ```ProtoBuf -msg_id: "123123123123123123" // 信息ID +msg_id: "123123123123123123" // 信息 ID // ... -chat_id: "123" // 信息所属对象ID -chat_type: 2 // 信息所属对象类型, 1-用户 2-群聊 3-机器人 +chat_id: "123" // 信息所属对象 ID +chat_type: 2 // 信息所属对象类型 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto -// 通过msgId撤回消息 +// 通过 msgId 撤回消息 message recall_msg_batch_send { - repeated string msg_id = 2; // 信息ID - string chat_id = 3; // 信息所属对象ID - uint64 chat_type = 4; // 信息所属对象类型, 1-用户 2-群聊 3-机器人 + repeated string msg_id = 2; // 信息 ID + string chat_id = 3; // 信息所属对象 ID + uint64 chat_type = 4; // 信息所属对象类型 } ``` @@ -951,13 +944,13 @@ message recall_msg_batch_send { ```ProtoBuf status { - number: 114514 + request_id: 114514 code: 1 msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 批量信息撤回返回状态 @@ -980,19 +973,19 @@ POST /v1/msg/file-download-record 请求体: -```JSONC +```JSON { - "msgId": "5040d27fc975416680a14e5a1b37ef06", // 文件消息id + "msgId": "5040d27fc975416680a14e5a1b37ef06", // 文件消息 id "downloadPath": "/storage/emulated/0/Download/云湖/恶臭(1).txt" // 下载路径 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1008,13 +1001,13 @@ POST v1/msg/msg-forward 请求体: -```JSONC +```JSON { - "msgId": "e22342a5a1a54f03bc3xxxxxxxxxxxx", // 被转发的消息msgId + "msgId": "e22342a5a1a54f03bc3xxxxxxxxxxxx", // 被转发的消息 msgId "chatType": 2, // 被转发消息的会话类型 "receive": [ { - "chatId": "1234567", // 要转发到的会话id + "chatId": "1234567", // 要转发到的会话 id "chatType": 1 // 要转发到的会话类型 } ] @@ -1023,10 +1016,10 @@ POST v1/msg/msg-forward 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -1043,20 +1036,20 @@ POST v1/msg/pic-list-message-by-mid-seq 请求体: ```ProtoBuf -image_id: 110617 // 图片id +image_id: 110617 // 图片 id chat_type: 2 // 会话类型 -chat_id: "418769995" // 会话id +chat_id: "418769995" // 会话 id earlier_quantities: 10 // 前面(消息时间较早)的图片数量 latest_quantities: 0 // 后面(消息时间较新)的图片数量 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto meassage pic-list-message-by-mid-seq { - uint64 image_id = 3; // 图片id + uint64 image_id = 3; // 图片 id uint64 chat_type = 4; // 会话类型 - string chat_id = 5; // 会话id + string chat_id = 5; // 会话 id uint64 earlier_quantities = 6; // 前面(消息时间较早)的图片数量 uint64 latest_quantities = 7; // 后面(消息时间较新)的图片数量 } @@ -1067,7 +1060,7 @@ meassage pic-list-message-by-mid-seq { 响应体: ```proto -// 和list-message/list-message-by-seq/list-message-by-mid-seq的proto共用 +// 和 list-message/list-message-by-seq/list-message-by-mid-seq 的 proto 共用 ``` ## 删除消息(不是撤回) @@ -1084,19 +1077,19 @@ POST /v1/msg/delete 请求体: -```JSONC +```JSON { - "chatId": "123", // 聊天ID - "msgId": "123", // 消息ID + "chatId": "123", // 聊天 ID + "msgId": "123", // 消息 ID "chatType": 1 // 聊天类型 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/report.md b/src/api/v1/report.md index 1d8d71f6..45ec9d86 100644 --- a/src/api/v1/report.md +++ b/src/api/v1/report.md @@ -13,8 +13,8 @@ POST /v1/report/create ```JSONC { - "chatId": "123", // 对象id - "chatType": 2, // 对象类型,1-用户,2-群聊,3-机器人 + "chatId": "123", // 对象 id + "chatType": 2, // 对象类型 "chatName": "测试会话名称", // 对象名称 "content": "测试举报内容", // 举报内容 "url": "https://...", // 举报提交的图片 @@ -26,7 +26,7 @@ POST /v1/report/create ```JSONC { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/search.md b/src/api/v1/search.md index 6c5cbd26..5759fa08 100644 --- a/src/api/v1/search.md +++ b/src/api/v1/search.md @@ -17,7 +17,7 @@ POST /v1/search/home-search 请求体: -```JSONC +```JSON { "word": "114514" // 搜索关键词 } @@ -25,35 +25,35 @@ POST /v1/search/home-search 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { "title": "用户", // 类型标题 - "list": null // 搜索用户,没有就显示null + "list": null // 搜索用户,没有就显示 null }, { "title": "群组", // 类型标题 "list": [ { - "friendId": "114514", // 群聊id - "friendType": 2, // 识别对象类别,1-用户,2-群聊,3-机器人 + "friendId": "114514", // 群聊 id + "friendType": 2, // 识别对象类别 "nickname": "114514", // 群聊名字 "name": "", - "avatarUrl": "https://chat-img.jwznb.com/ba7631819aaff2fc5799bbf6f279c606.jpg", // 群聊头像url + "avatarUrl": "https://chat-img.jwznb.com/ba7631819aaff2fc5799bbf6f279c606.jpg", // 群聊头像 url "hit": 1 } ] }, { "title": "机器人", // 类型标题 - "list": null // 搜索机器人,没有就显示null + "list": null // 搜索机器人,没有就显示 null } ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -69,12 +69,12 @@ POST /v1/search/chat-search 请求体: -```JSONC +```JSON { "word": "3598257", // 搜索词 - "chatId": "test", // 对象ID + "chatId": "test", // 对象 ID "chatType": 2, // 对象类别 - "type": "all", // 信息类别,1-文本,3-markdown,4-文件,6-文章,7-表情包,8-html + "type": "all", // 信息类别,1-文本,3-markdown,4-文件,6-文章,7-表情,8-html "size": 30, // "time": 9999999999999, // 涵盖信息时间戳,只返回此时间戳内的信息 "direction":1 // 未知 @@ -83,15 +83,15 @@ POST /v1/search/chat-search 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": "123", // 信息ID + "id": "123", // 信息 ID "sequence": 123, // 第几条信息 - "chatId": "123", // 信息所处对象ID + "chatId": "123", // 信息所处对象 ID "chatType": 0, // 未知,不是信息所处对象类别 "name": "测试发送者名称", // 发送者名称 "avatarUrl": "https://...", @@ -103,6 +103,6 @@ POST /v1/search/chat-search // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/share.md b/src/api/v1/share.md index 79f7fc40..e7c28a51 100644 --- a/src/api/v1/share.md +++ b/src/api/v1/share.md @@ -17,33 +17,33 @@ POST /v1/share/info 请求体: -```JSONC +```JSON { - "key": "9o5UKnYgLk6z", // 分享链接key(来自 https://yhfx.jwznb.com/share?key=9o5UKnYgLk6z&ts=1754730310 内key的值 ) + "key": "9o5UKnYgLk6z", // 分享链接 key(来自 https://yhfx.jwznb.com/share?key=9o5UKnYgLk6z&ts=1754730310 内 key 的值 ) "ts": "1754730310" // 创建分享链接时间戳(ts=timestamp) } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "share": { "id": 33110, // 第33110个群聊 - "user_id": "114514", // 用户id + "user_id": "114514", // 用户 id "chat_name": "咸料", // 分享链接会话名称 "chat_type": 2, // 分享链接会话类型 - "chat_id": "65535", // 会话id - "key": "123123", // 分享链接key(来自 https://yhfx.jwznb.com/share?key=123123&ts=123123123 内key的值 ) - "create_by": "114514", // 分享链接创建者id + "chat_id": "65535", // 会话 id + "key": "123123", // 分享链接 key(来自 https://yhfx.jwznb.com/share?key=123123&ts=123123123 内 key 的值 ) + "create_by": "114514", // 分享链接创建者 id "create_time": 123123123, // 创建分享链接时间戳 - "imageUrl": "share/...", // 分享链接会话头像url + "imageUrl": "share/...", // 分享链接会话头像 url "imageName": "resources/share_bg/bg1.jpg" // 图片名称 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -59,7 +59,7 @@ POST /v1/share/create 请求体: -```JSONC +```JSON { "chatId": "会话id", "chatType": 2, // 会话类型,1-用户,2-群聊,3-机器人 @@ -69,15 +69,15 @@ POST /v1/share/create 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "imageKey": "share/...", // 图片key - "key": "123123123", // 分享链接的key - "shareUrl": "https://yhfx.jwznb.com/", // 分享开头的url + "imageKey": "share/...", // 图片 key + "key": "123123123", // 分享链接的 key + "shareUrl": "https://yhfx.jwznb.com/", // 分享链接的 URL "ts": 123123123 // 分享链接创建时间戳 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` diff --git a/src/api/v1/sticker.md b/src/api/v1/sticker.md index 12be447d..447f6ff5 100644 --- a/src/api/v1/sticker.md +++ b/src/api/v1/sticker.md @@ -17,7 +17,7 @@ POST /v1/sticker/list 响应体: -```JSONC +```JSON { "code": 1, "data": { @@ -25,24 +25,25 @@ POST /v1/sticker/list { "id": 114514, "name": "表情包名称", - "createBy": "7356666", // 创建者ID + "createBy": "7356666", // 创建者 ID "createTime": 114514, // 创建时间戳 "delFlag": 0, // 是否被删除 "userCount": 2, // 使用人数 - "hot": 0, // 表情包热度,不知道为啥全0 + "hot": 0, // 表情包热度,不知道为啥全 0 "uuid": "dddddddd-dddd-2333-1145-ddddddabcdef", // UUID "updateTime": 2333, // 更新时间戳 - "sort": 0, // 分类?我这边都是0 + "sort": 0, // 分类?我这边都是 0 "stickerItems": [ { "id": 114514, "name": "表情名称", - "url": "sticker/114514abcdd444456aaaaaaaaee0d454.jpg", // 表情包URL,需要前面加上 https://chat-img.jwznb.com/ - "stickerPackId": 114514, // 所属表情包ID - "createBy": "7356666", // 创建者ID + "url": "sticker/114514abcdd444456aaaaaaaaee0d454.jpg", // 表情包 URL,需要前面加上 https://chat-img.jwznb.com/ + "stickerPackId": 114514, // 所属表情包 ID + "createBy": "7356666", // 创建者 ID "createTime": 2333, // 更新时间戳 "delFlag": 0 - } + }, + // ... ] } ] @@ -63,36 +64,36 @@ POST /v1/sticker/detail 请求体: -```JSONC +```JSON { - "id": 123 // 表情包ID + "id": 123 // 表情包 ID } ``` 响应体: -```JSONC +```JSON { "code": 1, "data": { "stickerPack": { - "id": 894, // 表情包ID + "id": 894, // 表情包 ID "name": "图标梗", // 表情包名称 "createBy": "9120256", // 创建者 "createTime": 1730724963, // 创建时间(时间戳) "delFlag": 0, "userCount": 8, // 用户人数 - "hot": 0, // 热度? 我这边抓到的都是0 - "uuid": "216d7881-64ae-4409-aa0a-4f4d1a8f649d", // uuid + "hot": 0, // 热度? 我这边抓到的都是 0 + "uuid": "216d7881-64ae-4409-aa0a-4f4d1a8f649d", // UUID "updateTime": 1754363209, // 更新时间 "sort": 0, // 分类相关? "stickerItems": [ { "id": 18951, // 表情ID "name": "汇总部分", // 表情名称 - "url": "sticker/4599f91519364bcc2be6718c3915d388.jpg", // 表情URL,前面需加上 https://chat-img.jwznb.com/ - "stickerPackId": 894, // 所属表情包ID - "createBy": "9120256", // 创建者ID + "url": "sticker/4599f91519364bcc2be6718c3915d388.jpg", // 表情 URL,前面需加上 https://chat-img.jwznb.com/ + "stickerPackId": 894, // 所属表情包 ID + "createBy": "9120256", // 创建者 ID "createTime": 1730724991, // 创建时间 "delFlag": 0 }, @@ -100,8 +101,8 @@ POST /v1/sticker/detail ] }, "user": { - "id": 56922, // 似乎是名称ID? - "user_id": "9120256", // 创建者用户ID + "id": 56922, // 似乎是名称 ID? + "user_id": "9120256", // 创建者用户 ID "nickname": "千米", // 创建者用户名 "avatar_url": "https://uapis.cn/api/imgapi/bq/youshou.php" // 头像地址 } @@ -122,18 +123,18 @@ POST /v1/sticker/add 请求体: -```JSONC +```JSON { - "id": 894 // 表情包ID + "id": 894 // 表情包 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -149,18 +150,18 @@ POST /v1/sticker/remove-sticker-pack 请求体: -```JSONC +```JSON { - "id": 123 // 要移除的表情包的ID + "id": 123 // 要移除的表情包的 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -176,11 +177,11 @@ POST /v1/sticker/sort 请求体: -```JSONC +```JSON { "sort": "[ { - \"id\":\"123\", // 表情包ID + \"id\":\"123\", // 表情包 ID \"sort\":\"2\" // 排序,数字越大越靠前 }, { @@ -192,13 +193,13 @@ POST /v1/sticker/sort } ``` -::: details 备注: 使用Python请求代码 +::: details 备注: 使用 Python 请求代码 ```Python headers = {"token": token} sticker = [ { - "id": "1","sort": "1", # 不知道为啥id前面是数值这里为啥变成了字符串,sort越大排序越靠前 + "id": "1","sort": "1", # 不知道为啥 id 前面是数值这里为啥变成了字符串,sort 越大排序越靠前 }, { "id": "2","sort": "2" @@ -213,9 +214,9 @@ print(response.text) 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/sticky.md b/src/api/v1/sticky.md index 780c7e9f..fd5e74e4 100644 --- a/src/api/v1/sticky.md +++ b/src/api/v1/sticky.md @@ -17,27 +17,27 @@ POST /v1/sticky/list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "sticky": [ { - "id": 8977, // 置顶ID - "chatType": 2, // 会话对象类别,1-用户,2-群聊,3-机器人 - "chatId": "114514", // 会话对象id + "id": 8977, // 置顶 ID + "chatType": 2, // 会话对象类别: 1-用户,2-群聊,3-机器人 + "chatId": "114514", // 会话对象 id "chatName": "example", // 会话对象名字 "sort": 1751616217, // 不知道,跟群聊创建时间戳一样(? "avatarUrl": "https://chat-img.jwznb.com/xxxxxxxxxxxxxxx.jpg", // 群聊头像地址 "createTime": 1751616217, // 会话对象创建时间戳 "delFlag": 0, - "userId": "1234567", // 用户id - "certificationLevel": 0 // 识别是否为官方出品,1为官方出品,0则不是 + "userId": "1234567", // 用户 id + "certificationLevel": 0 // 认证等级: 2-地区,1-官方,0-非官方 } // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -53,19 +53,19 @@ POST /v1/sticky/add 请求体: -```JSONC +```JSON { - "chatId": "430084557", // 会话id - "chatType": 2 // 会话类型,1-用户,2-群聊,3-机器人 + "chatId": "430084557", // 会话 id + "chatType": 2 // 会话类型: 1-用户,2-群聊,3-机器人 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -81,19 +81,19 @@ POST /v1/sticky/delete 请求体: -```JSONC +```JSON { - "chatId": "430084557", // 会话id - "chatType": 2 // 会话类型,1-用户,2-群聊,3-机器人 + "chatId": "430084557", // 会话 id + "chatType": 2 // 会话类型: 1-用户,2-群聊,3-机器人 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -109,17 +109,17 @@ POST /v1/sticky/topping 请求体: -```JSONC +```JSON { - "id": 5753 // 置顶id + "id": 5753 // 置顶 id } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/user.md b/src/api/v1/user.md index c3a3da97..61f466ab 100644 --- a/src/api/v1/user.md +++ b/src/api/v1/user.md @@ -11,14 +11,14 @@ POST /v1/user/captcha 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "b64s": "image//png;base64...", // 人机验证图片base64 - "id": "123" // 人机验证ID + "b64s": "image//png;base64...", // 人机验证图片 Base64 + "id": "123" // 人机验证 ID }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -28,24 +28,24 @@ POST /v1/user/verification-login 请求体: -```JSONC +```JSON { "mobile": "12312312300", // 登录手机号 "captcha": "123123", // 手机验证码 "deviceId": "awa", // 登录设备唯一标识符,可自定义 - "platform": "windows" // 登录平台名称,一般为windows,web等可自定义 + "platform": "windows" // 登录平台名称,一般为 windows,web 等可自定义,不校验 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "f87TJHF9-****-****-************" // 账户登录token + "token": "f87TJHF9-****-****-************" // 账户 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -63,25 +63,25 @@ GET /v1/user/info ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } data { - id: "123" // 用户id + id: "123" // 用户 id name: "测试用户" // 用户名 - avatar_url: "https://..." // 头像URL - avatar_id: 123 //头像ID + avatar_url: "https://..." // 头像 URL + avatar_id: 123 //头像 ID phone: "12312312300" // 手机号 email: "123@123.com" // 邮箱 coin: 123 // 金币数 - is_vip: 0 // 是否为VIP - vip_expired_time: 1231231230 // VIP过期时间 + is_vip: 0 // 是否为 VIP + vip_expired_time: 1231231230 // VIP 过期时间 invitation_code: "123" // 邀请码 } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 用户自身信息 @@ -90,15 +90,15 @@ message info { Status status = 1; message Data { // 11是描述手机号长整数的,懒得解析了 - string id = 1; // 用户id + string id = 1; // 用户 id string name = 2; // 用户名 - string avatar_url = 4; // 头像URL - uint64 avatar_id = 5; // 头像ID + string avatar_url = 4; // 头像 URL + uint64 avatar_id = 5; // 头像 ID string phone = 6; // 手机号 string email = 7; // 邮箱 double coin = 8; // 金币数 - int32 is_vip = 9; // 是否为VIP - uint64 vip_expired_time = 10; // VIP过期时间 + int32 is_vip = 9; // 是否为 VIP + uint64 vip_expired_time = 10; // VIP 过期时间 string invitation_code = 12; // 邀请码 } Data data = 2; @@ -120,10 +120,10 @@ POST /v1/user/get-user 请求体: ```ProtoBuf -id: "用户id" +id: "用户 id" ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message get_user_send { @@ -137,21 +137,21 @@ message get_user_send { ```ProtoBuf status { - number: 123456 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 123456 + code: 1 + msg: "success" } data { - id: "123" // 用户ID + id: "123" // 用户 ID name: "测试用户" // 用户名 - name_id: 123 // 名称ID - avatar_url: "https://..." // 头像URL - avatar_id: 123 // 头像ID + name_id: 123 // 名称 ID + avatar_url: "https://..." // 头像 URL + avatar_id: 123 // 头像 ID register_time: "1234-12-12 12:12:12" // 注册时间(YYYY-MM-DD hh:mm:ss) online_day: 123 // 在线时长 continuous_online_day: 123 // 连续在线时长 - is_vip: 1 // 是否为VIP - vip_expired_time: 123123123 // VIP过期时间(时间戳) + is_vip: 1 // 是否为 VIP + vip_expired_time: 123123123 // VIP 过期时间(时间戳) ban_time: 123123123 // 封禁结束时间(时间戳) medal [ { @@ -178,28 +178,28 @@ data { "profile_info": { "flag": 1, // ? "scoreOrId": 1295971200, - "province": "省(自治区)", // IP归属地 - "city": "市", // IP归属地 - "district": "区(县)", // IP归属地 + "province": "省(自治区)", // IP 归属地 + "city": "市", // IP 归属地 + "district": "区(县)", // IP归 属地 }, - "country": "国家或地区" // IP归属地 + "country": "国家或地区" // IP 归属地 } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 勋章信息 message Medal_info { - uint64 id = 1; // 勋章ID + uint64 id = 1; // 勋章 ID string name = 2; // 勋章名称 uint64 sort = 5; // 勋章顺序 } message Remark_info { string remark_name = 1; // 备注名 - string phone_number = 2; // 手机号 - string extra_remark = 3; // 其他备注(格式为JSON,示例:'[{"key":"他是","value":"我的朋友"},{"key":"职业","value":"打工人"}]' + string phone = 2; // 手机号 + string extra_remark = 3; // 其他备注(格式为 JSON,示例:'[{"key":"他是","value":"我的朋友"},{"key":"职业","value":"打工人"}]' } message Profile_info { @@ -214,24 +214,24 @@ message Profile_info { // 获取用户信息 message get_user { - Status status = 1; // 状态码 - Data data = 2; //数据 + Status status = 1; + Data data = 2; // 数据 message Data { - string id = 1; // 用户id + string id = 1; // 用户 id string name = 2; // 用户名 - uint64 name_id = 3; // 名称ID - string avatar_url = 4; //头像URL - uint64 avatar_id = 5; // 头像ID + uint64 name_id = 3; // 名称 ID + string avatar_url = 4; //头像 URL + uint64 avatar_id = 5; // 头像 ID repeated Medal_info medal = 6; // 勋章信息 string register_time = 7; // 注册时间,格式: YYYY-MM-DD hh:mm:ss uint64 ban_time = 10; // 封禁结束时间(时间戳) uint64 online_day = 11; // 在线天数 uint64 continuous_online_day = 12; // 连续在线天数 - int32 is_vip = 13; // 是否为vip - uint64 vip_expired_time = 14; // VIP过期时间(时间戳) + int32 is_vip = 13; // 是否为 vip + uint64 vip_expired_time = 14; // VIP 过期时间(时间戳) Remark_info remark_info = 18; // 备注信息 Profile_info profile_info = 19; // 用户资料信息 - string ipGeo = 20; // IP归属地(国家) + string ip_geo = 20; // IP归属地(国家) } } ``` @@ -252,29 +252,29 @@ POST /v1/user/medal ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } medal { - id: 1 // 勋章ID + id: 1 // 勋章 ID name: "测试勋章" // 勋章名称 sort: 100 // 勋章顺序 } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 勋章 message medal { - Status status = 1; // 状态信息 + Status status = 1; repeated Medal_info medal = 2; // 勋章信息 } // 勋章信息 message Medal_info { - uint64 id = 1; // 勋章ID + uint64 id = 1; // 勋章 ID string name = 2; // 勋章名称 uint64 sort = 5; // 勋章顺序 } @@ -298,7 +298,7 @@ POST /v1/user/edit-nickname name: "123" // 用户名称 ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_nickname_send { @@ -312,18 +312,18 @@ message edit_nickname_send { ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 更改名称状态信息 message edit_nickname { - Status status = 1; // 状态信息 + Status status = 1; } ``` @@ -342,10 +342,10 @@ POST /v1/user/edit-avatar 请求体: ```ProtoBuf -url: "https://..." // 用户头像url +url: "https://..." // 用户头像 url ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto message edit_avatar_send { @@ -359,18 +359,18 @@ message edit_avatar_send { ```ProtoBuf status { - number: 114514 - code: 1 // 请求状态码,1为正常 - msg: "success" // 返回消息 + request_id: 114514 + code: 1 + msg: "success" } ``` -::: details ProtoBuf数据结构 +::: details ProtoBuf 数据结构 ```proto // 更改名称状态信息 message edit_avatar { - Status status = 1; // 状态信息 + Status status = 1; } ``` @@ -382,7 +382,7 @@ POST /v1/user/email-login 请求体: -```JSONC +```JSON { "email": "123456@example.com", // 登录邮箱 "password": "123456", // 登录密码 @@ -393,13 +393,13 @@ POST /v1/user/email-login 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "token": "abcdefg1-xxxx-xxxx-xxxxxxxxxx" // 登录效验令牌 + "token": "abcdefg1-xxxx-xxxx-xxxxxxxxxx" // 账号 token }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -415,18 +415,18 @@ POST /v1/user/logout 请求体: -```JSONC +```JSON { - "device-id": "123123123" // 设备ID + "device-id": "123123123" // 设备 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -442,7 +442,7 @@ POST /v1/user/recommend-category-list 请求体: -```JSONC +```JSON { "appChannel": "default" } @@ -450,9 +450,9 @@ POST /v1/user/recommend-category-list 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 + "code": 1, "data": { "categories": [ // 群聊类别 "精选", @@ -464,7 +464,7 @@ POST /v1/user/recommend-category-list "资讯订阅" ] }, - "msg": "success" // 状态信息 + "msg": "success" } ``` @@ -480,7 +480,7 @@ POST /v1/user/recommend-list 请求体: -```JSONC +```JSON { "category": "精选", // 群聊类别 "keyword": "", // 关键词 @@ -491,13 +491,13 @@ POST /v1/user/recommend-list 响应体: -```JSONC +```JSON { - "code": 1, // 状态码,正常为1 + "code": 1, "data": { "groupList": [ { - "chatId": "123", // 群聊id + "chatId": "123", // 群聊 id "banId": 0, // 顾名思义 "nickname": "测试群聊名称", // 群聊名字 "introduction": "测试群聊简介", // 群聊介绍 @@ -508,7 +508,7 @@ POST /v1/user/recommend-list // ... ] }, - "msg": "success" // 状态信息 + "msg": "success" } ``` @@ -524,27 +524,27 @@ POST /v1/user/recommend 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "botList": [ { - "chatId": "123", // 机器人id + "chatId": "123", // 机器人 id "chatType": "3", // 识别对象类别,1-用户,2-群聊,3-机器人 "headcount": "123", // 使用人数 "nickname": "测试机器人名称", // 机器人名称 "introduction": "测试机器人简介", // 机器人简介 "introductions": "", - "avatarUrl": "https://...", // 机器人头像url + "avatarUrl": "https://...", // 机器人头像 url "isAdd": 1, // 是否添加(1为可添加,0为不可添加) - "isApply": 0, // 是否应用 - "alwaysAgree": 0 // 是否总是同意 + "isApply": 0, // 是否启用 + "alwaysAgree": 0 // 是否自动进群 } // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -560,7 +560,7 @@ POST /v1/user/module-ignore-info 请求体: -```JSONC +```JSON { "deviceId": "1234" } @@ -568,19 +568,19 @@ POST /v1/user/module-ignore-info 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "ignore": { - "id": 0, // 可能是模块设置id - "userId": "1234567", // 用户id + "id": 0, // 可能是模块设置 id + "userId": "1234567", // 用户 id "updateTime": 123455660, // 更新时间戳 - "deviceId": "1234", // 设备id - "ignore": ",30,20,10" // 模块id,10-隐藏社区页面,20-隐藏发现页面,30-精简我的界面 + "deviceId": "1234", // 设备 id + "ignore": ",30,20,10" // 模块id: 10-隐藏社区页面,20-隐藏发现页面,30-精简我的界面 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -596,7 +596,7 @@ POST /v1/user/module-ignore 请求体: -```JSONC +```JSON { "deviceId": "1234", "ignore": ",30,20,10" // 模块id,10-隐藏社区页面,20-隐藏发现页面,30-精简我的界面 @@ -605,10 +605,10 @@ POST /v1/user/module-ignore 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -624,7 +624,7 @@ POST /v1/user/notification-status 请求体: -```JSONC +```JSON { "deviceId": "1114514", // 设备id "registrationId": "114514" // 注册id @@ -633,15 +633,15 @@ POST /v1/user/notification-status 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "notification": { // 通知json - "id": 110061, // 注册id - "userId": "114514", // 用户id - "deviceId": "114514", // 设备id - "registrationId": "114514", // 通知注册id + "notification": { // 通知 json + "id": 110061, // 注册 id + "userId": "114514", // 用户 id + "deviceId": "114514", // 设备 id + "registrationId": "114514", // 通知注册 id "isOpen": 1, // 是否打开系统消息通知(设置”系统消息通知“选项可控制这个数值,1-打开,0-关闭) "type": 2, // 类型 "delFlag": 0, @@ -649,7 +649,7 @@ POST /v1/user/notification-status "updateTime": 1231231230 // 更新时间戳 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -665,10 +665,10 @@ POST /v1/user/notification-info 请求体: -```JSONC +```JSON { - "deviceId": "114514", // 设备id - "registrationId": "114514", // 注册通知id + "deviceId": "114514", // 设备 id + "registrationId": "114514", // 注册通知 id "isOpen": 1, // // 是否打开系统消息通知(设置”系统消息通知“选项可控制这个数值,1-打开,0-关闭) "type": 2 // 类型 } @@ -676,10 +676,10 @@ POST /v1/user/notification-info 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -695,7 +695,7 @@ POST /v1/user/gold-coin-increase-decrease-record 请求体: -```JSONC +```JSON { "size": 20, // 尺寸 "page": 1 // 页数 @@ -704,14 +704,14 @@ POST /v1/user/gold-coin-increase-decrease-record 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "goldCoinRecord": [ { - "id": 193275, // 金币记录id - "userId": "用户id", + "id": 193275, // 金币记录 id + "userId": "用户 id", "typ": 8, // 类型 "beforeAmount": 55.01, // 之前金币数量 "afterAmount": 57.01, // 之后的金币数量 @@ -722,9 +722,9 @@ POST /v1/user/gold-coin-increase-decrease-record } // ... ], - "total": 243 // 总共的金币记录 + "total": 243 // 金币记录的总数量 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -732,6 +732,8 @@ POST /v1/user/gold-coin-increase-decrease-record POST /v1/user/bing-phone +!!不要问为什么是 bing,我也不知道.!! + 请求头: | 名称 | 必须 | 备注 | @@ -740,7 +742,7 @@ POST /v1/user/bing-phone 请求体: -```JSONC +```JSON { "phone": "12312311230", // 欲绑定手机号 "captcha": "123123" // 短信验证码 @@ -749,10 +751,10 @@ POST /v1/user/bing-phone 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -760,6 +762,8 @@ POST /v1/user/bing-phone POST /v1/user/bing-email +!!不要问为什么是 bing,我也不知道.!! + 请求头: | 名称 | 必须 | 备注 | @@ -768,7 +772,7 @@ POST /v1/user/bing-email 请求体: -```JSONC +```JSON { "email": "123@123.com", // 欲绑定邮箱 "captcha": "123123" // 邮件验证码 @@ -777,10 +781,10 @@ POST /v1/user/bing-email 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -796,7 +800,7 @@ POST /v1/user/change-phone-check 请求体: -```JSONC +```JSON { "phone": "12312341230", // 欲绑定手机号 "captcha": "123123" // 短信验证码 @@ -805,10 +809,10 @@ POST /v1/user/change-phone-check 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -824,7 +828,7 @@ POST /v1/user/change-email-check 请求体: -```JSONC +```JSON { "email": "123@123.com", // 欲绑定邮箱 "captcha": "123123" // 邮件验证码 @@ -833,10 +837,10 @@ POST /v1/user/change-email-check 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -846,7 +850,7 @@ POST /v1/user/forget-password 请求体: -```JSONC +```JSON { "email": "123@123.com", // 欲绑定邮箱 "captcha": "123123", // 邮件验证码 @@ -856,10 +860,10 @@ POST /v1/user/forget-password 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -875,10 +879,10 @@ POST /v1/user/save-user-data 请求体: -```JSONC +```JSON { "introduction": "111", // 个人简介 - "gender": 3, // 性别,1-男,2-女,3-其他 + "gender": 3, // 性别: 1-男,2-女,3-其他 "birthday": 1231231230, // 生日时间戳 "province": "北京市", // 所在地省份 "city": "北京城区", // 所在地城市 @@ -889,10 +893,10 @@ POST /v1/user/save-user-data 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -908,17 +912,17 @@ POST /v1/user/get-user-data 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "data": { - "id": 123, // 个人简介ID - "userId": "123", // 用户ID + "id": 123, // 个人简介 ID + "userId": "123", // 用户 ID "lastLoginTime": 1231231230, // 最后登录时间戳 "update_time": 1231231230, // 个人简介最后更新时间戳 "introduction": "测试个人简介", // 个人简介 - "gender": 3, // 性别,1-男,2-女,3-其他 + "gender": 3, // 性别: 1-男,2-女,3-其他 "birthday": 1231231230, // 生日时间戳 "province": "北京市", // 所在地省份 "city": "北京城区", // 所在地城市 @@ -926,7 +930,7 @@ POST /v1/user/get-user-data "locationCode": "110101" // 所在地邮政编码 } }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -942,16 +946,16 @@ POST /v1/user/get-user-show-adv 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { - "androidCodeId": "123", // Android代码ID + "androidCodeId": "123", // Android ID "bottomHeight": 123, // 底部高度 - "iosCodeId": "123", // IOS代码ID - "isShow": 0 // 是否显示,0-不显示,1-显示 + "iosCodeId": "123", // IOS ID + "isShow": 0 // 是否显示: 0-不显示,1-显示 }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -967,21 +971,21 @@ POST /v1/user/save-user-remarks 请求体: -```JSONC +```JSON { - "friendId": "123123123", // 好友ID + "friendId": "123123123", // 好友 ID "name": "测试好友备注名称", // 备注名称 "phone": "123123123", // 备注手机号 - "others": "[{\"key\":\"123\",\"value\":\"123\"}]" // 更多备注,需将数据按照此格式转义后填入 + "others": "[{\"key\":\"123\",\"value\":\"123\"}]" // 更多备注,需将数据转义后填入 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -989,6 +993,8 @@ POST /v1/user/save-user-remarks POST /v1/user/cancel-user +!!谁 TMD 想出来的这种命名?!! + 请求头: | 名称 | 必须 | 备注 | @@ -997,7 +1003,7 @@ POST /v1/user/cancel-user 请求体: -```JSONC +```JSON { "phone": "123123123", // 手机号,手机号与邮箱之中只要有一个就行 "email": "123123123@123.com", // 邮箱,手机号与邮箱之中只要有一个就行 @@ -1007,10 +1013,10 @@ POST /v1/user/cancel-user 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` @@ -1026,17 +1032,17 @@ POST /v1/user/device-offline 请求体: -```JSONC +```JSON { - "deviceId": "123123123123123" // 设备ID,为登陆时填写的设备ID + "deviceId": "123123123123123" // 设备 ID,为登陆时填写的设备 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回状态消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/verification.md b/src/api/v1/verification.md index 99396dae..b0426a3e 100644 --- a/src/api/v1/verification.md +++ b/src/api/v1/verification.md @@ -11,21 +11,21 @@ POST /v1/verification/get-verification-code 请求体: -```JSONC +```JSON { "mobile": "12312312300", // 手机号 "code": "123123", // 人机验证校验码 - "id": "123", // 人机验证ID - "platform": "windows" // 登录平台名称,一般为windows,web等可自定义 + "id": "123", // 人机验证 ID + "platform": "windows" // 登录平台名称,一般为 windows,web 等可自定义,后端不校验 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` @@ -35,20 +35,20 @@ POST /v1/verification/get-email-verification-code 请求体: -```JSONC +```JSON { "email": "123@123.123", // 邮箱 - "typ": "forget_password", // 验证类别,forget_password-更改密码验证,其他所有验证都为空 + "typ": "forget_password", // 验证类别: forget_password-更改密码验证,其他所有验证都为空 "code": "123123", // 人机验证校验码 - "id": "123" // 人机验证ID + "id": "123" // 人机验证 ID } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 - "msg": "success" // 返回消息 + "code": 1, + "msg": "success" } ``` diff --git a/src/api/v1/vip.md b/src/api/v1/vip.md index d9484652..8978f116 100644 --- a/src/api/v1/vip.md +++ b/src/api/v1/vip.md @@ -17,33 +17,33 @@ POST /v1/vip/vip-product-list 请求体: -```JSONC +```JSON { - "platform": "Web" // 平台标识码,为web/Windows/android等 + "platform": "Web" // 平台标识码: 可选 web/Windows/android 等 } ``` 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 1, // 商品id + "id": 1, // 商品 id "name": "VIP月付", // 商品名 "description": "1个月", // 商品描述 "price": 10, // 商品价格(单位为人民币(元) "priceOriginal": 20, // 商品原价 - "day": 31, // vip持续时间 - "productId": "" // 产品id(? - } + "day": 31, // vip 持续时间 + "productId": "" // 产品 id(? + }, // ... ], "qrCodeUrl": "https://www.yhchat.com/" // 二维码(QRCode)获取地址(? }, - "msg": "success" // 返回消息 + "msg": "success" } ``` @@ -59,21 +59,21 @@ GET /v1/vip/vip-benefits-list 响应体: -```JSONC +```JSON { - "code": 1, // 请求状态码,1为正常 + "code": 1, "data": { "list": [ { - "id": 1, // 特权id + "id": 1, // 特权 id "name": "尊贵身份标识", // 特权主名 "description": "贵族身份的象征", // 特权描述 "target": "", // 针对xxx "sort": 100 // 排序 - } + }, // ... ] }, - "msg": "success" // 返回消息 + "msg": "success" } ```