From c415fa1c0cb25ff20d06da7ca85e9f9ad7e9ef97 Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Sun, 17 Jul 2022 14:21:16 +0300 Subject: [PATCH] Updated display features --- BUILDS/net6.0/Music Commands.dll | Bin 16896 -> 16896 bytes BUILDS/net6.0/PluginManager.dll | Bin 61952 -> 62976 bytes .../Plugins/Commands/Music Commands.dll | Bin 0 -> 16896 bytes .../net6.0/Plugins/Commands/MusicCommands.dll | Bin 17920 -> 0 bytes DiscordBot/Program.cs | 30 ++- MusicCommands/Leave.cs | 14 +- MusicCommands/MusicPlayer.cs | 60 +---- PluginManager/Config.cs | 2 +- PluginManager/Items/Command.cs | 7 +- PluginManager/Items/ConsoleCommandsHandler.cs | 5 +- .../Online/Helpers/OnlineFunctions.cs | 28 ++- PluginManager/Online/PluginsManager.cs | 20 +- PluginManager/Online/ServerCom.cs | 23 +- PluginManager/Others/Console Utilities.cs | 221 ++++++++++++------ PluginManager/Others/Enums.cs | 4 +- PluginManager/Others/Functions.cs | 5 + 16 files changed, 242 insertions(+), 177 deletions(-) create mode 100644 BUILDS/net6.0/Plugins/Commands/Music Commands.dll delete mode 100644 BUILDS/net6.0/Plugins/Commands/MusicCommands.dll diff --git a/BUILDS/net6.0/Music Commands.dll b/BUILDS/net6.0/Music Commands.dll index 0771eac46348bf9ff005e4e1f717546a8c4b14e5..509f1db2ef622ae424c97cd4e9222230820009ad 100644 GIT binary patch delta 4049 zcmb7H3vg7`8UD_>yZ7F`o7d*CAsa}tc@TsI5_tp~Ua7GNQ3Me*T7`ht!7wFCI#$GN z5KyUD4cAtSc9iOr{JxDnn})0J_ViwqHMJEuAN(u$t?HNvQy0Q|KQP<~TmgFjEtR*n7^JxAsHf6^1wbU$HT zr<(lDR&!(|bo@pa2>A!B-C22c8gtkq1jJS~`;Ue8sabui!-Hx@w*n}O=^Jub_UsyW z4D7$Sh%JTCbKdQ*jSZM>=p&O!b3VcX4mAUGb{5%m)|W_yq?H&bm`!Y zGD*EAMvOWBWA2Dp({Pyv;P5+#Ynk77$lVuG1%7Yl-NdG>6{?``$*dB^%iipFwHoH{ z$Sqc9^c~F2RjRP>?Y!x{_@fHmopMh$P|?NKGctPj2%fETmDrx^{F;K}nP_b|U zep?Dqf{IxSXE*bD#6K_Ipl16U;NfQlEv}y_cLUe8b+Z zb8){O5sBmK=%5?NN!{Yb@vzt8*$6e8Ms-eyVrxj#@0-k5X_nw~m{KKpL%&byLNu^l zq4N^W7Ex1<(VU`(pEyVS{e^`oncO{5>9f;xI~Zwja`8;$L*`4Y4i(2{yT!{wj^3`b z@ODJ-1%uC;%z!7E^IX9znUCW(SM=Q`^RgxRHsk&e(?3jix%~_I%krsDL9RI{va%!f zj1{_74pu8+mU#qn@cXbZM;>Y_ce!aMzgG_8QDGkV>`BdZi6UXxEv6PlIlJcIMbjmU zF@_y+WLy-f@vvw(jk6HiXxNP$Ue6)Z4g1irVQ4z7R)OZz*ksIN(?$Aut+0Zahb`W2 z;s$#UahJQ7SRCE2lUS<{XbT1QVPae#)^-XR(bu$%zgZ`UXS#0_Q<3-Bs1~P)bMe7x z)sLha9VGrsYsKEoR7kNxQ zOf!Y&P|T+PozNFsmT}Z%$hz-FCF3Vdyc@EB!zO;u#FpC4jHgCXQ=_D+%<{5V-~frN zQtWG4ehv*^+I}YWb2(~W8Gj?JbI-K4DTRvz)@bF>rY&H9u($d95=GWNx7mLuQB-@t zonwXZzNwyw^y+OYj1L0V;|TjCU|C)k4VkssHI8pbMvr$d}||UH*Bpt z(z!`TuyNe+`$+&1xyTM@B=1>F>DE#7{>6!fQexY4+KmMV|Xad zjA0C)7`7Ik^DV0&g_eq;n;*x8hNagV$E5)i`#6>cOzh)W9x$QE2L((MThNY$DC<|($EJw`*e^be*%oP6!Yi?fP z=Dx!pC>hbVi5YG~r{_I69<-}3%8%nQ<4cb6XOy0w+UF`hR`R+Q5j~ti%t5`uDF&Mi z&NevTV5`C9L>t!=3$T$`j2@HO3R&1z$erJBGHnJ2u*a&w0N(QIiBs(9h^Rd&>l|Jr zm0?7!>PqWM#(dX_r_64^cboBZ;ZEWNyAy3njN4Q*cd_Mans+PXQC<#lOZX0AL-Y>p zq0L=HQSQN3=P8rvC;nSKgCF1#cNcmwNvHZbms0&A$@M%F3}C%;n7EGdA-t+&j#9lw zoiwpjBTA|KkIz1Yg`TT#C9-GQeeshR5yZpUV#R1t2+Gen8Y>~is^(tN6*t&=uo%plBa*FPx27Wz4O!0(|Qr_<7ac3enD0B`7`9e zZBF6buY=EJ+?+qF?u|%JPU}OukN;Qa-&QrT@+4X@S+(L^eiy4{ILL2>UWSWxA0FlP zakl7tv+B5GE$Cd?x2tx*>f2CX5z4vz#4BsJA6-84>1Qu$eEyX~fA;$)9?i^hTvx{y z=GMg)YTftXr12sD)vx5_UJ?8kTV~ZIaam6?t~&f!V{c#9)PGv~&MAGdnI~0Go%0{D C#pMD3 delta 3907 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 literal 61952 zcmcG%349b)@&{hsJ=1e0WR6Tu$mAjeA>3j>!~}?dAU6t%LVzd{%-~G$8U_==0|gZY zS6L76z>7UpTwSjv-uH^vva29??0W7`c6Ghu|6BEXCKHJ6@AviRj*#XdiClZ z{knTN{-mqOAR-&CpMD~G2r2*73H)WyhV1N;hqGy?>*dmiv?(u_&R*Ia53h(tPmeX8 z8D8Aj(h_YAFKP=MG8>@wPx$4EdtHeeQWQK93xVMoPf<|L!QePfg6x_x#Za+h&p$`^qB*^y3cNl zz$MjvtIsn0j!19Lar&H`_uU_&t#l&hh%Zoa3=Y zFuIUaZuqkzVb00+WphrJErLcO$E6##2;#W9Z-01guuhBEs-FBC>eS$3uV3rTWd}RF z)uX9fCzL|}?dSvh_pU|X>a+lL!#wn@3XHxGt0~lD zux&*|2!sqeMG@6no)vQgGU|y|p-|sU3nRkl9!EMs9Y!Ph;_V19w;AaNsU!xe&CE?s z;A9mO2r3V(hOgMZAt-|m^~G1KGSysWoGOEXk1|Z43?_+cMMP>K)BmIl17&zb2QvHE z47QA+{$sm1@j)yi^=6@7gbVy)MBqQuT}>uTIxG+4s#{(yWDr}v_*!M}V77M(8>%Od zS7uKZvzZ68Q4h>!A~KXK4-8gwGlB_qM~8tYRTm*n#$XVkLw!_I<1VT8l&tdVq3Ce% zu4vw{7=4_D0!M%h*s3S`ZIKa-+9?z;tNZ)xK66X-NN`*}b5o}taQGYpvVnJH+~hO! z=JKHQ*{^8swDBOUd5)k5O>)=#ZeK6ItuutC6-7saLGPq0bJea#@M3^UeQxr(Lt8@8 zQIIh^wSdRx8Q^k6j^ZNK4yQsw0dMUwC33GL@t+8#ZA8yL{eF zg>zw5FJG^k_o?=+RAH-4-c6`0$Coo8LNSEMiUp@Uu3|+pW#Fe7JTv6gpQ5fwjO0rTE#>I+~>=ZQ%ltU3-GP6PfTkY*I z$mO$bK{Wg9%6XkO_8v!ZKk!2N(XpsC;6%_yF(J4EE}v^aHdEt4MH<*7$OTMtMvny% zg#}nms*C*Y2qqnOz(WXpPi!74k4|ESNys`5Sj{`|p}RALmZw7BXR02CvO+5@1uJomx3 zy!Y|N5wAR7PKB=IDxN*`WRepjiCK|n&jcr{I15uswoEBZM5dzz&u2DT23?qIe6%{u z88eXK@oSNpNMk3X(J?Fps^z>j%Op<+89}GG-Kywppzu8wAdg}ogxq~iJ$4=oic3xa zhYqc`^#54z1zq(@(ad^<@r(7Ig!aM_K9VkV>sK^;97dO+3~Y84OF(3V8!aXifD z#7LgPi7k05C-x-z)MjSek_$P_O`>*02^T<=z-TNyOsMq|b#u%iUdhjOY|f}-DHqg} z&72s?GdQs&5m8*na!zuSh!W^#LFh&!pqq&d-3Fb{b#VLQs21}Ds#p;%0E*e-`V9Q$ z3>-s0EptyAcVnlMLyo+;9zD$4morZ0p`=im8NAM#{rYm#5rtpead^d@?lU#6g4{;9 z3B45&Kf+gTv=Odyqm7N628|J(jBhD+7kI?05K_5IVd^I-4u^ zlM%r>=I$C#I>#{;Dw%VUWke8s)z(IieS;-~ijW__Nn+hdu7`doWMQ+@ycyg$V%E)f zf7LuSSJ&j|QOvyV=xPAHQ^S7Ps*r8Md}Gzu=Zwfe)~Pm)JWn8ath`n%FIr?!DtoLo z>0_grEa&#&)=*N_PL8i)w((Z6QN`*O$RWOd%}H(&LkB~Td5AB>5#oyp6{Kv}G0@SQ zb!=5SE`agLE4Y-NyowVec_k;g$qk&W;w-2_*gzE%k#>|&`(n1I59|7!(sd#0>fmB} z@(E6Ile;)s#XKm<7bQ$Yup{PpS91(H+84hoqfNi(QhE|m!1mn7i7k0QC-&q{PI8l| z5{g+6iqZM7j){ypMzuA}x_4yg{v#LElMi!ZBp=}2b~A#g0)!km2m(fBiXjLX zxF1szf`Cz#Vh938B*n0h$fZzD{ZGw^*>&LPw&Z12txR(5Lc?!7&iWxmNc;4}<;Zp8 z0Ktf?2iB_beX+iZxlXzDuXdY`Veevy|7idOqye}S#eE1aW+ErYi9@&T_G8;f`H-eaag*6APzQL?o0|gW-R*!j2k6g_KCIjR} zt^xFrBVY>!?A2%ZY(D!I>_vTMWD^%wE(~@Wvh^KL@dkuRWsrBjCRWi2(8e2c;Gt-p zq&_n`T96=bg-r@Ll@4r;H$x*_?XzR+icOBsc182hD=2;~*Z~*$T(4sA7DavqGIlCsoj@jc{c6MpHrVw*mY~>!JR+_?gVIG zAmAsTKYAysWY?HP`>>#^JtW_Y@gL$q&iQsCodG(GMS}Uy;F<-j03n0rOZb^f#t8{NTK9FaUs zkbe#GBfkMnvHO9>J_LyW7PLF|d78!q?e>^@r-?u}(R;ZFvrc3drge7|le(K6 zV9jRMPG&ujVx7ROKQQY-W|`54kSJ>%QB2R4xx5w`gjq_hsYdh|l*7KeC|0D?3L|Q=;brUu(+{a9&)~aEvlYvRZh7q-&v#&e`iVg`Qjbl5E0INSij?7;F0Mco`hSKprL9nuo zb0Vj61+fMepA3MV;JYlb3lfo~lGns}=dr5KyQ}(3O0cqxb1d;YSo{G7Z*rM`b}zGs z%c$x($EyAyi~q=Aqzz^Mr+b;dc9r2AtIP~Y#^y1&mCJn5z0BXb%5aWV=4%$$>;T6D ztUlPi%-daMIL9ipn8nXz@qcv}e}~1{PnB()V>SPJ7QYz)p4^|3P6I8sZ4Bs@bd=VPx?`&5M|UonTh8%*e9g#71VyInst6;>HI!Z=f|w` z8K{etVLkQ8QyQ#mm=6&|G=TLQse$cQmPE=S8O5}L+oM%D^?3o9*U9(BCdRZJ^W(;F z5!vK<%~%RWUW5crudqFJ<2=^h{b1ADFBozXhXWGagVwyO%BT{g4kDe=MO*_!xBTJ_RMJy>e~mg;ETy{|_`Jr*h#0L(jg#fQ{QI`JxS{iC;sA_T_fx zJ0jmOJKe7H+Ne;q3;V(8&?Q?)LBN=iVh92TrU@k>2-?nb`$ojWaGpCt>d{MVJ%{UP zuBRkyv93z9@)W0x=!<%tPfpB}-FY4yryhm1`ErnaUK)yE4}hnaUOlo7EJZmgarkWM z+mzNv&b+x^=Q7hc3CkkZkD7-ZSUg8r%H*&%t`y|f7SCGOaDY$-a%dTLdjm&(}D zJ%g&JSvh`pi6=k8Gl}1Ai(mj^o^Y#YC2B%(+auVXU}ka0cCiwR8~KQ9>8h%0Xm-uA zJVyBp=m?3~A5cJI)?RxPH%d?Z$SRfr;Q2`q_gPFAMmhnLKLJ!1>FUH;GP;hjB~wqZ zNa&0xZln1CfvF%LZ{x;@kGHGQ5Qlk#>+ToOLSM#296#u^;LEte#37@ zuz+D|eoBnvT#Ob@I&%?mYEVc~Xmfy_#OqaVn9WHNuOzwkRg8A#=Cia|6m^3E>o}Kt zSWYNvynd$=@;R&V7K~?KO~Az?N0bLu^Hy;YOO+Vtb45I?Y+vNRiaH`*mh7K7m*$}# z`ryL8h{A`>rFJ?^CxYuRx15AwhkkP6Y&&nDquN~?M6ueZ0ML;6$V4FGCessp3*ivY zLQUuEiBlAx9~#C!$l#v}enS;*-E=#Wb_29mshp;fsRcNoxx9ZY_&UKD~x5M^aSUG^u%Hz76L{CtTl>ep-=Ei z5*|HZpNH-b0jW7wLWG^5`%He)W7Bb@rk<*qekUL1B1T5R9eRRuIe<9r%pH?j5V$bZ z!R6?CJ;5fa`p=jv_UVZQV96Wwe{0OJx}ChSAts!03y_E1VlZta2((gH&WoVd(1(eaR)PK~Hc}8Sp0A zcRp_j=X02CM%}`%9h3%Sp_5WU<$duHPWV2-@UqtV!?Jr^=gSa#{cx4SzVKnOX``2H zMA&pAHcy8kZZmHLZ`20EU1xw!9mFCg;Z5PpfdzeGe=}zz>fOmRfl(@`ZPkwI$+efE zMyObh9681v`7HXB`-^3xB`C!YajKIoAoWl(${I3rqou5P1+#hQXs^{!zVMg&$lHdyba&r*4jzL3RX<47#XK3g)z zHN~#NAhGmSadm$Xn)9L&R^5-mZ@7zaN~tHfS=h4i8L>1G?=bX-glvywP<#$iYf!NF zc~G3sX~3bY$H69s&|rx#9KJv!=klQ7G-H>>P*Ft~u8U?N%r8|I1z)FjzToNcRlGG!QRV8cXH+AyYg za%x4|L;dG48ovVU~`O2JgrC@@SLxM=w|1vaK#Zg)!BaUjZlt`#^X3v6F zD51q{qOK}ZEf$+oA$A_yVTG7fl@Vf`*F%VP3n-qjtbpPPO9hnskbrWh1L`d?TLKCb zR!;%t?jBHV?AeGY?zgiK4=LpUajS&Xbr~VWT<$r^P4^sA7${cQ@yx(7oLbMi5e!VF zHpS8+85h`te8PdbFUae47vGuz>vwRU5d8~R6)sHggjy-giwM%|aV-PS2BH8s|1p0) zKt0kMGx(f$G{)XBNLL}v)Uy|I=R?nlXhx=;Uc9>1oX;)BKSMAEh3-H59Yc=)jS z*r2~cU#-l?2^fgsyt<4HO{@k~cg&0lQ_W;n7H{=rs>M?O8ZY$&F?P;}2QT2_N~j<{ z2+U-g;&2j**NJPH+rR) zy$&hv;Ef3GyKo2Jq9-^9ckrBKtW8`jbqBAEQQd@Hj@;^s+Mu#kl%@x_oMs%BZH;k0 zi{cTr^ARcyclXZ-Lr<(n&+#os=CKCOdF^zhPBcpVwgDoR-{5C;Ks5nTbrlyK$~UV= z07UCyKc7C0MQWWsaY@|tU&jeNaRpMj=|>^#1ouFjp5RQ}_jA&ji^)T61f?XDjfb-2 zCN8fhI7x0~JeXoJ6>VUdtCb8VS2QQDVJei|jHLE2+Eb&glbGFK#x8r1!*3^gn(y5ZPZWmxkjNa*i-`kQ&vU$;M#6@pBnGdC zy>2sK_S`6L;=vg@2NzZda^b4>R?nz?5S-dM%+eFTM&2RO$tP_Y(aAb7PVeCa5x51Z zoU{#-=-g#zEu4v=%1K6aN=Yb_=)8r?>j_ShH!vPdS}dkibl%APIJV{P^Wva*uuh=eh6Jjg&f~5Je_arTdeJ5#QEZdFzElFh_k5ke|B!w%0}>VYS+lNDs%` zAdf7z2VWa3LZl>bXI6qeW!<5V#n>9|{Ur#}w-h${8 zn}SKsuFg_+7Q}{fyeLcYFb+$wS<|Z<$;Wzpj0Y~et1vc#OQaMO#zrXx622m#A_fEQ zN;qA05#Q_JBS zl+}GU$Vzw7ebPqm8XP(F+(lWcix3^Cjw?kMG0{^OiA}+zl2u{)bA7@emi?dmgjWDo zi$o0|9*H4dSWa1SUK><)2L&A`01zruX72%;)ppL)mk&5OngB#=>=uF z!fKSG`*M<4m)caYLqGGY62GH-CY_~|2_^g852NIYi8 zJ`&fV>yQDP-MD&Khx+5Od~*`_N$Q;gfY1}1y{sG=`1|5d!6=qP zeocqjB}?SZW(aa?9JrPenxi6xatFXX3&piQdOmfQ$c_ zUxe#ZTqgP<#Rn<-6&$t^&aZlk6ZD;p?nU0w(svKRHt9Qi?I$R#$1y3J$w$G3b2!OM zas((mB=M#2I5x>nsMK1+PxbIlcX;MN>33Zy7;LP|;bZvYV_wQq@E0u>Kqh64S z&*r?xr5=WOWsXa{ieS%pi9t_1EE10hWKBW-%C5(*=Vqbn|HKKlOn*cwTc#tV>(L=- z9cQBJImzgHE}80jWoXHgjAqL~l2#u+jM!Zvao4^YIqwxKg5pigG}88_d*q)3S=cuJ1OV{2c|4*WSON91G{ zN&}L znJ?{hyCG*zxW9i9vgiwb$0=`K{s=x`Pt;->#OMPwldmIRPbi2nU`w(IDaLMQaBb+t zmxccdU|#eTSQb4MfNvfaAhm97xiXA|zj1xr(MC7ja)z>g(QLyC6sX{cD|O1{nFsdgC%I4lMT&7*W~7iVG@ z#7SrF#P01fBByh8d$_!w;3WAM#)HB_iw5#Dy@G+yP{%1u4;%1jipeB ztv_#1`T1Nc#6@A^&rlm}My`5Hz>ir!N4VEC=)9kkcKGbccewIYL+oe>1|=F2L&bW6 zGcgucahfq#aam~lA84b!IDqEmls(&N?u7H>XQ0kFjz!(czk-=*PMCi{LQg36Yslnx z;?zXi^%$c;FG$;GcDK(=+lRs_`|uQ_C;QS*G1#&$=V1!D?5uX&4YOsrGfl=1+N*CV|!7Z*Fj%vm1uOeD~ead|fy63*syDbCb zDupSLLl)c}>+@i;We|bLCCdEON<VPfXM3=k`i#EEVr$Q13hOX#BMl9Q4 z3sxO`Q?K4!)w{j9n%44*-n8z(YA-_5NWGXVjl~;6(=exDosic_#SkM;y_PGV`3#}h zP!FxZYo=_PdZ`9mPQ2KDs$#RD8SH(1p^mMsxfAa}+Pj$=yBbBT=ezx3hKkiE>E=aR zFE&fZPI-QoE_i<e%HXZ7y~@&h2Z>78&(92 zaKo0P+40mp5c>n_G%^gV?j6I2?JJB}9boohPX$Z7)(7&agWu^&*VS_!DGO9xvsrQX zx^DVk*QLw8axBJB{1f;T-{18^+mb(`t@ym4lapM24F@0IF%NH~jzJi)ANjrR;Yi1E zSuA$xvYIAk@p=(|yQg!KnVX^#L8w&E#`Nmm z%&0>tH;~vqw9ZuDxkym-mwhlIh0rfD7Zi5d@aRgfo(^%hk-x=b6l{rogkpKo1UePJ zvVb4v$U+4a`xm>)QtIgTEjXA>{M^IU};3Sr-cZ-;Z)S=OwSpE_ghHceO)O*(USmYR*`b9!iI4<)hAui|!A z55y?O0hl|>k??txtZOd4n@g>)NOHP2%dVZa}cS=L$;(&f7kc*_Qwb=M5ealQpUnZQ2L6JH{_(E0Y-b>QiVuRtd10OC{GTV|zv zFtqwpa5APrY*o$pa{!fXoTI+6L{RF<>2El-3Vcpk5{2HgzfCcy`Kf~Ny(KQo3_V?Mx>U-+f_@r>HE zuqf_Ke&Pgs6PZHz1!7D%*tE=)cLMpggatA-y<9AHgT60c?z2UcC`i3IEN3cRZ0nU_ zYkWFrS&Z_-hwaNuDsmDXC+*-l$!#{6Xc+bpvZ?bT^<`YuL3O)R4T0Ko41f**^czoW zyyxH-|L|GGQVdMB#_ZjU%^~*aETFzQCBy;y4{hIP<9cNB^_K|PjHg7Gagi|1QU5% z@Uo)Zyc`E@Y>xagh(v>Y?ct}`O=yhukUd@ZD|^kCVOIA)t%u z(3TkQn$$Z5cqNIe18-%v#pAmse(<fZmBGc-60IT zK5FUfs>2~)pH$l=xg~NjHy$Ttw(2AF*gYtvisWr68Ke#$4yDn5)(@OWu~fF6U?qG! zVcjk9E0Le`=0ZI{5ohB83SP_X>L&;K2`d@;>2W(dgfsa83a1%?&1IoY?&f-E(a(4d z&r%00OpB)-s@`;7jmZX62)irubC&8s=>lnw$&bn9WfaK#N+)(NT$XzH%D%p$xnNkS zQj)(#9tX>h=;0Ujq$~0fNd`ZL;s+^F%xDyQK%CB&WNb%L(iu;rynb)y;|}FeZ_A?5Gp;*r0&@-W1PjF@cke>#Mj#voL5>_-5vJg=4lqI~9(6^RB#?-8~$$ z)8ROXO;F*O-E%l*t8i3buqmTp!60r>1sYuwN%Kagc?eX?(s3ys4{toW8R>`T^!Ndc zo+Mt~!()}>f3B^ZT?UVnERK4D={#BB6n^;eGk$C9GM;skvTQ1;PV+smGR~i~p(d5} zK4V# z+;G_mz#GqvEoYZ>+X!&Jweo+2?#y@})#vx6Oe#v7)9mV|IVb0 zx#Do|Mb;r|P*G6&9|`-BNsbsKJYK9pbr~c_ZNam?eR(*I@GEX-Xhzq*(_-Z^OGPMa z;?a!Pz5IOoBk>=UMHV?caUtOuT&@%Q8_8B}?x^UqwkytHamuhE16dl7m$*zsB z`l!IZm!DrBnistsj+3C|ErhI1Y74>{aN~iQ^jJ~FnV3j9$yk}V zBy?FTQ+HFM>rtJ2JF!&(nO_(m!Y#4qO?#&2x{vtuzI#y0qRlR2S#+s?d?whYCxQYDYbx%#T zjx0lwtGI4Fx|5?s(YcDQGZ z|M9l+?BN3k4;(gl*pQLTvD0!uCpORJtBG2X?uY=N)f#JVIX%u2;nRus;8db~&Mf-o zZ1wI^`Gh%>#&fxI;22a^K6W`D6v>~CdQU9*gU6K(@;hx9|G*a4ehV(BCwN}ot^F%- zKQ6SJf5U~|M~XNVS?G`-rz$~;U8;N=j*%yMxRn(;3n_XQf5YU&oaf`F+#kXw{Y_v) zi1FKkM}z}ZT*|q_bK`j?4G2vtGU<_AhUW_0Ebu#l9|oC!R*=ii3vDhi>CFm;>w^rZ zR5C1qPLo~$bkpDMtML0*|fIrb;Ty#7hstmL_=OKOUCoJmzj9RzPaE;@`Txv zp#j!E+s5$ZJ`9g8=2B1eX8d?5Ra?UNJ>dB1wfy=VKi%J}KF6f*jO}H9`mJzY@5B7t z1z(@Txg(%6M7v8i7tErQu`_&E_8T}@7 zeW6K<;EggmGs5^Jsq5n2+4!BXUVgUrcZCew%j^3CmCNKf_Rc7@=95%jf}d+O36*0w^dDlBCAP?-C49z0M; z|Abdf`WT)ZMeeG}d7~&>O1&bH_Cv8)BK`8RM3KFMEnk?!{BOi>?+DBm`6B?w&{sb0 zQ;+T9e3RbG%XW{UG3Ctpq2%^*lb(S+Wz?L*oNJ_|ABp!KtYDpw2D06KX>-xU-hJsa z^m1PsThXTiQCG~pvo|oQXeRfYdj>&!PZR zLxj4!fT;?6h1rI350$r}T!nlikVDJL=2X;c75t_r?5wfPL0&(c+p*O*^=7Jua3Te& zB_S=6b@jh1`BV4_78j) z&(x6?^-@N;f6%K^j_>>$=t~^&vYls&W&fcALh;JkK;NPc&Z`#cJJi8colxJ?M?$rG zSn>z@M5x<@BJFdbo)yZkeSu%4nqC&})t7z@Rp1<_p;r}PS+7C8eB{U;(aSVXbC((? zv`ux7>UBcfLV*(mYJjQSO7|G#ZgDZZTVTF$-WGfq@RZ~uuCb7Dxf$*fyhiZXfTv_i za*jprcYPVYTYPMq|C`d|zs?BEjX%@rX0#DDH+N+ed zX3qeelYIhUnaG?8sL|!#{Wu}`t+&EHqwVj#3ym3V{{fuU)>O#wT)w1M~ zPSpl31m|TF*?$K7pX{j_dM2W-)+(;$U;5{`ff;S@4g3|8;cBD5t4nh( zBv%xC?!?+z#PIJSw)3TmH=xZZd<0i_%u;A*bue6Qd;rcP_K!2_Wo;wi zVUq@-zgW*ff9clx;1H%P0`vTw(6%2OuS+v@15>m(=p_c>O!eEUI^ zy2+dgyu17fsCQvL_sa%}eC4ZGOy;aM79m%~3D=ALQ+_iz8*FC*X7cX=aYKE$Ld6 zPUVN4_LQ|FXq@Y5dkC}ePP<9x1b%I2&Mi5-+qeVp@7jHUcT*e2{*AU%0e`eF2K>PG z82F=1=DQpW9}qai$@mpc&Yj?T0=2*C_yASH-kAYv6!+uaO z<)yo&)GgAw%oZ`ft*i#6E-K^P3#Av1m59AYdZE?9k@J&-Bj*x{v~Qh%28R$E_|YVZ zw~6!?I6j?wdA0F2@JH+&7$a|*nNh85cpteO11$4V&h#)AJi0hP9OixAyfpQ1NX63B zRjBF0G{t#WE6RC#={KOZSX5i7=F{m`i@GlC@fmcFMg2A$@Y!gmqNF}MJtovf=b*e| zpPhI=gk7ie=)6);F9~%mU0+(|!<}C#=Uq#szQH~h4JcF8=FpKoFYU0Xn?hrJS;Vh5 zv7`~X4iED;SyWcuUaZp3S(Ki4tS^V`6-x4w&}2}>7L|o^J{o9ICzj6i`KivLJOw9% znr~72@sA?}>0FEYV}6q_M2}h&6~ujc^oB)c`BwSzX?B&W@5ZW&eFgLo?(wQI((@#nM+P6pRLzi0AkDzeN*I(tGT6VoJOiL|lUBOmg8SS*FFDq^b^@c?a z_x#>hPPNsl+(V(KeG%GZQMqMr_y$n%0G0QI?_J+OT53^`7k}g%Ogk)!%I9O>?5t6e zcNKr>8%9ek>K@0Bz7e!jsEzr3!+W(OX}^{Cr$XI-B-sY4a=Cu5e}^i7&N$$u=38!Y7{A}7)mp{}8A?neJaddQ+ab+7VIC1VIn zu5sSs-=I$?k462#zs^6Mf);fS@@7!6MXg2N463xKN4zg+GpWX+p7U<>&!iC+b$8MA z{#i7}q8=)`8Po)e8c}$ce>P3CsQSX+fSN0m8n<((QRSfxP51@U^Mq=5{v&ULej>G7 z)a8XttyhxH8Q$~p!=z7H)Iv~m=?9Ct*1N%+N5k>xTv`k2BwDU0s_@=vo=p4sP)KHt z2mJHtpitL3=Y=2jpF-bQ)M??T{in)L++Z|1waP#H7mx#w*O~HG?(r|A9HA~IZ@ET| z^np zvZTi5xs2lPnXJF{+Mst)+}bXR+t)??kLv}ki<(xFNlhutpzMo7m4PnF58(M#syftn z7HUXS_TE(w_*c=VV%fEbti4*2ibu2XM!FnxNRoC~R9+=h(~ssn%sHsKC&p5 zY@<(vQj+cTWrk!s?W$MhShAg-5b9#*^Hn1Q7t#wBwY%zQP_J85dr3oJ4ZUqqmzPWi z^?^n0gLl``XBPEI$wvQL`bJUoQ(#WuBHBET>r=K|N;h?*?i5P3_EH+(&}G@BbgWRS z+&bcat&csytzAd^ zm*nNNMJOe?o^G@9SaLl*G`&l5Jv}UxlH5Q~3blrA)#e8_(C&=9E9f1o9Ba9PX3y%< zas{0rl+tn~Ewu7j@=AJVUYF#Rv`;7{c@_Obs5LZ4TO7EGzO*PC_COnH;z?XiNp7Us zLMab!B-{Khog2v%N=aT#IaVImel>k|N|)r-^iQFb(i9xTN>DsroPT;4cur^s@zTKJTA92O>wzxX^P9;MmI_AYR=v?yiu z1L-_2_h6dha*w1bF4sYOrFLcY6ZCP0WlzwTmSy+T=D-s)@pLY_24|eV4m?S-Eb0sG zmcUcA(4y|JB?3>=OBUrY6M^TccBv}&InGaBrdEp@XKoI>Ogk;g@7Nr8g{WCcJ`U>7 zw92AJIX4GhrL7kAE8KnUrt8j7lG9yx1$NUtLMdOrPCKo4M zr6g~%^4>8Q2VSQ;Eo!|(qc_N0&gGQk8`MjvHFT!7Iq(Mc&d7U{`dWFbwR;0^(#VXw zw`i=DcQx|fqB$9Pf1!m!sVM&o6`#rVsrl?L)JG^)`yToCT2eFL9$LGyOL7lgER>S` zD_v#f@pu4rPM73g8I?cWTZX#hilb3Mgdg>Cu0j4RK1K@RZfmh#ept+T2M;I*$d}BAdT-Nf2;Geo!at}1HZEX3$QkLoB zV_$_Db(~SKOt`44bq7oNgzA9Q-cZ2aQ@HZ~&%sa8BAu?3Qa#Hk-{4#q^`>x^%*1gb zB)xn%RDIgBX4MuACk$-E%3^NO0pKTCMCpVp@r3Z!7U{C9R||u2NiOxXN)=;OdL33Rgc|{c%;}8i;EUuF<%T#x(|)i}*~+ z2WZE~M2wdLx^V`i{gJ=K(ePn0QYA zn0U|b)0lIX@Ye|}rYyXVS4{o9v&m?cC zDX$nD_Qn)x(OJe_C1v1@uI#7JMqS6~^R2oj<;(%jb@_~j%9EjOU1cNSb(Kx}60v!S z*t|q+zFvF3>Jt5W?K+%Nu>3~7-ROt=*mmQT$c_3&Q$1vR%}=WnTf_Kc?Ppea@UGg zYsD&`VU(Y4Y!pj28ee*n#$Cp9uC;*PvdfHnjd1uXqeJ^Pa4q1ieQz=Dr5hu67`xG5 z4;z0p-pbo$bQt&NJ!=fn&nkbzsMm*t|7J|mUn~94*bU8J80%q4u5GvROrQvGYUC)} zB>mxD6KsDqp6qkHZIf8IN$lAq_S_(x8-#O%aBdUMZNj-tIPE$|?+$sowuAWT+75ZT zcEIQ#_}KQb@sFIZYzK^ILm%6A$n& zw?;18jGQBY^Emn=ZNbSvQ0iJocf*noq{hz#`fSdUx#kT0bI5Rf?$N#kzsdYTpbeun z*Y+jx8J5?=`OGRP_z%J_ws7WuDW_IH2;8QfUGkv0P21mhgGA9|rqB3O-g9P!#ug5c zQqRMmxwhegS7_B$pCFfQ9&K^@6}TMZ1>bGFSy}1WZ8TQRa8zhK?xtuw?#?ns_2$Sw zyQtYQ0Cz}BX$tPLU(hO0N~3-@);|O=>KJ0{jai7JZjGZJoE(~D8;w@ahU9FTFZIqB z%}Ye{Y;BFLLt7%+W^4bpf8>}iI+ttXOT5lj?TD-wFmLq9Dh7VA5|Ijz4RwA?=jP*t zTgL1vEc?%Ze_~dha{zu~k@1ziH|WLUd6yO`p5Sz8-&gWo!T6GsoCTt@RCE?VC+1<1 zDHWL+wh~XmxmIdlFOtKFYhN$5568dHHo-ZZzOP(LXBm%S-sop=Uvup_v`OQqBbzjS z8oJTQEqvd(N#kdt8@1-5e>o=^e{+BByaAf?UAKwmO&UKR-K6pO-68heCbewR`042; zji01$)IP#2w?i!40SlK>vv~C^fyni|pq*#o6N4{k?ZBJNjoL1E)U})Ls7$y%MvWJ` z4oZy&rM)|~!BtD~`|7`PU*~#MyQA`VuBRZ=;d)7AUJ@JD*}n9A>2m2KOTTyRHf&X< z`wjG3srw!2wE~@^-DeEWKi#+Y%WD)E_1s8<0zY3m~{68z6Nl1LDJn}?wK-M^yhPouuH>P!!} zrPX5t%*AV{;qZ3PZj`+jkViyN=XfsGIi7Ej+KY9L=NqK18>FrZeMP84Yt-ZT-TDC{ zKV0O8i{x4Q{=Vb9AKOM$O!6MI<>XHTKG`$ZJ6a^ii{yBbtkBO7y`XK>PVuyRr-(hX z#hym}C-?8Yw@K}{Nxip8y)Q`{@6z8XecJm+daNK|{*msfctJa049fY;tJ!a?_?LIS z=vg9gw{cQsAZxeu^=|!|z!6zK~B$a zY4$-Wdk|$Y+t^>litNOEaCNp5d$eBxR?rQA5!wbgSop(*Un~64!mp$4$Q@7j08SB^ z=^`^*Waf&@e34lqxl56&;|LcVy+0}qI0%p@r`aR%7bO7*C%I=j- zy8!)^tFcUtz##&U5O_48PJ6Z7URn6};qoBaTW84!1bz%yfp>6EDX7F7uAk#!8sq%| zlLZ5D+VZRHf%q5YT)~0(Qr!=T_rUgyDpmTe0 z94&^Pad@lkSJ~r5e}mLD33#mFIH{{q_>Cgjh<~rFxnQy2i>1_Job*3gutemWq-?Wj zjtguTe!Ixyxd6(p5qyo5U4ycp6s#4Qi=^x|QfjNnY!iH&g>%{4Mdp6t?-Kr#*prXT zeNy;O3*0aK_l5tyaNZYReJD6-++MrJ{tN(a4^|33Oz=9~lx+{ziA;m=X9<6y@D~cd zN%(Q$uLT^Jdy#O~Y3#9Ugnzqm?h?-Z!r3Jno&S1TM5CXl?F78`ro{WEzFvXp@)}ybUtX79m44l`6mT`3Ln325AKJ|=+J(VIUxK4BJ;lBWM^wN zJkMjunhn8AEy$d5!Rsx^oN7Yn}){KrCV!f!V@ zw%di@ZnB+gMB7%#P~KLN*(NgEL}r`F+$u7=AahjSE|KXF{ZER_e(=x9+b{eB!Z{$N z-WObRh(8@%mmzrAk)ZqY!Vb1G?BI5l3cplj$_1~3%#V3>B2zD%ddVFp_(Fk=78Gv_ z-X^f!g3RA4_%;hNXP4mn1(H*2bFvS^g4YRLD6manJ90nI*(UHdk?e4CukDvyai+XV7EFWZA1zCyaG;DF?6ekto`8%q6LZ@s`a z;j|0hA#lHN4v4%KD5Sd!>H=J9JpRqvak-6vpXaoLj~PSw+XU|r$^8MI8A^kkTM=aW zx*(UW7f!ptt-{$R_-%m2g&l$)5UAyH*;0Y^xm?%6T-MMC&fNvugmW9<_TVnzKLvbT z?gs+HA!%KROH}}F57rCbD6n1NHh~=i_lta8o>-X2rN#qp4>k(E1aMq#TOO}O?ZR0r zoNa=42z&}~dyw*3rZk_uU7yc-8U?n411}*L<3czc!r3pJ1H#b?Sl$MRv0uP?>V>mb zI9r9YO*kC_4+zu>xm2mZg@vrYQSdgw+XdeyutVVfLadDW`wQ2=lLv%DMG4xPPeshp zibR{h`XaWuQDBE~4hW>;1bv-P#VlW1%<}aD8;e=KUGQzd|4`5&_yK`hZyUC=0aTW|J!yWradc1Z4i;U5rO>%;P;0_*xnPxWD)jo@5buubp-0!vH8DuImx zI}|4@EedmPyTEP2=@9&Y;94omlnSgD*jOs^f^QSNL*M~$U=O~`xx1jfjAf3-cMH4e zN4!B_sEySoYEdnr9nj9uFVOGS@7JHxU(@&LpXi1$&^XyxZv4)8**IX>Y_n_&Y;oIV zwrg#-*nVq!&gQirX+O%m*L>Oh%KRP&p2s-OcHHdvjpJ3v=Z>k)rOxfn2b@z}`&o513fWP&+ zan`Qk3lf8JaN->R6~uly7vJ55D4X(dnp^;?5c_`qK7?p(DL=!yFT4w|KJPie+4(O6 zKI~_Bslb=KyMZ5F{3c*S;oE?p=5g+og#yFx0xzok2=MC))-z8^IkFC>@up&yyf}y9 zQAJ+?mI$87|F?^4nN`AYdLhHFM9)eo`)1Wo;CxYH1d09$87F>$gTMa3Z#UpSJfX8% z?Zn-R4g4v9IyuA}PCy-Aa6ktCS|#wI9o(Jgo2IeS~y%bQ#`z%KTzYI{vdnm^MUk_MJov583gjB*hn^q2J z0`Eg^;C;voJWOHWVJZV&N_~Ns;`dc6abGk5co_`@UQR=Sm(y_I6;unnf<^(yH&wv< z(sS1N>;(2Yd{@2Yd{D0K5ji7!U6+!oLc6oA$64(2vk3>nrr{^(>>- zs53maCfj+oowg3!8TL!&%)H3F&fIFgZvM@D&(s{njzx~k z9oIOXa@d@?&RXX>=he=)ojI;D*D%*c*PX71T`#)w-PP{d?wj17yT5T?=egOl$Mde| z3s0qYpm(u%x%X=C_1 zD6cL1I&>hBA+gLD|Gm^h*%~~bJ5(-?r-6sou?J5JyYtp%Uymod-FfF^Pvj}%5S#zm zgB<_!#D~hw?V;>sJVQQI?nlp|ymi^{;@SP7?HG?IZN8=iUT>dMd6Y$iOV3SHqthCBXBUV~xr4z06cq^S| zr3< zOy}wIXb-Lra8($)aq{_Z>NLKlBW&N|nn&|&ns%nmp{)ge6|Ng_-D%6x9_u7^DL>K}SGYA;iVHo}XOKwRs*Z|e_xza}H= zpgu5b4%OkBl2wfM&7p^~_G&NU@@MbWDsa`{nun_;n|)8C$BbOCVEBR|gK6}nmgd&x z#^ufDH;rwKH!mI+J@d@QmL>5qi&6qhn&T^$H=Z}b6j-Ad9$O_ zT9-D(@M(He zQw;rYcJ@$uc&hY}BN&?!ZCt`_Qq-YU^~@d7lT}Cd#2m@Y@zHZymZO?uo0m7K_M<-V z>z6FCyvhcEF|+B+D0@UaZSf{FwRUGLZH!NEik;aUk2gnKETO||fQLn4tqO^aIA50>-1Rk^jK3oE}ac_gJRdm7B6i+ThtB#mwlPhpWuv% z!?TatMJrD` zttn;^%48b7czH7-)M74gj;B!8YH=lKf2O-oLpoA^(QOdyu{SdK>PH&7MuO!gBrByU zJS=8MkBdiJQhhdL*g}+tYtL?qNoR7VjG5ucn7VTL^2SBWn}AMgXjyq?Q_P}NU#yHZ zEt%aIUsiukV{@yOGabC<#f`08MtsTw!0Q*cBC1%?%%;XA(^{6FH!iw-c~gpuNL(c0wu`8RGtBkZ}saj-H2DV1ITcfRw z%g3JA+7xGJaFBp`8V@6dX2vISqKnS3GMZaXi(07YIBC*!?nwzn2rh4KN#m!bm@6_y z7-V{kA@DIBj6Z(d(#DpSrsW&}U~%&}LGTQvV^_8;UO3e1)0Ha_6hmop(|OVp(;J&( zASaD)mi}yvod+uAZ`PpZ{$c;kzYu6Tm)kc4m^hbHDg58cB7aF^YayDXv9z()Sc6)4=4ikY#EF%CLQYfF1z{zU zrgIlJt>Dqe#t%8-7i&iLIIO0vO~;RiptALsOAKFt{3X^x#5I6ywo=P=;G`oHczOr{ zN7N~sr!==L8++bVo}*zra#YBKO zj{Gmmk&iB)g^dcg2UIstf`+FsA6c2Prsa*TShG@5WU;wMh_VBiQ=1OPlwNSeUr2u; zB#=91WXfjmgB*#aWti*&v_~D)@;}=YwHhaOb)8Qjep*b_Bh}h!BmO1gJ@yAnh9AM7W$y2ADI2F>zPNP}p#W4{NoHQ+6c+RYbnJJkC z4Krs>o0-m<-Z1m{Nwa26nl^P79bZ3g!L(U);-snLr=2*9W=loWX3eE3lcvs@OK0;U zzF+~3$4o#x9iX*~Q?+%iH}QcJnp&D-&5Mc0lnf?1Y+5AVEk@&NUqvUznp-V&7D~$Q z)hgH&KZIe8g^b0R5ayZWp+ngkbLsh4Y3_N8YuTK!=_Mto3e9Sbu22~2R0tM;#Wec= zY47}F}Xal5x3sk5B*r)^8XoV_(jU+${lt2VDMGaI%0;E6-I6#9c zfC@-|r0(Z??!EJ7c9x{w^q&Uha^~G1=bn4+Ip>~p?tS;YdAP=W>c#4#KtBB_kiQLp zjQ;6LLj!adcWOQn#J#$y`NCVI7JSMz8>i2ok+UbYbaly6gsv`>)~YU)lDgOk!KwuZ zRadE2Z^-q9Y|8@N!IFN10jQ4ML(w4sB5hI3l}5XAvu0%DT~+LRR%qn&>f97@ zxlv^xYPbWBt7n_7?Mg@a&qhLDymjNoOO^FoaQke%wna_a^=RFdc4ebBS{yiTMtKC^ z>fTQ6;2O`pgX=0gJ3e+C?akcrNH-o?Tkc`BiLV?jC-SZ}Y!x$t&&Q#oO_usja-_+b zT6?`!_a1bl606c|jiS5Id_YCuX?wIuUmb|5UTwBm5RY_*xVIEsg1|KNfb#Q|yCcBMUr@MhO6XH7(&LU#pLr<^#LsxYuypCV)4j}+ek-mxu~3b6 zGtCYyM`au%vh{#Sn(t$Nw{4-ntnoTb!TPZ^uwDxmbGgy(R2pP8sqttv_xI{MVeM#H zAu{cDnmj(We4h0t3U8#x^vj*j&gHNyjAiGV8!@@mYQ>~yL(FXlT)T#maj=Z3p-cqQ z^sv;ZE;nvBZ`IsOH3GAc_VabIQC-}sZ!}gVMlnGJ)v90GG^2b$5!YRcujP^q-p`_u z6&QYOSLiP9Hahj~nkK22ggQ`85o9P?!8ibF7KNdTg-%OfOUQx`F7Vy(+R=q|`fAgl z`wo3U9MF0m6-sBx^FLYL=HsgXUO% z9R;w2I_kHGhRQUcpXmhiWk}Dm&h5je=F3_PWOvNo8z9{D6=~dRm>Q8zY<$Zy#3Hp- zL=i_7Boo+9ROqmY81W0WJK#dGo7-!;E}QdS=_nSjuo*(pilT^tJi4D&dUDQJ8fbQF zfd#f&)a8F}GG8=qsep&F+y>mcRB1slFjjJkS1akLnYg*KiCVi?*=?)Eskm^V z)Av}A4u5GVv?X7AhGFZ$m#-QNRs)%f*Q`;dZYVK}qrj@Ie z7BV_33EgS7Zlx8m)ys9p+(^rrliuy6MUf=Q@M^84X*pWC%&vkW2r4UE4}^*q$KX;V zp3zo#nHA7oOSRMbNCA3P-Cggb6_K^z)mB+r5nBjzrLmV*gsEfYo%&jx70y8I(%ss+ zB(HrH(-X6#mU_9;_8Ik6VS(&(%m<%fV)?{vEg%MbNHlZ7rQm(EkLuVaUB|&P(_~Ip zwVR{Wob&sGmLzD1%K~?HtFmF6TAqbwN<-4m$B@Cjhm_`KKU6X^l;-wF(^_AJB?kr_ ze}NfPBESWvEd;r$W{sKZmm_Yqxw6@8b!4Q{5_{DvRWH}>hQgKIwYD#*Kh7N0Y%R1G@O}gn%L?Dm&vfhY-`X>Kzqjo8zEqi&$Yvths$8(gdQ#%{e;TdZ!=u-^999a9Kak9|Yv zd=bmYv`9RG|K3tYl~}$w7`Zr;ZF)0Ak;*_0{)M|FPFu(t;?U?K(m3^O71-PnXHk*% zLMR_FyRKSmBN2~E1o~x)jXESNwzb+vUAq}J&$S7gDzxWQv&|hgh{CSH&~~$RDJ@Zi zchMFzPBE`$CY}}OP^jMfiy=do<}9vicFs0;8`ZRQF|0SxKj$pl556pS z26bNN=Ea`nR<>%j9Y;78X9YrBZSF+zEA*1|VxGwH4HqLfwy)jJ8ebT9Bb0^3X=Z0j zbYm4Xz8bZRIVAlYvz?2Ux40OyY6$E6O_vAUiy=ho+_Bd^syG%8@S-|YA&t6thkZl0tl-}H^|2)fR>lMQmD<+LfvhEkB-l91?+TN5 z`a^3uN=*gj&cZz|xuTd98o$5l%{A&TtL>z%l=%J0mg&yoF1OBn(zYaQrudYwuokUt z5O|^@+R3omgUYm-Gziycsu~GV*zqs~G0mEf+JQTB8besnqUv^2@ODM11*tyYc4>E7 za!OIT&(td$jVAVSz1?4Xgo)ht)5Fi|b{LvJPQc#VfyWF&AQpf``N+nL;TbI*(#8eT zH!ZFDbUwh`$6>^3nGLN>BssZ*ui#gb34;-HNnWY&+S@^YsQ1VcW$! zLba;h=XB{UPZ90Q7>~@V&#dW|UF6jYp*-Qp-ookD-cE-T0+pT3y@gAy`ZnXf4P0D2 zD70>4Y*{J!N#724kMSLCXYo_Oc;I|O|;o|*FJ*o{VGIg?=vtyWMFjWW>$2|DHh2R zooTMyMr16zOwdN06SLAFqTp7ai_xnsylfuI4e}>r7H?%dWq!-`EK^)LnmN>R0Mv`o-N>o1FcO25ai*tyD;g z=8)`%Cfv{Um|m?nm_Qpve6_aby-~kJTun=j=@t{7 ztKIB)ixZr5AQMju7gYVUgddL_6a)6Ni9`}CQYOuV6< zOaaamt=(0WrcAJgZiV$Y%fKC70v8rwV49IYtzg~zJ(&z*J-f6Sgw|lq zU14Wo>CUrZae+{;Z`_o|6|m)q>rfErw<68`TQ>05BbU_@%zC(rOWZ9m#nDxHqR(BQ zT5VP8o$3(=5%J0Rtv5Jt`1OTPQ|;UWloE>_-pd%*JWR#{uNHXyYch({RR78 z)%VXXa8C9N=hZuWp5wH84ceQWL~qfn()2nnn2VG#|Lps@(7V-sY_v9|!61%5x{pho z&VNOHjsH#PcG*>aj%USaYVlo%dmC_ThbOOhNhx0@-GpY|zXGjgTIsLM$^I?s#qSQM zdg1Pq;*{VH!qRr``C;lV4fG-EPt$svzX}+uo*%g?FkAc(!^2xHagyKDVO;q1>&WIR zp9`ElxDI7$eHopQ%(f|&c5KnE%yS0rwBR=ByUlftQsFC;+eJEFK5bg;8a;c|tb>QU z0*t)|wPnsuJNiBC&Ld;t8XnC9`(6BL`%PsLdY#;af-NNG=2jR%)7_!>e%X9Xl{s;} zKEz>OZ#r)69*=SxmOB!glZ4xhG3o_@~=VgSH4gft{g`QaEp5zb# z`3A6FQ-*tVA0332TpD2BW_;I~-|9tgS&wFtoEgj_XRbX3C7U}XDu4m`nV}mVT zH;b_+{5ffEl^?0~SC4rRM;Sge>9J$nm2T`AZ)&DZ!a4}e*jFN^v=@yj?O(Eg-8d|3 zAn1$6n>|j(cfh8xK8Mz6+-=W=NsW9P9PSmLYLb=?@9%$*8;_*)Xv8XdWJ8T3lO87{ z;kSmR2a;ojI!RvhaA#r3|w%F zWu8J534T}-sYW*8mgeTLC2`$#7UsLkg!XwOq`m_ zsCkpJ5YRp6UIq5c{O$4B!YOcg6_+^|Gt}}qh#MT(i7>DeePbg7bqVNbT-(s#9ZP0f z200kKj}F3|rw2`h4eP@_=IN99l3V&Es5S?9C{AO~BKLWTX~%?CH}=WA3-TbbE#TDl zwf{t!5qY&#t1T1!el-*QE{g%pGKI1{bu(Ayu@O1k_&4`+nUOM_#nI=WJHo`Po0YNg zz2cT1lekqPPRrB=SASHpy2+n-zC!7jNx7e2?N7`UN10mn(_rMh?5jVbXc(Y=>CAz> zXo5c&&mAyHb0Qx1^jXs0p`;30vyef$wr;(aITK zTF(eR3Y>Uo)~H$QcoMvIJM176C+O5+vmD78U))4A6V>P2I!LBA%q4A1an z(@5fUjJ>zft;@j5xk{64w38Ret6%q+=f50keSjzKvB5b|#+C0;3;f(U;MRcl23H#5 z<}@_uNg%WZ(!00{vS+p_xC7g+HG#CTn;cI`jQOYEWV+V}!=N66I!wzzo zU$RH;&}nE)LmxMN1$zB_XT3HeqfX$2`1n~`rh25&zewrpw5jpf<1V9AswxL}e7F~x zW$|u5-%UE7-VZw{^=L(SQ9jreuqgm^KfAw8oO6QPHA%ST!4PSM(u0GmsKMTntq*ah z?DgmKgP0DIV8pRsLqmIPlEOT>6>s;kNl-T&IR2y**31d}8D#u}x?xNYr*NeGWSI~^ zl5~?X5O9?%NSZU1Ht%F(#FvJ77KQAoeYk_vHGflgD+$O)X(mYT1wYJHqdNBr9AP0e zeU)B9sP!4mLO*vk+Z6K4KD9jV`GfeO5oo^d$NCJC za@~LAqkxZ5t?40Rw3-_=HXd$xcrjw|?pZ_+$1#tNWG%vpp4DOAWz%94no#;AzYr^|juWQ+TijU;s)ln-q@v3ZLPO3O} zz%7cRBxK-x{;XP^1;zx>3p|EzU;W~`ja z7(ZIN;!)1IV(w60EoS&3`N?D|8BZnzb2y)!%J5TaN+u*j=?qC;A)wM(lCwTJNs^yq zQ|S~*e)CPqagzEJCZXvVkKGnun=UhGyE*ijm4-8pz5@McDg7mWaF_+0?^;O8S-SY9=?0liveamFTm3|6^q(E2Q zA0(8eOU&t1FKd{lhm5-p~<)n~DEa*k|t!W#>@7Rzh8O`rlW0eY#7%|yLsfGyN z=^Gl1qPz|LS0jt=kHgdMujX=DXm}^Fp5I{z1zr)1rG`^(7$ubM)iC-Re15x|3X1E{}B0EBUkign}L4rX^ zbGcIYeyRIklBC%EZ^hS8bH-O>e5k_@5%2uCO}%;Ed6fVLFmMRC_*$+kB`>}U%|B&5%jbx8}otFI@{PxRx9-7vk9znPz;sR?Ow+3o^u|Yo%*g z>?Ao1r$lL=S!Sn8*JQ*nrVP4t@90b}kHI&~P$<~kF5a7ml5LFY$!RqY>Dk<51jLwr z1QSMIp)Oo_VZlJ*V+Vp1Phv&pGR544tlwUybfmOX{0d4b;U1x5oKxwDxt2W`0Lg-x zI+-MLhlh`4rl$JsB+PtXZEyikOvq&(b2hGSZ<=?L6uVz9bwG`XNTO7}AUB@JF&g6T zo29z|%t~3+G5LEZV75>D*MFse%RhbEqwL-zD`I zq(IT-qCfD9L}hucj;w6)-t%J{zNcOI2ownwiLb;Be} z3uNgJi$JRi9eq3}A1(^J9~Qg+6E6fnkI)LRzl3MdG+iDm)#u0aaOqum29#Or?uU8t z=|h^Jz1<&XrVf?yRxl(Vfqf1oHe~Wk9;*>bCnhy@W_(iuWJhz;qKJ-7EZwh(wy&Gv z884VuxVMZ4n3XA)w#zHX()MOG7p%%+m)@ip0KlZx@r%iT6q1}9ldr}VWlHtD4dLsh z?$`VfX7J`y(QeZ3S3)`FjdHgeKFkc9E*V;0%<)wmX-XGTT z_ff7lGB_nHv#HGo#ok`A_Z6=~vC#)`okIKGQ(U;j}Et`Opc>!zwdkxXP2x>=Y4%D)>buW8!%LjVdjJ&$Nn^6Qhb`nJRr z*5A_Cn{rI%F_VcI0lg(O@*&E+n@rgCL!psZ2$evVdgGuAHeK1-WMaDC!F`n+1x0V( zJfGrsm{DM2(wlKXs5IRm{T~S0{Odm_SD*G|8Wb#}LBaaRFaX&7uAomT^{<5k3pW)8 z(K{7Kb6*V@YC&NC$;^QkC-o#vstQXe3<~h*_!rd~I;l2)Dg;t!W&T(L*&CNuDOAji zTRbU=Vo(^3QaK-D7V=htlu^3U5vG7bBjSamz|x21DWPmKfx|rJ3OTK&C>CU0Wkl1c zj>o6Cqx&1B?msQ?8b5DAiDkOKmB(9lzg_D7_9Uo12W^F$%n;J}Am~2PGOK5%9+-2BzSCKL@E;yo!Lcydy!w(n$?w7bz(4A1lVie*GIaKF)16Dz+Nfz0K z0%XG1$C0y7JxwO0D8qA6`?S9(;5H7Y^k?gI#=qQ59BXTDhy!F*zFxEqsYrXEdaIx&|BZU z&INkvL{E7wGN?;fnmiknET@EYHIJ@lpLGR3$@sI1e@Q)&&s#N&35iWgvy*D%tG+8N+-HjO^R55Fy3SX$N7j~u1?J< z-RExqt%Z{yC>%K(AKK#pmtJLN&y1EbZg%L%qT?lxZrq;cbG+%%<(^+SsXt$C8Mb&c zyfD%o&$wrX+H!DJNA-?>cH~uO4}sNjL*LF`@x)!L7c=hEFy3&MbmaKl@dMrvB;sJm zFJ#m;6iE!v-n>`oB zDZQaL>>MOEPlisW+aq9JY&sOEqun}!tU@yzlkE zQHP_v;koAly*rQ!M(|3;o&7(<2w4u@-s4!rdsK6rARchVgH30}wI z{_msJD_mSH<9_j{qjvbsiM;0U;pFQ*Fm9T|j#$(rgMGkm`hS=^Y#D`S;Velul**FC zBvk={y`(j!g$z4MV8A~ieJ10+%I&5Eqdm)M*5)01w44XpD41Ms@VI(iuSEgu+>u9v zh2Ast9+TG7z}Mk{w37TVRlnrpN|*cDp~R5^IOlk4LF>%c)_FbkxUKhE)M^WQz*GNz z{4_ZBcQb_R|J_W+2F8zIc8AAcUWE6&j+P7VWjg}# zQvG|%TCLhWO&tx<9p8A|#sJ)R$6f|$2AXu|)8Eq^#q^ZHoMhbo?*(o~!vhXp6lm+0 zbGo0};C6Vt=`H+&hgbF;;BsfIZS3m-$6p?S<0R1#)-jBH-&ttdKF@)lll_mQ&l2$B zknRe%xat;vO7Vl~?H@|x9l!}VbVO*wT5I$>j9c8>;J^VV_-tyOv%W5da&cCDMOu}! zgFg@9QQD{H^CfUKIU1k?Bb@=NAI|5Kyx&;w7$0oApHnHH9PcO=PZ!Y^-Ot`e(*Drf dgWHJ5e;xj1c-OsiFP!@8FqZ#6hM$%L{~KI?(}Dm1 diff --git a/BUILDS/net6.0/Plugins/Commands/Music Commands.dll b/BUILDS/net6.0/Plugins/Commands/Music Commands.dll new file mode 100644 index 0000000000000000000000000000000000000000..509f1db2ef622ae424c97cd4e9222230820009ad GIT binary patch literal 16896 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 A)Bpeg literal 0 HcmV?d00001 diff --git a/BUILDS/net6.0/Plugins/Commands/MusicCommands.dll b/BUILDS/net6.0/Plugins/Commands/MusicCommands.dll deleted file mode 100644 index 23499242478e7c51d36af57950cc23b88106a227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index 4f5802a..712828f 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using Discord; -using Discord.Net.Queue; using DiscordBot.Discord.Core; using PluginManager; using PluginManager.Items; @@ -45,7 +43,8 @@ public class Program Console.Write("Prefix = "); var prefix = Console.ReadLine()![0]; - if (prefix == ' ' || char.IsDigit(prefix)) return; + if (prefix == ' ' || char.IsDigit(prefix)) + return; Config.AddValueToVariables("prefix", prefix.ToString(), false); } @@ -93,20 +92,33 @@ public class Program Console.Clear(); Console.ForegroundColor = ConsoleColor.DarkYellow; - List startupMessageList = await ServerCom.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage"); + List startupMessageList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage"); - foreach (var message in startupMessageList) Console.WriteLine(message); + foreach (var message in startupMessageList) + Console.WriteLine(message); Console.WriteLine($"Running on version: {Config.GetValue("Version") ?? System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}"); Console.WriteLine($"Git URL: {Config.GetValue("GitURL") ?? " Could not find Git URL"}"); - Console_Utilities.WriteColorText("&rRemember to close the bot using the ShutDown command &y(sd) &ror some settings won't be saved"); + Console_Utilities.WriteColorText("&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine($"============================ LOG ============================"); try { - var token = Config.GetValue("token"); + var token = Config.GetValue("token"); +#if DEBUG + Console.WriteLine("Starting in DEBUG MODE"); + if (!Directory.Exists("./Data/BetaTest")) + Console.WriteLine("Failed to start in debug mode because the folder ./Data/BetaTest does not exist"); + else + { + token = File.ReadAllText("./Data/BetaTest/token.txt"); + + //Debug mode code... + } +#endif + var prefix = Config.GetValue("prefix"); var discordbooter = new Boot(token, prefix); @@ -239,7 +251,7 @@ public class Program if (Config.GetValue("DeleteLogsAtStartup")) foreach (var file in Directory.GetFiles("./Output/Logs/")) File.Delete(file); - List OnlineDefaultKeys = await ServerCom.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys"); + List OnlineDefaultKeys = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys"); Config.PluginConfig.Load(); @@ -263,7 +275,7 @@ public class Program } } - List onlineSettingsList = await ServerCom.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData"); + List onlineSettingsList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData"); foreach (var key in onlineSettingsList) { if (key.Length <= 3 || !key.Contains(' ')) continue; diff --git a/MusicCommands/Leave.cs b/MusicCommands/Leave.cs index 98af079..3ee6975 100644 --- a/MusicCommands/Leave.cs +++ b/MusicCommands/Leave.cs @@ -22,10 +22,20 @@ internal class Leave : DBCommand { if (Data.audioClient is not null && Data.voiceChannel is not null) { - Data.Playlist.ClearQueue(); - Data.MusicPlayer.isPlaying = false; await Data.audioClient.StopAsync(); await Data.voiceChannel.DisconnectAsync(); } + + if (Data.Playlist is not null) + { + Data.Playlist.ClearQueue(); + Data.Playlist = new(); + } + + if (Data.MusicPlayer is not null) + { + Data.MusicPlayer.Stop(); + Data.MusicPlayer = null; + } } } diff --git a/MusicCommands/MusicPlayer.cs b/MusicCommands/MusicPlayer.cs index 536f6d7..5b5ae17 100644 --- a/MusicCommands/MusicPlayer.cs +++ b/MusicCommands/MusicPlayer.cs @@ -1,9 +1,5 @@ -using System; -using System.IO; -using System.Net.Http; -using System.Threading; +using System.IO; using System.Threading.Tasks; -using PluginManager.Others; namespace MusicCommands; @@ -48,54 +44,8 @@ internal class MusicPlayer isPlaying = false; } - - /* - public MusicPlayer(Stream input, Stream output) - { - inputStream = input; - outputStream = output; - } - - - - - - public Stream inputStream { get; } // from FFMPEG - public Stream outputStream { get; } // to Voice Channel - - public bool Paused { get; set; } - private bool _stop { get; set; } - - public void Stop() - { - _stop = true; - } - - public async Task StartSendAudio(int bsize) - { - Paused = false; - _stop = false; - while (!_stop) - { - if (Paused) continue; - var buffer = new byte[bsize]; - var bcount = await inputStream.ReadAsync(buffer, 0, bsize); - if (bcount <= 0) - { - Stop(); - Data.CurrentlyRunning = null; - break; - } - - try - { - await outputStream.WriteAsync(buffer, 0, bcount); - } - catch (Exception ex) - { - await outputStream.FlushAsync(); - Functions.WriteLogFile(ex.ToString()); - } - } - }*/ + public void Stop() + { + isPlaying = false; + } } diff --git a/PluginManager/Config.cs b/PluginManager/Config.cs index 7848152..f20434a 100644 --- a/PluginManager/Config.cs +++ b/PluginManager/Config.cs @@ -19,7 +19,7 @@ namespace PluginManager { public static class PluginConfig { - public static List> InstalledPlugins = new(); + public static readonly List> InstalledPlugins = new(); public static void Load() { diff --git a/PluginManager/Items/Command.cs b/PluginManager/Items/Command.cs index ea8078b..6634b59 100644 --- a/PluginManager/Items/Command.cs +++ b/PluginManager/Items/Command.cs @@ -5,7 +5,7 @@ using PluginManager.Others; namespace PluginManager.Items; -internal class Command +public class Command { /// /// The author of the command @@ -20,10 +20,7 @@ internal class Command { Author = message.Author; var data = message.Content.Split(' '); - if (data.Length > 1) - Arguments = new List(data.MergeStrings(1).Split(' ')); - else - Arguments = new List(); + Arguments = data.Length > 1 ? new List(data.MergeStrings(1).Split(' ')) : new List(); CommandName = data[0].Substring(1); PrefixUsed = data[0][0]; } diff --git a/PluginManager/Items/ConsoleCommandsHandler.cs b/PluginManager/Items/ConsoleCommandsHandler.cs index 8f1e4ab..07e90f2 100644 --- a/PluginManager/Items/ConsoleCommandsHandler.cs +++ b/PluginManager/Items/ConsoleCommandsHandler.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; @@ -48,7 +47,7 @@ public class ConsoleCommandsHandler } items.Add(new[] { "-", "-", "-" }); - Console_Utilities.FormatAndAlignTable(items); + Console_Utilities.FormatAndAlignTable(items, TableFormat.DEFAULT); } else { @@ -147,7 +146,7 @@ public class ConsoleCommandsHandler { Console.WriteLine($"Downloading requirements for plugin : {name}"); - var lines = await ServerCom.ReadTextFromFile(info[2]); + var lines = await ServerCom.ReadTextFromURL(info[2]); foreach (var line in lines) { diff --git a/PluginManager/Online/Helpers/OnlineFunctions.cs b/PluginManager/Online/Helpers/OnlineFunctions.cs index 213a056..343ffe1 100644 --- a/PluginManager/Online/Helpers/OnlineFunctions.cs +++ b/PluginManager/Online/Helpers/OnlineFunctions.cs @@ -18,32 +18,32 @@ namespace PluginManager.Online.Helpers /// The that is used to track the download progress /// The cancellation token /// - internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination, - IProgress? progress = null, IProgress? downloadedBytes = null, CancellationToken cancellation = default) + internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination, IProgress? progress = null, IProgress? downloadedBytes = null, int bufferSize = 81920, CancellationToken cancellation = default) { - using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead)) + using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellation)) { var contentLength = response.Content.Headers.ContentLength; - using (var download = await response.Content.ReadAsStreamAsync()) + using (var download = await response.Content.ReadAsStreamAsync(cancellation)) { - // Ignore progress reporting when no progress reporter was // passed or when the content length is unknown if (progress == null || !contentLength.HasValue) { - await download.CopyToAsync(destination); + await download.CopyToAsync(destination, cancellation); return; } // Convert absolute progress (bytes downloaded) into relative progress (0% - 100%) var relativeProgress = new Progress(totalBytes => - { - progress.Report((float)totalBytes / contentLength.Value * 100); - downloadedBytes?.Report(totalBytes); - }); + { + progress.Report((float)totalBytes / contentLength.Value * 100); + downloadedBytes?.Report(totalBytes); + } + ); + // Use extension method to report progress while downloading - await download.CopyToOtherStreamAsync(destination, 81920, relativeProgress, cancellation); + await download.CopyToOtherStreamAsync(destination, bufferSize, relativeProgress, cancellation); progress.Report(1); } } @@ -57,10 +57,8 @@ namespace PluginManager.Online.Helpers /// internal static async Task DownloadStringAsync(string url, CancellationToken cancellation = default) { - using (var client = new HttpClient()) - { - return await client.GetStringAsync(url); - } + using var client = new HttpClient(); + return await client.GetStringAsync(url, cancellation); } diff --git a/PluginManager/Online/PluginsManager.cs b/PluginManager/Online/PluginsManager.cs index d3bf569..ddbe61c 100644 --- a/PluginManager/Online/PluginsManager.cs +++ b/PluginManager/Online/PluginsManager.cs @@ -30,7 +30,7 @@ public class PluginsManager { try { - var list = await ServerCom.ReadTextFromFile(PluginsLink); + var list = await ServerCom.ReadTextFromURL(PluginsLink); var lines = list.ToArray(); var data = new List(); @@ -43,7 +43,8 @@ public class PluginsManager data.Add(new[] { "-", "-", "-", "-", "-" }); for (var i = 0; i < len; i++) { - if (lines[i].Length <= 2) continue; + if (lines[i].Length <= 2) + continue; var content = lines[i].Split(','); var display = new string[titles.Length]; if (op == OperatingSystem.WINDOWS) @@ -54,7 +55,7 @@ public class PluginsManager display[1] = content[1]; display[2] = content[2]; if (content.Length == 6 && (content[5] != null || content[5].Length > 2)) - display[3] = ((await ServerCom.ReadTextFromFile(content[5])).Count + 1).ToString(); + display[3] = ((await ServerCom.ReadTextFromURL(content[5])).Count + 1).ToString(); else display[3] = "1"; @@ -72,7 +73,8 @@ public class PluginsManager display[0] = content[0]; display[1] = content[1]; display[2] = content[2]; - if (content.Length == 6 && (content[5] != null || content[5].Length > 2)) display[3] = ((await ServerCom.ReadTextFromFile(content[5])).Count + 1).ToString(); + if (content.Length == 6 && (content[5] != null || content[5].Length > 2)) + display[3] = ((await ServerCom.ReadTextFromURL(content[5])).Count + 1).ToString(); if (Config.PluginConfig.Contains(content[0]) || Config.PluginConfig.Contains(content[0])) display[4] = "✓"; else @@ -88,7 +90,7 @@ public class PluginsManager } catch (Exception exception) { - Console.WriteLine("Failed to execute command: listlang\nReason: " + exception.Message); + Console.WriteLine("Failed to execute command: listplugs\nReason: " + exception.Message); Functions.WriteErrFile(exception.ToString()); } } @@ -102,7 +104,7 @@ public class PluginsManager { try { - var list = await ServerCom.ReadTextFromFile(PluginsLink); + var list = await ServerCom.ReadTextFromURL(PluginsLink); var lines = list.ToArray(); var len = lines.Length; for (var i = 0; i < len; i++) @@ -110,8 +112,10 @@ public class PluginsManager var contents = lines[i].Split(','); if (contents[0] == name) { - if (contents.Length == 6) return new[] { contents[2], contents[3], contents[5] }; - if (contents.Length == 5) return new[] { contents[2], contents[3], string.Empty }; + if (contents.Length == 6) + return new[] { contents[2], contents[3], contents[5] }; + if (contents.Length == 5) + return new[] { contents[2], contents[3], string.Empty }; throw new Exception("Failed to download plugin. Invalid Argument Length"); } } diff --git a/PluginManager/Online/ServerCom.cs b/PluginManager/Online/ServerCom.cs index 67c2401..7ae5834 100644 --- a/PluginManager/Online/ServerCom.cs +++ b/PluginManager/Online/ServerCom.cs @@ -9,15 +9,14 @@ using PluginManager.Others; namespace PluginManager.Online { - public class ServerCom + public static class ServerCom { - /// /// Read all lines from a file async /// /// The link of the file /// - public static async Task> ReadTextFromFile(string link) + public static async Task> ReadTextFromURL(string link) { string response = await OnlineFunctions.DownloadStringAsync(link); string[] lines = response.Split('\n'); @@ -52,15 +51,12 @@ namespace PluginManager.Online /// public static async Task DownloadFileAsync(string URL, string location) { - bool isDownloading = true; - int c_progress = 0; + bool isDownloading = true; + float c_progress = 0; - Console_Utilities.ProgressBar pbar = new Console_Utilities.ProgressBar { Max = 100, NoColor = true }; + Console_Utilities.ProgressBar pbar = new Console_Utilities.ProgressBar { Max = 100f, NoColor = true }; - IProgress progress = new Progress(percent => - { - c_progress = (int)percent; - }); + IProgress progress = new Progress(percent => { c_progress = percent; }); Task updateProgressBarTask = new Task(() => @@ -68,7 +64,8 @@ namespace PluginManager.Online while (isDownloading) { pbar.Update(c_progress); - if (c_progress == 100) break; + if (c_progress == 100f) + break; Thread.Sleep(500); } } @@ -78,8 +75,8 @@ namespace PluginManager.Online await DownloadFileAsync(URL, location, progress); - c_progress = 100; - pbar.Update(100); + c_progress = pbar.Max; + pbar.Update(100f); isDownloading = false; } } diff --git a/PluginManager/Others/Console Utilities.cs b/PluginManager/Others/Console Utilities.cs index 42ff71e..15b902e 100644 --- a/PluginManager/Others/Console Utilities.cs +++ b/PluginManager/Others/Console Utilities.cs @@ -1,4 +1,5 @@ -using System; +using Discord; +using System; using System.Collections.Generic; using System.Linq; @@ -48,7 +49,7 @@ namespace PluginManager.Others if (progress.CanAproximateTo(Max)) Console.Write(progress + " % ✓"); else - Console.Write(progress + " % "); + Console.Write(MathF.Round(progress, 2) + " % "); } else Console.Write(progress + $"{speed} {unit}/s "); @@ -63,93 +64,183 @@ namespace PluginManager.Others /// A way to create a table based on input data /// /// The List of arrays of strings that represent the rows. - public static void FormatAndAlignTable(List data) + public static void FormatAndAlignTable(List data, TableFormat format = TableFormat.CENTER_EACH_COLUMN_BASED) { - char tableLine = '-'; - char tableCross = '+'; - char tableWall = '|'; - - int[] len = new int[data[0].Length]; - foreach (var line in data) + if (format == TableFormat.CENTER_EACH_COLUMN_BASED) { - for (int i = 0; i < line.Length; i++) - if (line[i].Length > len[i]) - len[i] = line[i].Length; - } + char tableLine = '-'; + char tableCross = '+'; + char tableWall = '|'; + + int[] len = new int[data[0].Length]; + foreach (var line in data) + for (int i = 0; i < line.Length; i++) + if (line[i].Length > len[i]) + len[i] = line[i].Length; - foreach (string[] row in data) - { - if (row[0][0] == tableLine) Console.Write(tableCross); - else Console.Write(tableWall); - for (int l = 0; l < row.Length; l++) + foreach (string[] row in data) { - if (row[l][0] == tableLine) - { - for (int i = 0; i < len[l] + 4; ++i) - Console.Write(tableLine); - } - else if (row[l].Length == len[l]) - { - Console.Write(" "); - Console.Write(row[l]); - Console.Write(" "); - } + if (row[0][0] == tableLine) + Console.Write(tableCross); else + Console.Write(tableWall); + for (int l = 0; l < row.Length; l++) { + if (row[l][0] == tableLine) + { + for (int i = 0; i < len[l] + 4; ++i) + Console.Write(tableLine); + } + else if (row[l].Length == len[l]) + { + Console.Write(" "); + Console.Write(row[l]); + Console.Write(" "); + } + else + { + int lenHalf = row[l].Length / 2; + for (int i = 0; i < ((len[l] + 4) / 2 - lenHalf); ++i) + Console.Write(" "); + Console.Write(row[l]); + for (int i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i) + Console.Write(" "); + if (row[l].Length % 2 == 0) + Console.Write(" "); + } - int lenHalf = row[l].Length / 2; - for (int i = 0; i < ((len[l] + 4) / 2 - lenHalf); ++i) - Console.Write(" "); - Console.Write(row[l]); - for (int i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i) - Console.Write(" "); - if (row[l].Length % 2 == 0) + Console.Write(row[l][0] == tableLine ? tableCross : tableWall); + } + + Console.WriteLine(); //end line + } + + return; + } + + if (format == TableFormat.CENTER_OVERALL_LENGTH) + { + int maxLen = 0; + foreach (string[] row in data) + foreach (string s in row) + if (s.Length > maxLen) + maxLen = s.Length; + + int div = (maxLen + 4) / 2; + + foreach (string[] row in data) + { + Console.Write("\t"); + if (row[0] == "-") + Console.Write("+"); + else + Console.Write("|"); + + foreach (string s in row) + { + if (s == "-") + { + for (int i = 0; i < maxLen + 4; ++i) + Console.Write("-"); + } + else if (s.Length == maxLen) + { + Console.Write(" "); + Console.Write(s); + Console.Write(" "); + } + else + { + int lenHalf = s.Length / 2; + for (int i = 0; i < div - lenHalf; ++i) + Console.Write(" "); + Console.Write(s); + for (int i = div + lenHalf + 1; i < maxLen + 4; ++i) + Console.Write(" "); + if (s.Length % 2 == 0) + Console.Write(" "); + } + + if (s == "-") + Console.Write("+"); + else + Console.Write("|"); + } + + Console.WriteLine(); //end line + } + + return; + } + + if (format == TableFormat.DEFAULT) + { + int[] widths = new int[data[0].Length]; + int space_between_columns = 5; + for (int i = 0; i < data.Count; i++) + { + for (int j = 0; j < data[i].Length; j++) + { + if (data[i][j].Length > widths[j]) + widths[j] = data[i][j].Length; + } + } + + for (int i = 0; i < data.Count; i++) + { + for (int j = 0; j < data[i].Length; j++) + { + if (data[i][j] == "-") + data[i][j] = " "; + Console.Write(data[i][j]); + for (int k = 0; k < widths[j] - data[i][j].Length + 1 + space_between_columns; k++) Console.Write(" "); } - Console.Write(row[l][0] == tableLine ? tableCross : tableWall); + Console.WriteLine(); } - Console.WriteLine(); //end line + return; } + + throw new Exception("Unknown type of table"); } - public static void WriteColorText(string text, bool appendNewLine = true) + public static void WriteColorText(string text, bool appendNewLineAtEnd = true) { - - string[] words = text.Split(' '); - ConsoleColor fg = Console.ForegroundColor; - Dictionary colors = new Dictionary() + ConsoleColor initialForeGround = Console.ForegroundColor; + Dictionary colors = new() { - { "&g", ConsoleColor.Green }, - { "&b", ConsoleColor.Blue }, - { "&r", ConsoleColor.Red }, - { "&m", ConsoleColor.Magenta }, - { "&y", ConsoleColor.Yellow }, - { "&c", fg } + { 'g', ConsoleColor.Green }, + { 'b', ConsoleColor.Blue }, + { 'r', ConsoleColor.Red }, + { 'm', ConsoleColor.Magenta }, + { 'y', ConsoleColor.Yellow }, + { 'c', initialForeGround } }; - foreach (string word in words) + + char[] input = text.ToCharArray(); + for (int i = 0; i < input.Length; i++) { - if (word.Length >= 2) + if (input[i] == '&') { - string prefix = word.Substring(0, 2); - if (colors.ContainsKey(prefix)) - Console.ForegroundColor = colors[prefix]; + if (i + 1 < input.Length) + { + if (colors.ContainsKey(input[i + 1])) + { + Console.ForegroundColor = colors[input[i + 1]]; + i++; + } + } } - - string m = colors.Keys.Aggregate(word, (current, key) => current.Replace(key, "")); - - Console.Write(m + " "); + else + Console.Write(input[i]); } - Console.CursorLeft--; - - if (appendNewLine) - Console.Write('\n'); - - Console.ForegroundColor = fg; + Console.ForegroundColor = initialForeGround; + if (appendNewLineAtEnd) + Console.WriteLine(); } - } } diff --git a/PluginManager/Others/Enums.cs b/PluginManager/Others/Enums.cs index 6ace192..322230d 100644 --- a/PluginManager/Others/Enums.cs +++ b/PluginManager/Others/Enums.cs @@ -28,4 +28,6 @@ public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL } /// public enum PluginType { Command, Event, Unknown } -public enum UnzipProgressType { PercentageFromNumberOfFiles, PercentageFromTotalSize } \ No newline at end of file +public enum UnzipProgressType { PercentageFromNumberOfFiles, PercentageFromTotalSize } + +public enum TableFormat { CENTER_EACH_COLUMN_BASED, CENTER_OVERALL_LENGTH, DEFAULT } \ No newline at end of file diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index d88caf3..638b6f1 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -38,6 +38,11 @@ namespace PluginManager.Others /// public static readonly string pakFolder = @"./Data/Resources/PAK/"; + /// + /// Beta testing folder + /// + public static readonly string betaFolder = @"./Data/BetaTest/"; + /// /// Read data from a file that is inside an archive (ZIP format)