From 4fbea983dadcd36d39cc673cae2d9fba9e7ea875 Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Sun, 5 Jun 2022 13:21:46 +0300 Subject: [PATCH] --- BUILDS/net6.0/PluginManager.dll | Bin 63488 -> 63488 bytes DiscordBot/Discord/Commands/Settings.cs | 17 ++-- DiscordBot/Discord/Core/Boot.cs | 2 +- DiscordBot/Program.cs | 15 ++- EVE_LevelingSystem/Level.cs | 4 +- PluginManager/Config.cs | 90 ++++++++---------- PluginManager/Items/ConsoleCommandsHandler.cs | 21 +++- PluginManager/Others/Console Utilities.cs | 4 +- PluginManager/Others/Functions.cs | 68 ++++--------- 9 files changed, 97 insertions(+), 124 deletions(-) diff --git a/BUILDS/net6.0/PluginManager.dll b/BUILDS/net6.0/PluginManager.dll index 58b27717a2233aaec05de06d981fca39f72b7025..7cc60a0e43966b72d2dc8aafab2c8c98d36c5ba5 100644 GIT binary patch delta 25993 zcma)l31CxY*7mvgCO2uCq*>Z@NtdK+XbV!=_tv&5`>uj0t!$!TphZPXO$%-yE_e|I zQCk6*5l0!+K}Degj;P~4DvC%2cRt5$98tvoIp?OdxP1SI)90S;J?Fgpd+$v$O~faWAySJ=<7|MgHqPOT)_5UbQX1#-WeKZ%6mbxh zm`ubB&(ZrMdOG_;_0S%Xi*ae3$Hmmf`Fu%fyo4`HSOzDF;$&V7Tx0>D*xys5ad46W zC!|IeLgq>+O;96spd2OMNIkAJ6SL*(S8aJg9S?Z25g<4zcQWaVdYeLeNx&a`Y5ZO|99#cV3NJu3Q5(48@ zql-DDkF*E|l%u$>8od%%ErNkqf*#`Jhrl+ITi^ldAg%FMcroqtIOfTS{ojjNO>Y(nQ2a{V?f)rSyv*NzUncgaDHeb9d+R?n zRxQzGTwl&c`UJHnRNhN<_oGeJ=+)3h&R_^}1Ju35(nwECC%vn5 zokc`^tUB3;YWi4Z%nt-(zqJq_9Tq5Ow?#0gOB}kb*N4T~Y6GUBgRcf(&yUxbRGFU+ z)zT<(WFPElq5klLns}*xHD{nkZo?%q1rRu{U`%7FOmiwnCSO(3E=g5ONX8m!0U-O z@QFtKU4(dm=wFPl((a8FqaIZM5Zp(maT4{LnLMA#x+3oJ23T04SR)+Kzp{$^K9VE) zDD?4F>1L31ZGiempm)^mJ;7t%I}&yExL%7g^;^J2{{|oy&EW3lg~JhjjAb^+YS`>? z7Cq4+x`0K0XVEqm=}{~O@pNs`r+S`?Y4=H5oW2Mhr^XvDX8b!NBX&X>ZG>Kn4j1J7 zG~V*{=m!8^r>wHiO8#m?8Co9W2vz7|GI95q|0*8_{>afjafJ1tH*YApSO-8D*9S|3 zrO35&d5AuZHfZbxBQ3h!cr}<2!z!)kgaXllP}D!eEi{XLl{nRU6peGL9$1$eeU|w- ztYtnB?aTaJiM*mSMB@N>S0nRSUiUFKVF-5SzG0zyteoAEQvDau;}{idOj5`~dZ5vb z>s8nnEYTfoUsqx$(L-=#@SsW zx+v?Gv8#lWU44v$nQ2+j#HzUc7PjAEC|Um4C!N6@oxwh2gD=@(;>iv_?KEdiJhvh% z%*y~*IZrnKtkaw|aq|W?zlP0Sv6JmT@3hA)L5Kb8Z2t}bRX@TOomDS>gQQJW%~Jmy z8YH@l+cqaDQo+|cmyW4kmj{%|ks1l0I1fk*Z@<(76V+S)HDnIm(&$G->@W!OO-CAL z!scYc9!jTh&weZRYGX3nOLP?Zj*IN(46qS93bDHItnG#}J-N*H@iHl0%lrpNPrd$m z*hjK3yUqIw-qJLhiGpRu!`T^qUw}HXq{OF0_JVSfJ^CW97@v`saK&Le38I%-6#XX< z~OMVm^B7zUKyu zyaq@0{fwXo>nMCaLP3dEJbJN}L!z#KT;Pk1H4~+h~!<7$>rMdZO2O*;aDQeE~#?z68x&*7B#TIEd zp3Ob$T+G`pOG0ENT7XmwA8d4bEyAbsJ5fA>d4^jQ1(Uu05J)|G7#RJS0kgufi7gA9 zkz2T!JtwJGq8ho`h~}kFL2G&`5W!r)5bJBh;KH=Vs0+nK15b!jO-U}%*A;5y26(#o zTt{kRz*!Q(`Qv8r5lj*65Cy5{Bt||p+VdjLlLRUG5xc|*L_RaB^TRRraa@tZM|zSH z!Gv+t4dr-f0Ed}JNot2;!pRCM85`I5>^X^P5iC&-pWPBE;H|}HufxK)Ac6_z0Ar2( zk4eBD80n*Ljl~6{mG6z`3-Xlz7+(}D z&iR4e9LVIJ!Wqe;CO3|k4#VDo4*RdsTsTJ=V0>Pfqx@(j6#dTKIYsR5z9M$_V$n(N z&Nkgm6?f;v-PK0s%*KGmXg!L+GFq+u@5ZdadEzHXgPj( zWLTYepu6A3tt|1A&7_yGCSF7m@!BFbE^{FA|24Hm>_%>Ju`_J^ba;$n z#TPXW!lj;k8*1rTCBv9dT9F-ukPZa79p)fA3`}gMSV=AfMly{prTvt_ z#^SIKo^GMHh7>-*~)x$jO$Gd_ZcXz-aHDlT-*g%FCqR;o;#ry0|lA(sWOKZdt?we=`-F8_wkxgE^7kE zQEiQbafzvz_d~dpf|-s3MF}0a0DCJWiRu!*98bx{&Lax~mxHJG;E4`|{TA+6@s(^Q zA&&4Qt;<;cojQ^UCseF>coDRb`oJSbMz4(Y5^N+mNXH)~@TtQ}xHF<*#^_!}ZXBQV z=ui~ojdz%_wAU!5!g#e;o^qP;U9UymDxoPYQ5)_;gQu^no6Q5f3bO9WCuH+PX57;I z8t3&O)dnoWmgv<+xX*yJYR<^qy$wj!C98q9$mvF1pD{|g(blI+0^E|rj34@N0+oI9 zVyB^O<3=u3e+HAAm~3E7yKy$}*nzr_5bxfCRP!1=lY{-n;*+?AngGi`wDaZ-K%g3xG#czw_9cZzbRaYMfmNx$)69PZaU-V)dXxFz!Y_v<=gTeu=iT7j6b zb^XVnzHR+;{e$_C@SE=Vp}(}o0Pc=C14iSJ_V|DX-*8m)-oy`(57h-wvHGRPX#*!X zmw;3o{%*!>88}p_Ha;8}P);{~7&r#ys|WS?O$@WeuN}lO-W-&dDlPsDXJ@wfvrI;E z4cFjM>|Jg^Zfd!v)%_&b^g5pd^2Ro{Y+(D0KkS==w0K{opWIgxp@BKck@giar5BfJDi|i|7~t4_F-KEoo_i`mx66x=8W@l36S>4BhRJ})Spd`wxxxY~DUdxSM@~Dr3fYxhg^Mb?q2*Rr z_D5U(v$7a%`6K9RqpT{|jr#*#b`W05%8c5o(bzy9sXAXd$8cBYD^rYK)g#KMBHYF2 z;++1%X;Y)Jzp4$NAzlOS1aNPz6_(hvC~n@ckak%!WzpQE5uI*4Qyo&CGY(V_aGwjS z=rjPg@p(qU>7$hMjk?qOD!YsaPcP~|oz*oAwSdM?rE0jPv_wU70c&Oe_*6O5_ywhB z86(aZqs%teo{^O_ht+Z@zzY)`3ig~aI$L&!53rMRf8$0Ijk%lK`9j#%&oz3US(udH z(P(mB+Gor&Zp0}cL*ok|hDOcs3j=4! z(7*}$q!DTy7@qCEh%@Dl+iZ5nh~a4VNh5}&nR~L_x^Y2u$uS^r&JT_#D!&*7np!YG zI-5CLi_U|zQ*eRWupSm#bUwtTb}f1dt|dyKxJP}v;Tf5E?wQDnw43Ip%2^bH_5!Lq z9Wyl&LNPLL*`t_$C*4=qT>=a9=DMy<$SB-K7BHCQ(4DUs*NqHM zjhvJz$*TK|MRj=Zw!n?m0>((lSTd@*XfQ;-vAvc>zqS2rRHi;0?NNW!aE$J&k6`kc zar)?iSYw(;mxZ54A>Dj(C^7k2hf263p;2u5D;aN&9-x#Mt}(ro(MH9X9A&CeJ0|Eo z#3Kv?Q7>q+@spaHj2p+~4>`f%jE2|C3>>6uMmoafdhdKIN9iMG9ItTM( ztntm*OQ!H~Jkp;VzNAR@oj8+G_Zk`_&baE{>SQQVhg4FhMDTRa5n04(g?>WbkrQWh zo~`?gZR3VxF;d6(z@v<^@hNzeamM&Q$~dEOe42Y0sxC9vTzWT*Kl2osfd|rDe5%7C z4O0QP8kU3zmRcN-e&31zJMsLt)A1@XsY9~`yf1knQm(?MMg z$ga=NK6n=fYC{2>2iDbn%vyHEhrhV&KOHi>9QEs7y>yrw>^K1^E;%x&4X2pKyn%;B zmTtzow;-dghy{_wNV*YiY$@rZ)|DBSNfk-h6U}Cny?mcBY0_xBv}0XAm+|1FOl7$7 z{G>eGw0^ zG1fIlq%#!XI_@(H&KliYLPap5d2?c8G{6>=l-oOhqBn7Xf-|&Q|3BOjSduMN_q1`} zSykpfi91%_3t4_#{|Y8u_DS6Mpu*X$0h8DAL+!K$?0?APQ;jd z_NYop-i*<}spQPe!yv}LuXiLzZ$$~zi4zDk`hcO&w5}uE@AA3O2tS@ZI`;qfgU;v} zpuf*E(!djl?_W6>E@stvtk%8B6q% zrn*EoN?iqEVIYDh%5X03xqsjux2~94#lT3D@#{IWZ07vxW(=K@r(#;&GG&}H!Dyc{ zS_vDcOihTyfR;L5C`~eAhmP0b1ydt&UqPdJY6|;$VrsE6(P*FA z!`+NLy3F^ib4QxDacTo@87&QXmSJhYII={S!ccB*mx17QyCl?0y zMC0>mePTbSL44@vH;V!B!8IWryE184W)QebxI3RP^bG-7-tGL3w|Q_ zdNRw;OXjlGfidYimFF`qPG;N++Ckr0w>TVhzGaJJBt4!Z?^6#$q|-V-8+|5)wUiHY zbgJ^RqrMi#)J)c9XE8lMwEMH?hupL-?JSR*-c35oqtoZw=V3QpCX&muSw3Ir7d@;^ zgP*Y+l6-Vy&Y1L(Xi1Ohb0c70KRjstbNGkr{Y2Bmo0@^u=N_IX&R2^RMAj&)3WHvLb*$jofYDr7t* zZ)Bz(qcW-AVdSpU67T$wO=-*K27gwYA4-bTeUL;h-5D64fmT7&#p-tMD^g_D1;OWdl`qJ}srcSYmlHHSG&QX(o zsw!Z*J(ck_WQ}4)+^>&nTO1j*u7DjK)mi>E-0Adf#+Y;;HA@G*gHA!0q23v!6@7~q zog(94ftM{C;L}IrePhy#X_oh;OgC+dp@($3OOnXUW20ChLOtlsj4=pyRMPr9iPLhT0;kfYt`7n_O%AgCY6<)XIz^|Q==BVG4i(6t zThS^yy{pB>q`PUM43^3~PGvq!`_kle?#uO_N=G*3<#2E5+*|ZUkR3fC_?ci5>OGKr zKJJd6v@vNq-IH4B7)VQUS#n>_pkV-CX@~}kDs&ovclINpo7>uV;_k13tUbN8Z)L3v+Ay3@rvBKeT3H~EI8XB4W zMtHypZX;$BbC~VW{fenQ0JMdg!Mz=LBdeNX8a}4S?E3|K^Qu96VeX-SgiJ0)xI2nW zE{zmKsZQUU_W>-kgIjS&elT*g$vPO;bx?>E=(2F1gAgb9)Qy@RioA(`fGS=-ee_A*yzC} zS++t~NE4)-H;cJq`S_rR`g?2$-wSW#I6_)BbNwiGv9QyH9Z2=m3P=A*>J!4+NtX#X zrqJXXNke#?#}IlDH3_!`jbDv4mkKvjxYOtw;a1{sRgDi0UXLdC&^wvTjiehyH&b+D z$cPF19EN%|olR@Zg4nOCsfN}Hca)o)=FocKVix8W(LKWLurU{-dxcvh65gzi<=ke3E_H6h=0NQ)u-C~^8Ty+BqdPQmIoMNyTP zggZUXy-HfxLl5IbP)(}xrnvd1gs>=YLqhbBlgn9^cZGXA&h76~&Z-=gaxGHMt$YD4 z=Aqt_n@9N{Q63VdU-??NAB9U+z7@_Td8a7f3-^T7KA`*{+&=8^7~RTI;f@IxQjQ6i zgJi1dROMIUP7|&ls#u8r53finq}KyCC6&>>&?;bM?%E_>ztd5roz=9=(UNpl(`|xF z1p5Lzv{M}$p?x)h@k7DUBJl`b2<))@I^hA>40SO6N9YTLwmD)CB=x21vW94V=`O)7 zg0~9Z4-8Xr5@WV|b5fW#xrb;9Mba4G10AO2f>FWGT#v)1Drp<=zwYfg8YQ?6;rLPN zDzb)Yx7Z|!w>JxRB#m#HlQkr!jc>XfVa7LQWia*xdg-#H-AP`0DCy-StozQlfa{$5 zfPHfg!09bXYk?Es4lA4c5G?oS-=s>|DQA`}L4dOb~nR#@{4VB;GbSxb|;|H#6il8LPWk zt_A&fUyK945WW}go>F;Om0Rxv{iV+IC>zt?NbP&rIoMTpmh?#22JL+9FJ0VmOZ?u? zCjD{PkFv41Z^YZ>c5anx#hX9jz8KWk{ee5q&f_hmz2Y~^7U(_aFf zZ2uYpo6FJp($gK?*EuqHNSc9ldNFlB=&0o|&`dNoHH$;ORnP{JE1fenCq~y|_h<0D zIHDc~+O3}hztkD4ZC?SewegU=Tn6S}?cYH%U;7!j*J{Dd`L}x4>hWMVqnJJ)j!9EI zXYI(hFHKE&-Ws6C>2a%0%l+%EEOB`QbUFEeU)bNmN_T$3KHvsR5R#zI@}DA9P3sKw}##?nhfs8IQLa(x>u$AFyY@C`YQA!PQ~ZMxn+UbUK>3S=T-)u zqy+jt&dn*>tR_+<7sX;I_;S%Bij$@>3+@@=Zi#b^MYFw5+7st44Qy6j^hTUp2sdu} zP`FiTujM?VB$1M5dU-SLVs8>T;@kt^yp$a0n$s3}{dA6Su{HEU+EQ;a)x?$Ky*GGM z=wN~A=KI3iFs%9)F=sYg8dV9mh9;!W_NLJtac&;Cbox5ZO|;$V&7j_Rc)?Zr5nPZK z3%7~}q;B$N(xbv%8lwq17fr_umuT zG+zas+JnP$H_g_oX!Z%tgPRcJ1UJ`r2EA-@bXFnO|KT(RpI$Hvdce&yIa(k3RUJW( z#-6r2zfSXNgg=@BNOs!GpP-~p4%wX<8(^7hS4(&EMy2tsT zK9>gfWuF}WN8d#>TDUcKE%dAJVwx1^JR!S(9>u1`*(>vX{`oW`&Rvrq^j|{rgu9l` z%~dE$<$UW)&17*cvqouAocr3j%({Rch;y~jEu`fBrsWRk>gYV-uCbpIl)czH&EsvtpBXc_w1mnXxt!^JJmDIAEWDqyOshT z4{B{6%sO-4FQq);%>G?Uy-kj;z$=cWv>?tsfpT?jyhdWUk_ow?aJByFt~4pGi$$`j>UCsxttCT?X+A@9|>n# zuAn1v9b2xTZNp$0i#uIGPce&waj2+Oxq+UGa}j(b{RVm|&b^6tT1julxew7XD`|h6 z89`%*@T8!@`>NHE3HUE6w^E z^ptR>1hh zc&F(adP+Fc>Fu;Tu4BvFY1*hx%iHOE;Y`ar=)$;;E$^UXV>&JGpyR?_n-=4v&|0#O zHI;0-mOSG+P1h3EWc)LouA`uE%kce(wf=R~t&8qX>K!k~Uhbsz6FR-zNp}lpdRb2o z#C5O7V7i{xPwq5bPj?Gvn%+eZ#C7cSE()E~X?Yjr3TIm0O{H-iTi#8c^Exf>CZBMo zZW-k&u@?V5@>OD<2j8g*wNOJB(-yiq?uMPVQ19uTPFtw2aHi8%Dv#^fvXz{* zotCZS7S6Q1m(t=oSn{*G{ugwb-b(|8Gfg*8IS-_i*6%r6wVw$;AVIF z+(`EcXZqYkkH&SJXlxU0pVMi&iAj8Ih)u1^eR1x2WrTN`^??&ywRe;M!4upd?-u{& zIA@l7_=JwjJ#vEMa*v+ixZKtlJuBhOh4nFdQ8+Wx$LLMrmf?}&tJcTp{VuvE=x|(@ zs3q%9oD}}=Cqj(yZu38Rf~)qn`JXw#arj-l{&m)O_X#BzeEtN-1z$YDalzN<7YT2s z{W>LF$Z9j~*C|=JWq3yXnjhR;)?swnxB1_orZ_hzVVnPLIueVsoAH?JJ&Igpn&#`T z`QM`p<6N@sHUIncSe%;;Za;k==iK(!{2x%(#azw|e}MSg-yAT2+n59NTAbU14{{u! zgn3;pef$k@Hcg`z{{ae#av8mc$NV4CRb5O!r0e3kfy!(C59zipx`T9gTsKmA+kcR@ zbkVibQ*qsN=-TO@U34GOyEuO!yg6n+qH`|cWXwhPBbq9lS*JrZGp^$?dx%2OPRm1- zE1YS0m`dY1wmeMRFYB~COwS5uT7FC~fJ1yU{KvHY@=nu_=~>}S(@*GyxQ?BELi{cC zjzm8JrO;PJj8_9yJaps{HLu`g376=Qbg_)Zi(!L6u?}QM_<4mKcIWZ`mfntM;tJ(? z86R*k28%o%m3oNf;#8KrgR(5|#J}X5DX`=QAA8;d4>S2*X+_8~Lb%iW319VGg z$tM|Hr|mcjS@4X{5lHyC^lToFmJ{9%}EQwLI z7+r$^3Ldbsnk5}{r`(j7X{pp5?`}2v1U0r$i`13V?U3IpRqB*fbTw%>L$j;3+5? z5Z|#!?`m{Za{psVM=;i!r4&k&S-{>jX%!2V$p|n#50)W0M_L!iEGxSjaaMD zEb;b#wKT^ciajJvv=$f11k4rPy1{ z92zGp{x^4Ky?<{Xmel`D-q~7staqa2F!FlJ_%uc4(8xY{fc&<1jaOqcJm77Cq7f6JMKA9E;<70#wo8dbCycz&P}@3c2MmqPJ+;R@=eJ?~fWxy$>V>mXlP zv^C2qJ3L;O^04?9Y1CpNUyJ0gSm$d`Z9|Are*hKAg3@3|r+(-Tkk`4La;LS3h z!z#2s1&K-~T^h&-zLDz-=}wn!?rO6=DHZ&qUqk-LW$YHRV$u;ohM;2QM`?Uww_ zz@tT5)aBYIh1=9JZFBxV)K%K;`ERRhwVTrSgYI4QHt zmV`D-LXU~$F_Anbk_T1pg6;B>c8fOHf5h^nR^t89vPFA5aKy4*UfXV$*S6bS=|Xll65`ntL(eTmgceA<6mjJD8y-qoP_1;*>z{`3~$!=d}E`{l*P zetF5UUyk*MVb8VvThS5N^I`r-TvAmO(Rb5#c#5)5yVTPcG|#DIM2Ri4elKB;3ASsS zv#01+sCGOdwV;t_>rTOBpjELb{MaosPV-Z?e4(8pFOAbIw;rK$hadn-sNMuVl;Q8b`csRFIqdMljWD3SM8zDX;!O%l37+g5l7v^*83 zDLfUclvx&@km*)>y0$za$KOPemogPDukJ_(L z-gP|zEXUJdrWrrOL#GFoWB#}7UQ1=-d-kg({7MOr53QgED#ynpnjJ9U4mETh}~3<;#J4T(7cZ+*A=eA;`6d2!Lc2tA;)fHcdFxMsq4#58##^G!^BiUB)1jG;3azFv>UaxdVufSBjEM@BCvcheZt7i*TFYR6SeWIF3l; ze=iB4?=WzdTev-rNh2RqcwOrTcM5g0Jnt$<3|syYC{8@4@H_Kk3a@?3wdWFhL&9&+ zj-jRdYZkP}PcfTQ8f3Hds8eOvz42aXd19GHxpz6ruzua;*et!fS$cPrOw>^_gUhsD zks(@dnpW7Vtg_sl`H+1TlE!lRmlXN?c9qocL9)}vBtI_ zYby%Bm^0V8%EF?@B$dY`W?mDWDz+1xs+UNNR?g82ZnT(Y|mwTE7n<>F&N-(xx z8Tg-8eHQzEcb|Ufux*L zfM<%$D6ttQHj`pvbPkMEI*(#WK5B)L4<9@`=62I&%1CnKvt%QIkI`b_HlUA2D{M1M zaIWBd!ApTIs#cp}GhAhxZv+dpW9|ZcSa$?o*JY3;*n<+0L=VDELrHQE{4iW^U>;2b zme4d{FS->th&BN$=~3WFdImUAQ0xW5H`gVTij8luLT*29azM+$!>2BHtyFU6T7Aq2ClO9$TQ)A(0#w z$;U!}C$y%pR#Uk4RzW{-MS6kIv0lPd3sa-i(+kNpN&{*$OC(K@{5QEtB+JCnGLbJ+ zxB;&bdbyH8Nx==G-5`<;qTM9)gQDF9?TYkWBH1H&NbC>Ag!x!dQzcVXG8GKr-L{gH zC-OXz6bP1!yi(+qBB>Nfwa_(cJr$JS37sLVql1)i}jGjmws6coCISu5qwRk<>u4KBYz^Gc+C_&2hYwe$H4XbZZ>% zj6t+Pn2lNn?F{Zj;kQ$EO5rw;)AQ&{M*$n%7*h$CB8 z3SApVmdpShQ<9o2_2dmSS-1vG;;31Sn#IvFp<7@xG0-A5ts-d^?FOOSEIg^&;p{ywTn%=$lImtA*N$VWUZ&Y0kU#<#VR$kO3j3}Sb405g$|26Pv}a)8Y|a( zhR{tyFB7^&=nX<|v}RCcaHmLiiR7Tr?T{x0W9=ep7uSb`CcIchDmtr`I4ubY9TE)d zoK~LD<$@I=sT8_K=aEq>k{Kdt5=pbr%{qHq2FVC-OH354qG%Px22t!3d7H@FM7~St zgCaj9v|`JkjG$&?M|pzfwt8}=mfK`7+PE4ukc>{P5lO9$hwTiJHwiAY#n`Atm<@t$ zVzf)>-Jn;bAB2k=QxA%Zc7!Yr9uh6t>*@7WvP;L=S+3dHTL|*xw2;WdkoOIiLozn4 zTqIR?_E`hT4QVy@20XM$YK90+0ntCwTEwWu&i%SkOm{-=P2VZ?uLIDS^v| zgboW`E_8*^RS6mNQm{rOwQ=OeZxXs0i1FW?z@iorwZ@SpJB2qKAtCYWp(DIu z!E%vQ2wfv|tQNOlWdi*0#?x5-^k=cPBr+&p~R zMAR;*VDCor3N|NkJz9l64Emj*;$dyb!(%=ybcJB8V3Wt-nhD)1*oH5!R0a=)U zSNsc>dt+RnLYNw_G%`MHR2gg%x;$xq! zB5xCHhrBXKewHhKro)02{)`xy8c{U+*-@(~c8a7;B<+wC2Sdq{XfoT>CQFJUX%@N_ zSR8B<`k=_$g$|`iJEd@`e4w6Mf!_+M4AzRIDaDZS4-pCjrvwi|q$IVAS_yD53s6rD z2e?>yK#~x;S@3G$C&3nxw~3@(N-3%AvnG}8Yg5@zGbEM4t3j_wZxwnYXg!v?Q;gcA zz-|_$TGH4kl*Wa_X%kxIDiM5M@GFYT!hzr3A!CJv)!4}wz@NNW+HBo3K$o8QimkkS@55&|Jx>m4R zutjXzgWSeSrbH2}h-Gs9s=y#e5jBgXC9@u1O=`*H+0iQUosfK*zEdP^BB88$8k#{_ zvH)kX(^|nM$ZyMN5_z*oS_Rt#+XchfY+sQblVZX&3$|o)En9_d6Kofx9Bxb{htmxU z)`+Azhds0k?i5M8&`OBqp^$W9NIFp@wV-DOn?&9m^2NBYDB7SX4z>%egt>57up-Rz zTES+)R>5}DCRZvT*euv8*oH4Up?>&!7DjtM)6IgdB54!49rW1Bpi&@p608ucEsz32 zw+h`R*bYf?FkHyk48+n@$d+w_VZ5UnVbrcEh`pj7QvXM_YF@2S8?RlZZPUKc23o2u z<1Mo+3oVV7)s_~^X3I9qZcCDNpmnhRH~k6y4c&t;_dxn`N7Zd$p3oJ5#YOirZdwR5BeB43660606I1EC*UvXzXBgfW$hUmjHMwh znP_>w6SyEh1$dd1TJ6dL-QUADr(`nj7CPc!Z%H|f_E-jAJQ8@A7?l=A@huSUCKEvq zCl}}uKo$3B_|z&sK9~f0G{yM)XJhaUG8I2N?*}~&sM1;ZJ!utRkV*xfi--OS9z>^u zK97Q+&j+e_4xI&h7Eq*VGLT7=F;0F=%P={%tyV3cei|GQ;#WWLi30(-fgf0Tzofd)a zPM3l1L05wAK}$fNg0IzuflEQ3I*wL?IhAe#gZpXFz3`+h56=R=0$omDgRY?OL08ZZ zpiiTpK%a(ZN_n{FCN&IH)jWLpSO;B2cEhzUCzh@C)XvprXkTlmTF$mCv+TEAY+Y_$ zWqsJX-Qbce~oPyPy7@UAz0GKaf54`?9m$AIOX0lO0|h{(azMcx!udGVSig z&fm*2q#`G`%$-Kk`n?Hb=?1*YBpPqDuOAlMLr2v;c&fjL&d@%jMcRMqu=X=0TYkac z9vW#$Ql{g2F|L6FqCmQLNS+rKj}_#i{>HdHQH2PoGFNwwsk2 z+h}^hHjX~F-LItE$H;Yv{Tby_`#Z`r_D_|g_{)za{H!cVu&SFAiqxa{t8@%g8yrRI z-yEMRln6etS-le14Yo550>nu_iI3H1Oa^9?jlp=LM_zYK(+SB!^GTk+r_TcYz z{2jvIe_Zz~e)s)KA^tAJ-<9}Viof0Xd)H00HFWn+it*x?!L6w+^@^o;O&J-@M^f;k zs2f`kBv&t9R98D=QAOR13+G-oYv|1B)5}iX+H~*ricz@n>#e1mp3>d*vldN1yKe5H zS;H@xIqQ()L`Kdf#&@=R1QF5Izpt9R!?%U0{2 zrxl~^`5jwt{l{fCRXb&?{_3yzzbJ5Q)!sT!!B~Cpy~+1IFtVWf{>EN^z4-BY!?!N@ z*R!fI`rRzwUJP~B+q^fyruxoF@r_p8#>#gOE3X?1_f5eM!M?O_k8Pi?ng3_p{@yaB z-3Y#)llZZw`=(fle9fO5)$eb^4}2bf|CzL-N{X-fQqAqg;BbSH3CV8v5a&vZ|+ZtNYuZG}SqDtM`Y0gSY)ZC~IsZ delta 26603 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 d = new Dictionary(); while (true) { Console.WriteLine("Please insert your token"); Console.Write("Token = "); string token = Console.ReadLine(); if (token?.Length == 59 || token?.Length == 70) - d.Add("token", token); + Config.AddValueToVariables("token", token, true); else { Console.WriteLine("Invalid token"); @@ -53,13 +51,12 @@ namespace DiscordBot if (prefix == ' ' || char.IsDigit(prefix)) continue; - d.Add("prefix", prefix.ToString()); + Config.AddValueToVariables("prefix", prefix.ToString(), false); break; } - Config.AppendToDictionary(d); - d.Clear(); + Config.SaveConfig(); } HandleInput(args).Wait(); @@ -84,7 +81,7 @@ namespace DiscordBot if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp"); if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs"); if (listLanguagAtStartup) consoleCommandsHandler.HandleCommand("listlang"); - Config.SaveDictionary(); + Config.SaveConfig(); while (true) { Console.ForegroundColor = ConsoleColor.White; diff --git a/EVE_LevelingSystem/Level.cs b/EVE_LevelingSystem/Level.cs index e4d6376..dd8329f 100644 --- a/EVE_LevelingSystem/Level.cs +++ b/EVE_LevelingSystem/Level.cs @@ -16,8 +16,8 @@ namespace EVE_LevelingSystem public async void Start(DiscordSocketClient client) { Directory.CreateDirectory("./Data/Resources/LevelingSystem"); - Config.AddValueToVariables("LevelingSystemPath", "./Data/Resources/LevelingSystem"); - Config.AddValueToVariables("LevelingSystemSettingsFile", "./Data/Resources/LevelingSystemSettings.txt"); + Config.AddValueToVariables("LevelingSystemPath", "./Data/Resources/LevelingSystem", true); + Config.AddValueToVariables("LevelingSystemSettingsFile", "./Data/Resources/LevelingSystemSettings.txt", true); if (!File.Exists(Config.GetValue("LevelingSystemSettingsFile"))) { diff --git a/PluginManager/Config.cs b/PluginManager/Config.cs index 5cbcee5..dee04ae 100644 --- a/PluginManager/Config.cs +++ b/PluginManager/Config.cs @@ -1,86 +1,76 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; using PluginManager.Others; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; namespace PluginManager { + internal class AppConfig + { + public Dictionary ApplicationVariables { get; set; } + public List ProtectedKeyWords { get; set; } + } + public static class Config { - private static readonly Dictionary ApplicationVariables = new(); - private static readonly List ConstantTokens = new() { "token" }; + private static AppConfig appConfig = null; - public static void AppendToDictionary(Dictionary dictionary) + public static bool AddValueToVariables(string key, string value, bool isReadOnly) { - foreach (var kvp in dictionary) ApplicationVariables.TryAdd(kvp.Key, kvp.Value); - } - - public static bool AddValueToVariables(string key, string value, bool constant) - { - bool req = AddValueToVariables(key, value); - if (constant) ConstantTokens.Add(key); - - return req; - } - - public static bool AddValueToVariables(string key, string value) - { - if (ApplicationVariables.ContainsKey(key)) - { - return false; - } - - ApplicationVariables.Add(key, value); + if (appConfig.ApplicationVariables.ContainsKey(key)) return false; + appConfig.ApplicationVariables.Add(key, value); + if (isReadOnly) appConfig.ProtectedKeyWords.Add(key); + SaveConfig(); return true; } public static string? GetValue(string key) { - if (!ApplicationVariables.ContainsKey(key)) - { - if (key != "token") Console.WriteLine("The key is not present in the dictionary"); - return null; - } - - return ApplicationVariables[key]; + if (!appConfig.ApplicationVariables.ContainsKey(key)) return null; + return appConfig.ApplicationVariables[key]; } public static bool SetValue(string key, string value) { - if (!ApplicationVariables.ContainsKey(key)) return false; - if (ConstantTokens.Contains(key)) return false; - ApplicationVariables[key] = value; + if (!appConfig.ApplicationVariables.ContainsKey(key)) return false; + if (appConfig.ProtectedKeyWords.Contains(key)) return false; + appConfig.ApplicationVariables[key] = value; + SaveConfig(); return true; } public static bool RemoveKey(string key) { - if (ConstantTokens.Contains(key)) return false; - - - ApplicationVariables.Remove(key); + appConfig.ApplicationVariables.Remove(key); + appConfig.ProtectedKeyWords.Remove(key); return true; } - public static async void SaveDictionary() + public static async void SaveConfig() { string path = Functions.dataFolder + "var.dat"; - await Functions.SaveToJsonFile(path, ApplicationVariables); + await Functions.SaveToJsonFile(path, appConfig); } - public static async void LoadDictionary() + public static async Task LoadConfig() { string path = Functions.dataFolder + "var.dat"; - var d = await Functions.ConvertFromJson>(path); - ApplicationVariables.Clear(); - AppendToDictionary(d); + if (File.Exists(path)) + { + appConfig = await Functions.ConvertFromJson(path); + Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords.Count} readonly variables."); + //Console.WriteLine($"Loaded {appConfig.ApplicationVariables.Count} application variables !"); + } + else + appConfig = new() { ApplicationVariables = new Dictionary(), ProtectedKeyWords = new List() }; } - public static string GetKey(string value) => ApplicationVariables.Keys.FirstOrDefault(x => ApplicationVariables[x] == value); - public static bool ContainsValue(string value) => ApplicationVariables.ContainsValue(value); - public static bool ContainsKey(string key) => ApplicationVariables.ContainsKey(key); + public static string? GetKey(string value) => appConfig.ApplicationVariables.Keys.FirstOrDefault(x => appConfig.ApplicationVariables[x] == value); + public static bool ContainsValue(string value) => appConfig.ApplicationVariables.ContainsValue(value); + public static bool ContainsKey(string key) => appConfig.ApplicationVariables.ContainsKey(key); + + public static Dictionary GetAllVariables() => new Dictionary(appConfig.ApplicationVariables); } } diff --git a/PluginManager/Items/ConsoleCommandsHandler.cs b/PluginManager/Items/ConsoleCommandsHandler.cs index 95841b8..b6109a8 100644 --- a/PluginManager/Items/ConsoleCommandsHandler.cs +++ b/PluginManager/Items/ConsoleCommandsHandler.cs @@ -203,12 +203,12 @@ namespace PluginManager.Items if (args.Length < 3) return; string in1 = args[1]; if (!Config.ContainsKey(in1)) - Config.AddValueToVariables(in1, Functions.MergeStrings(args, 2)); + Config.AddValueToVariables(in1, Functions.MergeStrings(args, 2), false); else Config.SetValue(in1, Functions.MergeStrings(args, 2)); Console.WriteLine($"Updated config file with the following command: {in1} => {Config.GetValue(in1)}"); - Config.SaveDictionary(); + Config.SaveConfig(); } ); @@ -216,7 +216,20 @@ namespace PluginManager.Items { if (args.Length < 2) return; Config.RemoveKey(args[1]); - Config.SaveDictionary(); + Config.SaveConfig(); + } + ); + + AddCommand("vars", "Display all variables", () => + { + var d = Config.GetAllVariables(); + List data = new List(); + data.Add(new string[] { "-", "-" }); + data.Add(new string[] { "Key", "Value" }); + data.Add(new string[] { "-", "-" }); + foreach (var kvp in d) data.Add(new string[] { kvp.Key, kvp.Value }); + data.Add(new string[] { "-", "-" }); + Console_Utilities.FormatAndAlignTable(data); } ); @@ -224,7 +237,7 @@ namespace PluginManager.Items { await client.StopAsync(); await client.DisposeAsync(); - Config.SaveDictionary(); + Config.SaveConfig(); Environment.Exit(0); } ); diff --git a/PluginManager/Others/Console Utilities.cs b/PluginManager/Others/Console Utilities.cs index cf710d8..0b8ba5c 100644 --- a/PluginManager/Others/Console Utilities.cs +++ b/PluginManager/Others/Console Utilities.cs @@ -71,9 +71,9 @@ namespace PluginManager.Others /// The List of arrays of strings that represent the rows. public static void FormatAndAlignTable(List data) { - char tableLine = '-'; + char tableLine = '-'; char tableCross = '+'; - char tableWall = '|'; + char tableWall = '|'; int[] len = new int[data[0].Length]; foreach (var line in data) diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index 5f6fb5f..0baf0c1 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -97,31 +97,6 @@ namespace PluginManager.Others File.AppendAllText(errPath, ErrMessage + " \n"); } - /// - /// Write to settings file - /// - /// The settings file path - /// The Key value of the setting - /// The new value of the settings - /// The separator between the key and the value - public static void WriteToSettings(string file, string Code, string newValue, char separator) - { - - string[] lines = File.ReadAllLines(file); - File.Delete(file); - bool ok = false; - foreach (var line in lines) - if (line.StartsWith(Code)) - { - File.AppendAllText(file, Code + separator + newValue + "\n"); - ok = true; - } - else - File.AppendAllText(file, line + "\n"); - - if (!ok) File.AppendAllText(file, Code + separator + newValue + "\n"); - } - /// /// Merge one array of strings into one string /// @@ -161,29 +136,6 @@ namespace PluginManager.Others return command.Arguments; } - - /// - /// Write setting - /// - /// The full path to the setting - /// The new Value - public static void WriteToSettingsFast(string SettingName, string NewValue) - { - - string path = dataFolder; // Resources/ - - string[] args = SettingName.Split('.'); - - int len = args.Length; - if (len < 2) return; - for (int i = 0; i < len - 2; i++) path += args[i] + "/"; - path += args[len - 2] + ".txt"; - - - WriteToSettings(path, args[len - 1].Replace('_', ' '), NewValue, '='); - - } - /// /// Copy one Stream to another /// @@ -253,6 +205,11 @@ namespace PluginManager.Others } + /// + /// Convert Bytes to highest measurement unit possible + /// + /// The amount of bytes + /// public static (double, string) ConvertBytes(long bytes) { if (bytes < 1024) return (bytes, "B"); @@ -262,12 +219,25 @@ namespace PluginManager.Others } + /// + /// Save to JSON file + /// + /// The class type + /// The file path + /// The values + /// public static async Task SaveToJsonFile(string file, T Data) { - string jsonText = JsonSerializer.Serialize(Data, typeof(T), new JsonSerializerOptions() { WriteIndented = true }); + string jsonText = JsonSerializer.Serialize(Data, typeof(T), new JsonSerializerOptions { WriteIndented = true }); await File.WriteAllTextAsync(file, jsonText); } + /// + /// Convert json text or file to some kind of data + /// + /// The data type + /// The file or json text + /// public static async Task ConvertFromJson(string input) { Stream text;