From a0b1237d3309b69accf8260d89a81661a013b721 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 18 Oct 2015 08:44:25 -0300 Subject: [PATCH] Starting reorganization - grouped all API serialization definitions together, moved Audio to Interop and grouped Net classes together. --- .../Properties/AssemblyInfo.cs | 4 +- src/Discord.Net.Net45/Discord.Net.csproj | 169 +++++----- src/Discord.Net.Net45/lib/libopus.so | Bin 260748 -> 0 bytes src/Discord.Net.Net45/lib/libsodium.dll | Bin 492032 -> 0 bytes src/Discord.Net.Net45/lib/opus.dll | Bin 271872 -> 0 bytes src/Discord.Net/API/Auth.cs | 29 ++ src/Discord.Net/API/Bans.cs | 6 + src/Discord.Net/API/Channels.cs | 100 ++++++ src/Discord.Net/API/Common.cs | 318 ------------------ src/Discord.Net/API/Endpoints.cs | 5 +- src/Discord.Net/API/Invites.cs | 59 ++++ src/Discord.Net/API/Maintenance.cs | 33 ++ src/Discord.Net/API/Members.cs | 88 +++++ src/Discord.Net/API/Messages.cs | 133 ++++++++ src/Discord.Net/API/Permissions.cs | 21 ++ src/Discord.Net/API/Presence.cs | 33 ++ src/Discord.Net/API/Requests.cs | 178 ---------- src/Discord.Net/API/Responses.cs | 106 ------ src/Discord.Net/API/RestClient.BuiltIn.cs | 67 ---- src/Discord.Net/API/Roles.cs | 87 +++++ src/Discord.Net/API/Servers.cs | 80 +++++ src/Discord.Net/API/Users.cs | 47 +++ src/Discord.Net/API/Voice.cs | 153 +++++++++ src/Discord.Net/API/WebSockets.cs | 112 ++++++ src/Discord.Net/DiscordClient.API.cs | 21 +- src/Discord.Net/DiscordClient.cs | 22 +- src/Discord.Net/DiscordSimpleClient.cs | 3 +- src/Discord.Net/Helpers/Extensions.cs | 47 +++ src/Discord.Net/{ => Helpers}/Format.cs | 0 src/Discord.Net/{ => Helpers}/Mention.cs | 0 .../Helpers/{ => Shared}/CollectionHelper.cs | 0 .../{ => Helpers}/Shared/TaskHelper.cs | 0 src/Discord.Net/Helpers/TaskExtensions.cs | 56 --- .../{ => Helpers}/TimeoutException.cs | 0 src/Discord.Net/{Audio => Interop}/Opus.cs | 2 +- .../{Audio => Interop}/OpusDecoder.cs | 2 +- .../{Audio => Interop}/OpusEncoder.cs | 2 +- src/Discord.Net/{Audio => Interop}/Sodium.cs | 2 +- src/Discord.Net/Models/Channel.cs | 9 +- src/Discord.Net/Models/Invite.cs | 9 +- src/Discord.Net/Models/Member.cs | 13 +- src/Discord.Net/Models/Message.cs | 5 +- src/Discord.Net/Models/Role.cs | 5 +- src/Discord.Net/Models/Server.cs | 9 +- src/Discord.Net/Models/User.cs | 16 +- .../{WebSockets/Data => Net}/DataWebSocket.cs | 5 +- .../Data => Net}/DataWebSockets.Events.cs | 2 +- src/Discord.Net/{ => Net}/DiscordAPIClient.cs | 46 +-- src/Discord.Net/{API => Net}/HttpException.cs | 4 +- .../{API => Net}/RestClient.Events.cs | 2 +- .../{API => Net}/RestClient.SharpRest.cs | 18 +- src/Discord.Net/{API => Net}/RestClient.cs | 24 +- .../{WebSockets/Voice => Net}/VoiceBuffer.cs | 14 +- .../Voice => Net}/VoiceWebSocket.Events.cs | 2 +- .../Voice => Net}/VoiceWebSocket.cs | 13 +- .../WebSocket.BuiltIn.cs.old} | 6 +- .../{WebSockets => Net}/WebSocket.Events.cs | 2 +- .../WebSocket.WebSocketSharp.cs | 2 +- .../{WebSockets => Net}/WebSocket.cs | 2 +- src/Discord.Net/WebSockets/Data/Commands.cs | 64 ---- src/Discord.Net/WebSockets/Data/Events.cs | 115 ------- src/Discord.Net/WebSockets/Voice/Commands.cs | 59 ---- src/Discord.Net/WebSockets/Voice/Events.cs | 38 --- .../WebSockets/WebSocketMessage.cs | 31 -- src/Discord.Net/packages.config | 4 - 65 files changed, 1258 insertions(+), 1246 deletions(-) delete mode 100644 src/Discord.Net.Net45/lib/libopus.so delete mode 100644 src/Discord.Net.Net45/lib/libsodium.dll delete mode 100644 src/Discord.Net.Net45/lib/opus.dll create mode 100644 src/Discord.Net/API/Auth.cs create mode 100644 src/Discord.Net/API/Bans.cs create mode 100644 src/Discord.Net/API/Channels.cs delete mode 100644 src/Discord.Net/API/Common.cs create mode 100644 src/Discord.Net/API/Invites.cs create mode 100644 src/Discord.Net/API/Maintenance.cs create mode 100644 src/Discord.Net/API/Members.cs create mode 100644 src/Discord.Net/API/Messages.cs create mode 100644 src/Discord.Net/API/Permissions.cs create mode 100644 src/Discord.Net/API/Presence.cs delete mode 100644 src/Discord.Net/API/Requests.cs delete mode 100644 src/Discord.Net/API/Responses.cs delete mode 100644 src/Discord.Net/API/RestClient.BuiltIn.cs create mode 100644 src/Discord.Net/API/Roles.cs create mode 100644 src/Discord.Net/API/Servers.cs create mode 100644 src/Discord.Net/API/Users.cs create mode 100644 src/Discord.Net/API/Voice.cs create mode 100644 src/Discord.Net/API/WebSockets.cs rename src/Discord.Net/{ => Helpers}/Format.cs (100%) rename src/Discord.Net/{ => Helpers}/Mention.cs (100%) rename src/Discord.Net/Helpers/{ => Shared}/CollectionHelper.cs (100%) rename src/Discord.Net/{ => Helpers}/Shared/TaskHelper.cs (100%) delete mode 100644 src/Discord.Net/Helpers/TaskExtensions.cs rename src/Discord.Net/{ => Helpers}/TimeoutException.cs (100%) rename src/Discord.Net/{Audio => Interop}/Opus.cs (99%) rename src/Discord.Net/{Audio => Interop}/OpusDecoder.cs (99%) rename src/Discord.Net/{Audio => Interop}/OpusEncoder.cs (99%) rename src/Discord.Net/{Audio => Interop}/Sodium.cs (97%) rename src/Discord.Net/{WebSockets/Data => Net}/DataWebSocket.cs (98%) rename src/Discord.Net/{WebSockets/Data => Net}/DataWebSockets.Events.cs (94%) rename src/Discord.Net/{ => Net}/DiscordAPIClient.cs (96%) rename src/Discord.Net/{API => Net}/HttpException.cs (68%) rename src/Discord.Net/{API => Net}/RestClient.Events.cs (97%) rename src/Discord.Net/{API => Net}/RestClient.SharpRest.cs (80%) rename src/Discord.Net/{API => Net}/RestClient.cs (90%) rename src/Discord.Net/{WebSockets/Voice => Net}/VoiceBuffer.cs (92%) rename src/Discord.Net/{WebSockets/Voice => Net}/VoiceWebSocket.Events.cs (95%) rename src/Discord.Net/{WebSockets/Voice => Net}/VoiceWebSocket.cs (98%) rename src/Discord.Net/{WebSockets/WebSocket.BuiltIn.cs => Net/WebSocket.BuiltIn.cs.old} (99%) rename src/Discord.Net/{WebSockets => Net}/WebSocket.Events.cs (96%) rename src/Discord.Net/{WebSockets => Net}/WebSocket.WebSocketSharp.cs (98%) rename src/Discord.Net/{WebSockets => Net}/WebSocket.cs (99%) delete mode 100644 src/Discord.Net/WebSockets/Data/Commands.cs delete mode 100644 src/Discord.Net/WebSockets/Data/Events.cs delete mode 100644 src/Discord.Net/WebSockets/Voice/Commands.cs delete mode 100644 src/Discord.Net/WebSockets/Voice/Events.cs delete mode 100644 src/Discord.Net/WebSockets/WebSocketMessage.cs delete mode 100644 src/Discord.Net/packages.config diff --git a/src/Discord.Net.Commands.Net45/Properties/AssemblyInfo.cs b/src/Discord.Net.Commands.Net45/Properties/AssemblyInfo.cs index cb9c99e42..e242053d8 100644 --- a/src/Discord.Net.Commands.Net45/Properties/AssemblyInfo.cs +++ b/src/Discord.Net.Commands.Net45/Properties/AssemblyInfo.cs @@ -13,6 +13,6 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] -[assembly: AssemblyVersion("0.7.3.0")] -[assembly: AssemblyFileVersion("0.7.3.0")] +[assembly: AssemblyVersion("0.8.0.0")] +[assembly: AssemblyFileVersion("0.8.0.0")] diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index aa9491683..b9c24516b 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -67,49 +67,50 @@ - - - - - - - API\Common.cs + + API\Auth.cs + + + API\Bans.cs + + + API\Channels.cs API\Endpoints.cs - - API\HttpException.cs + + API\Invites.cs - - API\Requests.cs + + API\Maintenance.cs - - API\Responses.cs + + API\Members.cs - - API\RestClient.BuiltIn.cs + + API\Messages.cs - - API\RestClient.cs + + API\Permissions.cs - - API\RestClient.Events.cs + + API\Presence.cs - - API\RestClient.SharpRest.cs + + API\Roles.cs - - Audio\Opus.cs + + API\Servers.cs - - Audio\OpusDecoder.cs + + API\Users.cs - - Audio\OpusEncoder.cs + + API\Voice.cs - - Audio\Sodium.cs + + API\WebSockets.cs Collections\AsyncCollection.cs @@ -132,9 +133,6 @@ Collections\Users.cs - - DiscordAPIClient.cs - DiscordClient.API.cs @@ -174,26 +172,41 @@ Enums\UserStatus.cs - - Format.cs - - - Helpers\CollectionHelper.cs - Helpers\EpochTime.cs Helpers\Extensions.cs + + Helpers\Format.cs + + + Helpers\Mention.cs + Helpers\MessageCleaner.cs - - Helpers\TaskExtensions.cs + + Helpers\Shared\CollectionHelper.cs + + + Helpers\Shared\TaskHelper.cs - - Mention.cs + + Helpers\TimeoutException.cs + + + Interop\Opus.cs + + + Interop\OpusDecoder.cs + + + Interop\OpusEncoder.cs + + + Interop\Sodium.cs Models\Channel.cs @@ -222,59 +235,61 @@ Models\User.cs - - Shared\TaskHelper.cs - - - TimeoutException.cs + + Net\DataWebSocket.cs - - WebSockets\Data\Commands.cs + + Net\DataWebSockets.Events.cs - - WebSockets\Data\DataWebSocket.cs + + Net\DiscordAPIClient.cs - - WebSockets\Data\DataWebSockets.Events.cs + + Net\HttpException.cs - - WebSockets\Data\Events.cs + + Net\RestClient.cs - - WebSockets\Voice\Commands.cs + + Net\RestClient.Events.cs - - WebSockets\Voice\Events.cs + + Net\RestClient.SharpRest.cs - - WebSockets\Voice\VoiceBuffer.cs + + Net\VoiceBuffer.cs - - WebSockets\Voice\VoiceWebSocket.cs + + Net\VoiceWebSocket.cs - - WebSockets\Voice\VoiceWebSocket.Events.cs + + Net\VoiceWebSocket.Events.cs - - WebSockets\WebSocket.BuiltIn.cs + + Net\WebSocket.cs - - WebSockets\WebSocket.cs + + Net\WebSocket.Events.cs - - WebSockets\WebSocket.Events.cs - - - WebSockets\WebSocket.WebSocketSharp.cs - - - WebSockets\WebSocketMessage.cs + + Net\WebSocket.WebSocketSharp.cs + + lib\libopus.so + + + + lib\libsodium.dll + + + lib\opus.dll + + oi)2OYEXE7`$8;* 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 diff --git a/src/Discord.Net.Net45/lib/opus.dll b/src/Discord.Net.Net45/lib/opus.dll deleted file mode 100644 index a9eec802c68d7cff490baecb31a9156bddfca615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271872 zcmeFakAD=^xj(*>Okjb?S~dKs6y&cL)g)y>*8mMz9b9CExe+oY^F{ z_VfAt0bg1(GiT16^PJ~A=lOlk7JsMCk?L?bRQxwO>TvABmHy@P-~aQUD!jgE#;X@O zUYhdf>vkzcf4;7C#Y2x~u6pFhKX~N(KgxXI`wu_-<6!3f4`x0RdN}i;hcgTAUYPl# zA1{0G=IPU?dhMo50uD!!GR2YI*sw6!+koSuf19SHT;cd3AiExr;s2}Lc$<#@stDSW z`}saa!mXf$;OBpJvi{eUG#;13ktx5U59oXR<4eBk*fbdrC90z+jf+43PnGIOxIX_C zm8z>$N5<#89!9&be@=O_=;q*qYlCdX(4U{S&yZ`p0@p^KZWY(MRdac6ycl4;|7A{Ht;-jo$pA zY>#o2k9tnLnDp8D`Ht-Tn;(+(7>5|MV-o6J^iTDoH_!W4DYczNf0p7sjl=yp^@1xI zzD%kI+;Y9kKd0U!53c<20}eSiRd|09>Sz2@z1yjo|Nq~=#=yex@r*XrTZI~lt;WK9IcH1qb_y6_<{0UBPV^Rw5$;gR*w-uLNwCKLuT306i=iWtV#G{wF zA_qfjpLJxH-XDo-wYQ)`IHBm*c<(_YRH}bvHf{%9=q`cQM&Ah^SKA7_L|6`7RcaCM zcA&q}p73#3BpQ1A*_ZGX9!}9}j>)$(a7m0lnCf5vj0Zpc?tR}YZ*e)oBMO&r`HBS(Q4-5JAT6WYA#Ja zgop9UkEcklR?~+ro?SY+5GV*rTu>RO}1h_AE^V6`d`_G_{5YRe%2)O}{j9Fn9_NqX+%{t3MIB z-h{O*)zOwlwQ0a@Y1EXwBV_U&pyI2I?aO9jVi+6m)3vCsxqix3quxL5r% zxYS&E|S+oP{Iszyf_8g(R=VeC$gC>qw5riVR&+CrS&l@FH>wC{74b?y(-q$5%o!Dd0km+VULHr6y80R#!6*z* z7~NxhpW8om-Z@xJ?^!rx>OpU|zRsJgFY(Sc)i;!3Q{7<3;+^rdVf06L{V_9Yj`Sw} zBhY7>OT3<(s9E6kM0#b7!z2A?D>J!2^{4SpQ?2GNJU^v@#6!pW;(hT!mHvkJWMT=o z_QlN(G?UJMU40&}DDq~2mfVS}?*Y2;0D5wxi*)?wGCK!#o8HRqT_oOI2=;osNO$Ou zIrY0-_-rO>2StI`tItzG=~-wkTfZvP^cV%k3)wQ^tZRB-h`<$-rA!pBs=uuOLtMN>w#?cHLp@9*N{@W+`-*HdTC8pZGVW3S|6 zy0ryuyNP**hx4@s?cuYjmDh>(@W5nk_v?Ml}zeC;CEGfK1n;f1PoUXLS~ zj&8F31>P)X>ss+Jp1lAk@^uM9X3j?fvZUg9G(M_eAlX_?MjCWK`dW)Lp;y4XO3`X> zg{-C}Yuuqk4r(>0@QCV8w3jJXf-Rzzwr${rFR^?TiP*qJPn{X%cEnz-W*hZaguXkp znyt7e+4%$6~SjChC1vmA@ZOwWe?_e?p@?V-Qi8tGqQT=xZkfznd(T%oyZz3BkszK}nw4Po3rul*|5k51cA#pk0h?5Ok z^AKcyW*Gm?0EuQA3qBV6dj4wM{js+Dbk9+3cPF4)hB@`lT8Fpa9DV4W-oK5G#y*@D zdk=HaQQbn##zwT|)h*|*)m}cRZGQ*tc*n|>cjXsj1rsWcmHFP)c7q7s${DSWaeHSq zbUPCbdBm;a5mnso6yJ1-AEt}%xWjvjSVGaD!^hHJ!AKoCq$rq^l+TjTYVRV(el9jR zLpj%d&RD1zu5TIYmB2(Ez9c%R`7OTm_i42{t|DQSjr!ugLrS~Si8Y!xHo>Ks;3Zy{ z0Je|509j1@87(Xmxn9(9;dZTEcPXxFqTHc4#9kC<(kC;}$ryEcG3na&kE{1OGJ&(d zUnD85<_Umq%?J09@EZj`N;OLUZmp&g@DDVVM-zZW=%F5xO}jDoL{`9*#~%~>wAveh zi{?dTWo2hRid~o?{^I)^hPUPKAY{8uAoQ~X3(A4rNn~V`?KtcY{N}U775PYu{3l?| z8P#?cc~|nX%J~Rwu7jxYjIMV$dInx`L?ONs%5{^V#?1z*me+|9Kw|3%vp#nmWNL;?)8dst~18($FsgThECT=`$X`hS63?e#UG^U-AIXa=35UxFat z;ka(nE`rC}32-r+%f!hXnzUTtYpI@3%8V1mS)?4`I$LbxfrDTkJv64pKrQCY3wS)* z_MYw$f7iOl#GAf-hWfX&)R*ctzNb)aBkStKt#9y5dr)C-_ea##pf4c~LD+T=`}T>U z&&OL3eONcrDws&y)-X^a;%B;ytbFB!k@aOOjsip73o3CCXn$^&of#`e(bw4A4E`$T zBb#0iGYw!^E5ftWE3?CodD1Jt05p0dy+I#}GeHi{6l!jrWRCywJ3z9PaRqwL8MPkA zy3HHqS&wTjlloO7F7BN0nFMR4gy)E^TW#Mz9T1|lpFn3PU zw|VQ(hPJay+v&bM+~V>d(>DJB*bRTAyfz7Mayo#Q*+!|NbdP8|^Dg)QUAwzeThJ07 zR6i4bIHveIVFBFh`N{QA znXV;%p>$#$pd`4QDvj4z``7UBWYMB+xtL^6(3=}Mt<}t+dkl#eTY=ZD*LWW%3_vYF zF)<6`aD)cpJJ|vg{-W5*yc~U04wrU;%+-P^Y_dfdIpTbQ8b9P;<&CI>c70z zYKA}@Ky?Gk$p(2Dh{I%NK?Z&s9nIG7_U0VauTg)#@P6tOpk@K7RGan5hdQP&ztUl* zIq)6}I2Y_vHyn=OmDOi?9o5bRh_67+arjKp z+H=kq*Ee&IpeC`OSQm-R*6wru{o37TP87}NMtaddZy+TVMJ{|mb4(-0P?v+@&%*4c ze$Nv=N2@Ly^IV{9xtnOm#^Wc+hD$-IE4|L1Vd`S6`H5{4i8Bf>Lc16-5qbC7o`Gp- z*t!{vh89Hl=;YXNYPiJ-y6riN(0YUA5+sv#AcC}-lFp~mN~l#{2&R|@!JR;0Jm zjk?)}yP*yJ<7HF@&pHL7gHMUfZeCAG1~SR&I0yM+c8raekO>Ut+2j6y9rIOaW^BwX z-}7f-Ii%j<>G>bRYIrz9+cE%n?2eLX{m1zNLNRBbKVLf`KBpwC_o=JLdC9*4A|M52 zYz1H?q*IxpUJ^d4OzE=uf$`Z@LF)!JT~w3sjMx8qL6n?AcT2D!Xb~*&7UF*8#6^HI zS`=6a)@3xwSSLn7Y65E^AIvHcx2A&8qBI{^#hWV=(C-Uk=r-SaQr6Fky_YIFUm?cr zGkZo1R|@RO4sc>?57CC4RX?Z)62mKojNGRmI!OEpQ(N6aOiA>_&ba|c5#T5yAvF~0 z6R6s5Jp^3gaz8G%=C>QYI3SPSTEzBOmQErxT^s?;d6?$rWr!Z!zy%2y>Z3Uyh1Yu~ zi+$^_!5G|RU(gB)?^XOK*4<980AG6L`@oJH9)U$9mkF&fI#SION36cM_GA>b(IRp8 z3<2(5`3xHPvB&8@QSk=8&WB7V3E(kVOqdzrJ<^_Ha%Fx@U!rApUQ!DOekEHl6OpJn z5S(mYZT%2fhCQ0V?e}nND{{6!WYI$OlL0z(VG!xSq#OJOJyzasDme#_SgWTDUSz62 zKVq$!Of3CS=%l}^BApCibpwxKe#>|7Ypp~J)#u~OHk>y*zI&ft-U{E;!M?cY8tfbQ zzdQt3X@=5hcF6yc)4?V>@%4O2-%@~6ps&c(^Ru+=ZLxtApofHEQO;?I*n8`=-31{S zSEZp8ywDNlp#a?Da`yY z^qJv(%A6pmA|v#B$mvu})|?`5$+}+v$&6pw?BHuK>uviTGnx4AZMOZ6hr!qDV6Q`a zAqc%tkMd}eiHzj8G%@s~ua)E3E5}1q3ZY%O66p5gp0p#3cD|Dc*-$s+oE9pTI}MM5 zS2LBEu6i-%H7TaL16KYTZTny1F>U+a_*@qT4isEU6Vfr}hxr6{>ZHCn@iRHd+)#6v zhy;zg6f{ho&LNq(`QMp1!h6zr$e0fvPae80L8TI4Z6!wGp;2ht@5$2hGx2IEir}0A zizo%%qD{k92w_C8mKkaxO1y?D{Y3@rSX+!DV!oMZ&x2ZSnrUr!hImuk-KuRb@UB!^ z;Qh&avhs?YgKg^1scj;+7O0f?(#WmDWtktmq@n_7UWzBCS8Y334oG4Jr~!?j7aCfL zw!M(9OBBmgH^tRIM7tN>-1D{E62n(xH(KZS)P_PuR&cw`kFmK{qxHW}THf{Hk*(o5S z*`#mu3<%=5*$_UP(V(ub#Zx+#5d1*6n+?7>J3c)VsGEqu`QPA0-~j^jfWW-?bT4Y4 zZnpHIX+KK=tn5jX@0m~mbtd{CA3akKp`U?#-CIL_m(Zl8!x+T~*0T4mV3)+(cOV@U)>Dq6H z9=R22#?3j=hdv@ECt7-rDkly1lhu2P-JRL%0O)2c1W%zEW!Is3Rp@P?!$XrPm#RCo zjr@qTP~a_A2j_tfffZW1K~PU7p$L?*O4||x^{_K)70QXs)>0)Vn_wmGaxs51tFbmcShQvGpJFvs5W}=pEqNE#?7TxuEHqBrFsP-P@CBo&{Xz z1Im2;Ze}s-yh{KaJeuycSlw$c_*!VS!Q>2&IJMe#V2jq?GK_~q<7QeGV8#>c`nbA* zP6rJU_e^TIG7qZ*UY9`4s6CDf=r9xBc&-anNO=mYS=$Zg+WHh9KxU(e!8Jfiw&f~l}WR!oX$Duzo0d?D7`sR z|2eHOs&pt_C_77KU9kZt=HE?hCOxcr6Sxo_(S)xT|g2&?#!lc0KMHP}i9=uwr zZT=`pLyMuJ&~`JnL%V;ma$@Oe}5V zI63apQM2%=GwZx=`p|Iai^;oS^EhTfgvSOZ8>K0?^K)z@B|LKXdS_DDR*#IL){d0Q z6L30=tfv`%I+}b*y@!V{#i+HNQ89V&NfZ#UOJ>~xYk{>VqKBoDXJuIVG~lRemE$@% zeLT2=J4tUU=91)4X7`0iN97_k1%EUe&5-_J!?PE_I7nKn-pJ|7n}E-p4#PcJ48z|M zgP1T=5CtIraE21^x6G@QL;g=f??Yfflt5-=hB_z|pi0ipfy;^UL-u&A)I&~D)}>z| z0=q=JUhdY{yG7_FJ>(K)ho3S79#OtSFV8T`w~1mzPclU)s)y3gR7ArSZ!4nwb-mmx zDh`N1yH-;SEkmz30KIfnyR!{JoIqTQEFx>TB95Y(Y77REl(;x2+6M26oDN+KoAy_)C+MTlWB5*t>-M>TC{RS6vA5RKZ-U(lVA$Cmh%cjuJHgI~~# z4@WwJFaBd|vMEGxfW8F9-v)JYPA`k=fp)zjD!O|HdPZMRAb0|Mw8-xX&cFfCop=Vf zXW}S@& z37F6^jhOGiuEgYz07CiUNH6@xkx4ZEGHMk-Jh+Xqb4~;h0O6$xvASBgdC;qG zk3lOH^Snc=>BU3>O2d61C+&iE` z8|u#$m{vd6%i5RQ{yd`Rc9_Qd5YB5?=Y$T2I(4)H3M_kxBYKzPh9i1AJ`>Q>AKb=M z8T?94uQ-GO)pd`GA#qme?MZ;Dr|e74pgk84lNDEX7^>c!vIC(WJrD;Q%EPx6hs6=S zybJ#8vrMSk&Yk(7zMi9qF(paXlO)-hXk|`C9N$+QrU}vmulIZikJs7YZM}iFlN!ka z;Hl5l%ilK3KQIyM?5(^S(~%R^D_*B?547ivERsW{Jv*U2^Rl&lY2;KNN`@=Rb@vEaWNPw0?k3KbMYxltj@{v!MYKDoeZ_F|}F$a)Gb*yi|nzQv-2)yGLg(gUt= z1*BNH6X+`+dPO=!R$!lql;VYv z_Y>{qD@1c9?nToo{MB~1XxsNub9s0|R}jbA?xNc+XxrZu7eu>nSg+Uwn{&cybliee zi}I*mKARV0riheKbM3w%y@~J259sACBX@%y@PfnW<)xx2iy9AQAgZmW>gCx+Zmnoq z$7O}cY7pfJlDqxo=^_-@jMgcTf;$a@mj?nLwP?)d%9(AELfp_)v_;n9j=A}Ov3OLE z@R%A&=5Nz`(}0c!>!~x{kO+ibehEx$#FKr)2&s5=?i*F7>I@_9z!^6S zF1GC@y(~{J-mI%XL;e=>68ztEX|=oI?@0xYnwFsPnqE$;&JZIP9DMgIiDK}46Umv2U``skc;c#fA~h&6ET z|2M8WkVxq*k&cjuhS*3`sqKcw8KGg$V)`)LVZD)B-NiUDs17*3N9V}|hf3G$33|jP z4A)b7BVkVq#Kc)t%Fshar0D5PiQVU{ zhf@|`ozm-xHuNSUpKxHavdJ@5ZzMw5R4@&sw*q&mlaxS#q5ho^Gl$7W`!(xrjC(z> zNnz3jA%p`pDPg8WHT(ynLS;_Ct<`kU#06?FNIkT9PE$5sND9--Jlf-}+Rk&LnNT9$ z(zXwio^T;&H1^jN? ze-=OCjlZ}A(+DZ0)l!<(TyosMLVu9?pz|Vm6_OgM5UJYTEg}*mumS~7ooVK~dcsI* zia(~^4Iv9>U}3v3Xx6R$=Rw5L;5~XHaU^*3@_BHubL*L&>hq|WG7uVR@*t3yn#?pZ zsgW-OPg|IzQ#DDauF#3Tcv~QssV-0j3a&X!G|MzHt%;^q@&l>>5!gh)g|7eCbgYKu znvm2i`4$na`ZU6xXt+G81%`BB1(U!oDeoF6v8ayG2!W3_ZQUGls^n$|(yYTXs^XIE4^!WEDhjm!n zyo9u|z;k9}IzfL{u41#%O-~*&Ct+G*snW0_>!^^_JPb{8I2sOyi;HV)e6*kvX`g~~ zG*WM=<%bbcF(cd}F9|b3eO2B7M?@2$Q0EaE1=l7(MgBS@ij z>b%(5_!Xb@41>!^v;#QGa7|jk?3t9XQIj^Ne@I?@rW})JcM3QTaW{^9xXv8_@|iIB2gw95K8+OT;V)cI_t>%q zDKW!hpXA(k?$cRMk?T!q6rSo<@bG%Zds&sJrw$+=X;C&haSsF1P;r&qN~^h(MFCf5j%7OHcd2H+8lNUn zgW+)q3M(H@3p)k{f!YhQSI_h&Mr*JE2dz5{&tjchMy^U+;!#9g)Ki4|mHblnsxx?I z<6@K(Gc;gly1bki#$1T$e*#|rPn;5l^x+d|o(D>r4-KW4JB}Bs=2fD+t~XE@hvp<1 zl=&UiWbPst_oaqm~cE&LyJ{2_3(S}5?>v6m>K3g z#*u|e@qBuz8?*)}pm+0mZpm=(`fQ#HR{1ex1HgZ2ub|>8IbAkS-T6L{f!rW#59JJ$ zK~CGV$V#C-k&&;#*lFX@p}SF;>HaLr%+CHnv*XAyZ6mP~Ge&u-+RqHk3*4?9X8Gf0 z;BguHNxq}J8T%cWb@HuNyNm+D+$ZyGz)Pm?e&XM;_*~l~t5%OxeH}>@Us-=;^+^52PZvIR-~z z5c)JF;I7@Y#CsFoi$1iDRa($j(+d@uqFzf#tHF1xP?fSQ)&*}y8r4mX;7x>3RLF#4 zSd&i66K%zgrl8)E@Sc3~4_X~CBMr}be6GT>H^Z5~Sa^TD)5u~-QJQ(CkA%D#_VNqd zXMl|LnRqfhtMN(XAj&-Uhm>~gwCmEnOV-34QjNc)n(CKuIgkH_O^;Wrt-*3PJVaZL zoYTG|@DRQwRw5j<(wj9401ZyT>>}%+6PJS5C}5_V1x=24yBUptu?i3Xf9`lkd|F)9 z!>xGd&A_5djn5nI??6g*2VyB6tgraIPx%@A2MWRgyn%*a^W2$BvE)F{??chD7zIVh)8`ok) z=>*OfCvjf(7Vf`D1N{U3%U(E4XqOA=54ksc|<$yR7L-p!EUSS098-=qh*Q>9|4DU;!&$R7u z{o}Uu8d&2C&Lb>^P~V~p;b^|ElX5pRDSF}UIf{WI_pv253>WuPXc-<}e|&u`>9ZbN zFQ8X-S3XoZk(Zc)LJzjNMy zEOZhcwif@Pii;+M#F2r4MUjfE89!Ll`rY9@OE}7aE(#ILh+vcy8d-&?-6}IJ@k=aG zl6>kW1Vnh#0%vL>x^3MHu#uwi43Wh;Jw$PB$|cSu1pr}TtR^2O%K8?$V+!Ojg6vUC9q zQ>rewH4}#s`L8w$B3wz^Kz0VA(Fnv`C!a4Z6q!EbT4K zz)(1mvi1g}pvHylC@1o05WbesEo ztu-0wk;n8^=8qVYi^c;RtCvP-?^_tsYUsUL@Ka>xSVu|008GHz1bnU6i2YcklgoM% zfoPm#y<<(0hG0?J!o>LlxzTz?mXa8z(4QBpz^h=-;0%NsuEyI8C{W4#2w)ga6vRD| zdIv{$?bCQfl}vcH$&!WV$xIst)!Heac;y9CfJo`+O#pKy@^)GjWzf7*i6OxhIHzR| zSKzm)CU|t(5Pj@|w};!!7`%)|W~P0LVtk2!UAzBe(1%InBAS;qeT2o;clRAa#pqb2 z5RhnZ_sD`)MNrZ}kn2S7LrisW)-x8@K`T5GBe~9b@p0)=IWmTV->)w zq$jx_tNQo>qGov4Lm6#>7Z}!jC#FPu8m=XBCDFTlSJJuSM0WIICpo9t4cC}UHK3>> ztE0S5L=KR;7I490e?01J*;KYE^d&gS^#FWK^D_1CAvJvMwfenT{w}TNGB~tyK>Om| zo)7(PK{ukAezWoum?yi?<|qRmKC85`!;3h9_DrM)&G$S{4myFn^wH6Mk#3YA3%j1m z^a`hL5Xho_89gF(dw=ZxsiKiKZNe99y#6GG42;sNvH_H6UWH1=l3%*OqNS6XN26^w zMdKcPLBS2&p2w{?r|cJvhpDgqFsMc2Hr$e0ets^HSMJf87kc!&+~Jcmj3rYCL?daM zP(lRTMzLnHR8p%ioP!VHHTt97eM&Utp>S3cy%J3Y_=_N{eqT1+Lp6afpwauXIGgy|x{M8^%BTl*vj~BWnfQ7E2#stu z?ixN0nn5G)+RsKfuDvSN!Lf}J5on;Ag_&m6F2E$>vjTPSQmn*RzzOV|R;~8;GXX=u zg*=cbl5A~%mCdHH&W`mWZA7ko@IT5GA@@)PJ_2jTeV?gq*n}snIa8n5Izj`6`&YnP z?KHeLPauO2JxKXsrqHK{y2sjYQIRz^q5b!;ZI{|}wnZEO7O*?aIvN5z5&8Kx2euJg z^W(3QY|wd?L8T~jg`?>ruo+*AGTKU0;Y=ejWrq=l2DLi<4poPnB>(<$Mjyspm4q}vJsWupD9h4ar0~hdCKM%t%9H>*nY(-(G z_4+3m{Sfh5%^xRIxPz!SRjYjt5A>>uM%NY~@#&bh${U)dmt-K|RrB@+QM7w$zY=U~iAc_HQ0^TBD_ z%a<<~SG-DZUr>URp}bzcNxec3HtwJqV00Q!P&;}PvzmO>z($M^Hooo$&Xsl~;^^0B#Y409i#|^g)3MY}3&1YxKuFf&Q?^ z;c+NWY3Ct0^um=Q?rVQ4r_0xcb*)7GaipizL}|l=oC)M`_d%hFr>(+A@-MZK4;_q~ zVftPT;~{*o&&F{G~)$uB*1raVH%(lqu#93*$6;Ep~2cCY(wOj;# zZT{%jz2#fYA3d!Hw!*oHT`LH8Q1Y!-2x1@w0e(M(0(t{mgUg?O!U8X)ih>OSMNH47642+x9mf|`Ij1uF#%ssyGvm{~M_L9O1gM0J^x7R|kh~Q_&;Uq=+l}c>on*2vvhaU;+7?c_rMZ zFIZ{LUuEf-LCLRmIaLI4`DQ(mMc{k95MF30F#~Pr+<0&M>Rngnuu1|Fg z*6D$5A~HbKAs0b}DCLNyGZ)e}wn-fbi-eWijjzyi6H#Sbqyc|v(kK^VI{8h&sun|$ z30)?m%HgQy=lH3%CG#utb)g6L57=HIvAwxq`w&Ep?c5sa9MoDH&okZW%_OxcIcg)f z?$JZgC-Ob|B6oObhEb4y)Na1^2lSpp(UkX*Pg(-=#90wia3*lZPc8v=SaI>~5%F;J z5+mp>!47*Fgi9R6>*NdM*3k=2KS;d7-{k`wDQe->WxQ)Of4G%L7GCR_tZiw@qMoT* zTjXsUJ90r)S;;PSFI_QVWQQXdN92<}MwqU#nPgHOpG=ZS z4K$UV$B95!>i4O3q>$Ggs74ZK3kNtMG%-PI*F{Ey8D>=#I_yi^#Qcq?cEb$-7&UsC z8hZ0r_NCPkZ{jS;zC&v+IXt}q&$8}W_!i}6`iaCqjEW}U6y6e{)AMUr;}0I#LkY!- zz}0_5Xd>~CsfKqCF?%GEOkR$KpSd4*rK0PDYV-1VT6fi zG5^Y#-l=y=#rE< z=yYUUh{&htgjx3v+@O6Cp>C;{DH9rd0cCBx9JmS408A35FIrx>bLlK|fq1AW)B$9& zs&mX-r_oVaJVi>_{(OAEFS+e6QEv58dT(iYcbvuuz7|EE=-%#G349;EPaNab!47T zX?mflhqe>4lGr$R(KybB02r-<{F$Ujl>mB#IZtE5Y(3rU2EA`nt7$M0qOgEZa&7E~ z7tBnw$Ye}Dl~wIQ9V-3+pJ2}>o~T$tKb@ctIoZ9S*V7Qfl}l5!;`vMAZ{uZ*gykI6 z;Y1!NGmT^*no*exMC4_rWnj7aI1vY_6GA3gG*M^RBw!P%kWueY9sE}Y>5VW<*v1;n zgU!5vY-Me?0&_VWgOBki=Mk$6Y*qG=V$dPVx1u3`J&C{mRusXb3k%`jp(23;nQEPx zwucw|nwPWt5t)t#FY1f;ateq1 zPDWjIMkmZ856wi{NUT85Wh#Up9NxBMH`bVBl|mA4}k>g!`m1)_t9SuPG{ z72uCD&q^+nEP9J&a{Y0FQH$LBC5K}l`w$$~!1Y+hJGqxkF4`2>B-w&gpI~rI5U5+H zjW4ZiYPD6$Kdfvw`a&dev4jLL@uHR6ilKD{WjV}Rvf&Au(oUipf|r?E5pI~NkqjrM zmOG&@H+=)WRrL+|?X(lDX|J~VeyCY&>P8mhjuh2J9-JQ}-qC6~1$%6T-ig;?j(p!F zxnl+}UwMTrnj?!`DAKm1BZOr}NK1)-k?3ALUq$nmHk&42hS$;#;2sg$H2C6 z={qxSW0B&KE!}pBA$69-G%kQs6#5M|iIEy()SH;9l@Bh;|ruEt(W$~WPaf_#&4`kw*% zr^FYnb`=<@c>=bJ`wcTXIGq+ge3$*P;5AsA?A%z5U@Z#G0Td$-hDD&(D2-~X zgtLv;HCi1-n4kq5{&MDO>;jeVXkM7^7_ZZ$&Gb0s_N6j7QYLFPZ=;@_M(~CR)tTj+ zL7o*29Pc6wz(cOpv|k4#uo5l}d*7MQ>_})x?jc}z$ow}kxsUUsNTqHteL125?FmK=q7GEk_kJDNmr{mfqOkdi%xGO zTJ^VTH8+wlv>m$iDO4xxO41aWuYlRX=kX3iKCaMJph+C8yjGMq=*`5RbT*EWA1|}k zyF#b+@`kp+CZHaTCY6)>u(=?q5R%M*2N{7QYLE@vJS0qCNTt&~D4qp&A6<;QTz;R9 zyKI^4i@PjIaJZW}rp9?8N1!Wvz>YIzQX1|u^ro5A5j(nA6pX89q*Flw$2*sFt|GpX zn1&6@G~(4WMW}&qyzB(<=&Mx_kCFE`9uiq+^KI)a+)OSi#R#Sk==HP?u8f8UQo>OL z!nK-@!D@}tNlH$y|6T2ut%7+d?M2w^d)E&Xv3^8NR{lU#)FI2A(K&dH?N1c0XCxPZ zL+K2RxU@Ot4Z*pFdy>Db?vbMyzw;K?GeBa}2=II#;Il~8UC&Hm$I1jV5)cmV&=~}B zG5;iuCWj!F1|_`1ODT%4?nsqt+s?%)voo}sdr&WF;~-%cy(YW+!&2&Qvp>*4PGiVU zcGe-M+r3KWA0crQgkX4{)|;3^xcL${6F|BED+Bv3Nw0B8=PjkN4uh^qy#6KCCd7r(-5C1= ziRcttQa?``1xYdN2qI^zo{waB_BZ2jGd7aAFk9xT+rn%yQLMfyUtc>D!ddd3amrto z?6Aakb4PX%C{jG$!7oK;s=;~ytA!2&8;2{WvuhH2k5zvs;!~rQi(W+%zQcD?lx;QE zq`gXm1;;egwn7q9{P0M@!qcKV-l1*BVR9_Mi?_yG;@y&<(IVv%xZMh6IhR|yBN+!ID2Ce2a z%zvqVm?!*a#8BlDIW2lU>6Lc;0{Pe8pHheTuX{{XCn!p=3bmwBXMX{DAbkRnXB$Af ze%tzll$#{pBT>m!wZ{Vu5EJ!*O`)k(6%ClZ_T;kzUCy~t`t20y?-g+w>jPoqbjLcY3RgM< zFKW6sXuH1&?eHoyEg!Qfr`xyR)=RYQOo^z~^M3eTnzm&b81K0AxOgifda?IYd1R3r z@lI#19T}z3LJNvqf-;3oeDLOQONwyuDUyM@%Ab(axt4N%!o$K`juNpdcBs2maY~O45=RsixO)K8eg0j#e{5D|0vsscmTkj>d=2a|E8k z>~md*8`#S!B>d?5uiMl_d{ z!^HTc2qXqg91~9yJQY(9V-DH1$#J^^RI*)GC8cN_qO#KKubc_bD^xzMHlB$>Ht>x# zimlEx5|raBy^ULAS6J?&f^*El5o~|2OgZPh2|90~fqjn5AJM)GIbiXSqLj3yEp%nV7b-BPprhA{%hkx6y`l?4>P)B}d#TR4dNt^@L>cri4F& zBS-5(UnBQ-aYL9*%oLHUQ$U@SMgOCusZ@U1n2)^=B)BZr{tzF06CcW%!)_Vu6JZgF zNQK}nT!ViAl1wHbn+a((3#SuAb+3_F2}i#)C$OpFHj--6hy5E`QBYYRWGQSz8bL1! z*>NXk|KhO`-SREqmT4jxR@Q2Ngm$I0d5md^9X_y-wd&Me#Se+XMBNf^Z5jm68T`=g#l>>lpeL;0#+F zT`QWG5zu$8!;Vd_+g)B`69``fjpZTT* zR8$y4wj*+2iduB0Ke?Q7t`4P1GI?P;Ja#WKn~R-I!Hgv5V`5uiZpGb5pt!p$+4(eR z;%J}kUb+79R3EEurhJdlvoJN(nvUQCo%27w=%}EDO2iPKo`I25I+(Vx^*WkuRCAeW zONl7>d=t^dPSt;yfWTH9MPPRxvLn>eha}U)Rxi+-sO#zrjx`GOiszub@1k4Z5JH_N zDlhGe&m}0#v}Nc?tNj_?#|?5b{_}X@(S>w#U>q1zqz+;brm&%Y!{4HFf(`OWCCRi6C+s6-9x?$NHP9o7U#ai-kU^Bn}Y2t0E%Aq z5~ycx2bk6RYoK8jJB<=09KB5ZoXTya%{>ktm_&2%0r2oyh70ha6#-dQ+>l!L0&4es zNSuLh^{QYiIjI@G%c$X}#8!O#`Qk;~^Tso;Oti|`_ zi%iA#X2`DCUnh|yn_mPlyOe!Z&6JzvzyapcAEfS02iSm6o|MrR`!E$~@m-);NB%mR z!3UrQ7`H?6IrTdc3ZamzgZ4lnO%*l4ZXspzsSqUvBrGZ8ReE>GN01DdJwbHe|!Q^ zkQYP>ftp50GjLgGKsb!ExQD#koW?YN=@?k#+6ENZVcUQUQf=7j!5)a2gh=u{K!KV+ z6FnjK4tKIoPMIQaM8y{3>f}^6ZqsO{Jb%M1mhtK6PV#q3_HR5=qL=N^H_@1|OHq_< z)_EIea$Be~c65?&M9(ixnx(Ued}L^yNePY@X^0@GMWhADih!j;X|?02K#n9IY6x&N z8}IV$Z81g2V#XPe(yM^-EUED0Zl*4GEiOUE0@4DJovSxyQscA%PUadR)CH9YbC6Bt zJO@B8p~J<9CUij0Da2c3^fDcQ#uKZfSpTCz+W*LbSJVx!MOgJ|-q<^C^uJL;_(0|p zX^P|r!AQtWgpfM!GI59aI+=(C=>xufD8eo)rf~A+GaVrk$8*M!IG(d4XmZXzhfb!@ zoY^cYc)i}lA(7LS89JvI!sG4!Qyb=KAjY0iczMxA(*UNps+l5*aK9&TF&D2At5)hw z9zx8jVDLuW$i*#E3NRc3MDEnXdA}#&QuR}nckoBC5ZT*S0O9{{iZw#t9A?dgA6a~L%_9*DFvMQK%H;QN6( zKj(q1e@dFA(>U<};Au4~Ecb9ePMjj&7f8q>=9dt=0CW0pB7%@-7fi2FBviujRUi`+ zITZYe~ z+U1$E`hr{pT3HCd-(BD0>*6%eH-K<#K2On#prlLnIRp5z*8PQtB7>v#toU%m(0T`Z z(1_GaX40`uwdwB>a)}+VSz@L|A#mYO0c9$2WGd5fYS7eBIPSctmJvkcL0jDeu*O+i zyk6UKy@`&mz@O!HZTV|y2-c_MxCWj_Hk;F=#IYCP5U7wyOHrB?F*_Ai|{a(oT;l^ywL z&BNw_3GWZ!eFsik@xR;O5?lrnM4#ql9B_vezZiB=A2r|X9bEl8>@gak)>m)CU1u^r zfsoF?c>Aljn)~s&tohOE-_X7!JRdLz&^~oTeT25sz$Td;i7GZA~d?%&*KthId^=%zLlkXV`-f10ok`-aVi<>vjsKR(!yl1e1#pZdIK3>NHsYhdr5GUs z6;7jK8$_W>!j4oFu&Nh-fSDzcQiS*PV@a+a=$@zmF|>@nlGU9?*a6L#zSy=BUlcnz zyKxrM+i(cMZL25|kSO!EmDJ4m=QMmxqCw^CTHZ|TO8nQu4o7vxwhQR1axxN6=>}lL zr>`U>I6n`|yfRZd?ZU(A;f~6S!^1d)?n!1!FsM$D1tdPz%ePqzvHWplChJt_$zfgk zA@M=7wQ%|zuV$G+V7+n#Xp_k{0cYeOST+v-M#rQTmcs)8oVU#{`y_Q@Z>@U$P5QSNS zV(KfI5VZpbpHwdr|<<==x-8Q zGm0%*U!#pBTY*h1F8umSk6F-z{Xf_RiU0azhg;(B!+veWEB7zS$&bA}Xp|>G=L1_1 zN4ejLR}0focNwDB$P0{#(fbxdvf zb7tVVIJ4_;MV%|&oDO_ywL?&m;*kGfF$37r|L#kNAcc zh@|Dt^^NaMMKA{MzkTrpoX8q!+fc7B%}KQ(+_VjyFpStYY~%5i{D$*Gb*692!cx-f zNvKL^4tURkE_ihA8S@S(?^p&h)Y#cBolfK~l71NLQS4mbhtq9n(PLSG*onr$43Z|| zCk0rZ7xj@M@-|R_Dh|sHt%Z_owA#g8=r?~Ye9l*fIV_$^hb1|y*A}pQre-$YW3iA* zZe`(~RDs(3^Z1BmC7gB0N|y+SJ4wEjsh6(n5~pKmOcX|{B>I3tb`*7 zyn;Cxg@c#jj-Vh*M(W|==n~w)T}{)8y9xGM&NcvpGY#jLS|337z}nzccgsVk-C_U5 zgt(#AiVD2m$UQ`B!uliB3Fxz_91##lVxyDhuoGC@@+hz=xY#-f<`zDet<`=9c!*Dr z)AWwHjFKS-WSTrSSt~peJC|xz-~$P(5~!2ZNTvzX;Z5ifY?S?SB=p*;wT}Li5Q-cr zfnAQnHRK)_I<9j&9S|1h{Q#0e`$sTFUZZB32OkrieF^q8jVY5Glkq#U0^2>VFRs9w(^C1X|MH@Y6JZ1h(M#=(f{6I&IrC-WvKN z+$YrHgpgI|;IqiyV@V(X3gct~h7Hf1vG-N$#=p|J45T?&@x!2lGct$6^7j+K))ri3 zQUow42ZXE$>l_ucVkk4Quq#UDnL>htM&b3fW3=PBrj7ptm&m~}kuDlvAWZ&Kj;R#! zpi9Bc!;)vmKfKeNUy)eeNfe<6Yl>lzL7PtcOHVB zQl;Iz7^EpGzm;7jN-=`5Y`hr~H#t$8I@B=zk`$YFU39!)GL4%I9$L`j48cz5{?pq; zn#h60F9SgDmn_|E{51wI2~eg%TA#i{_3&dqA?V!LJrizA!RBx5S6wddy=2J_jXXb_A;=u?#T7jL@0#eK16(8 zecF2S12o1Sdz+-pv_cR*^i9Ik;+a}a74)XvWV+z|)JI2sM<5ALS0b;ZkY=EwfzEuE z$?n)F=w4{JY45gljuzd19v(!09Ot-yM7tDuX4k_%%g%+QJ3XF8?m(MRIqJ-D!3`%N z37Ow>S-%B%;?EQQkfbhsrF5!Mf2`jMeia)|0d%~o24EuYIo`^~1z628SC-cH&9t^j zGQ;j;rM#qGc@B}qRt+$8hJtYI@M4_p{D(fB8 zHq?S_X!<~e98{Fd&2+Ox+Oqz%Tnln@mc14dJw(_vc-m@7L!E%DzkGvaNC9>D&c3nu zZ|x5U@C|2C>T*XCYq&DrjV(u?C@na9Us^?o>qBAVecW{BwdqEjA5ZZc@_A^I)0^&a zJZnR8gEzP;5ZF#EW>rH{}bCOCVDD{H15pcl7-xd4MtWJsnN9O*o~I_@8F~~fQ5bN+RlSULB@HJE)W1B z(xGDzZkAY+SQ@-UFAA&To97|r@r#l;XEJzE_*VRmmR_`hiU&U=DIgOJIIUUd9R=`6 zAp=wl`A=3(*K>7|YYRqp%p%=!l?OY$tgn$Ljrq`cA_HO|RuoHid?P~}FL)Y}bx8{` zk_@ay;?=(+{tsSlDUgg(-Wlb)z!98!z>O?g;th!}%?4K}_gIhOQ@N=E?b26!bHA9x#w*P9YaK zIac5U+#&gWsk{T`SJE9Zcxeh^zfEHyigdYezqmof6Gg8Qdh%sO+jT*c%}uf83C)Lo zcnHdoGqK=T+#mugS@svwrO28Sg;S(v#N?7h@~!J=!Ln06TIu_&W~A4XJ_ipk=|_~y zG>0pOJ_6q-$FheEstNg&W83m->@ZsZqeN1CA5;SSRezf1vDs%YR}7T5$R;b=#SInp*) zr5kx`rR@BCs8(Q5|97a!K-M;1kGj2sYdn3uOj}Wcg52C!pj=WLxsd?A|3c{JKzMnB z4fUY5aSzqO5hL1$65Ii5xC*7pgXBBuGbN?x=Drli;pqvIfb5Yl%NlGU2Nd9>w)XfJ z2k^4b?ZvL-gySD;2R0Ezs3<*;Yci=D)TE|+aIWcRnhua`L}m0aL>(q@fCsM090Srj z`(soEt3oOian2}#^GC|vf!@L19w4LBY@kdNEVc)**i5_FIz^O7#}d#o{3|`2u$pnn zK`Q)VEMLZ=UOz-dbi^e#10izHx`0gJXQ8(Ke*hz_Lh`{(R8o)u$~%{=+o1WNN++^F zHf-ZA8LtBto%{y=fUmLF;|Dlj3rQ)2JnJAhiW#+jP8W59^@BJXNZUp2r|rOBIJB@a z+>8Pd^GUrra;(o}mEz)$iRqXFM~Y2XI4@nAf~Vf~8E<^#+52MzDfZ(xsChqZE$7G64536ML%q_KY62Ef^D z9$%MoW3JW39Y`Lz_*3f4x(k=&#tHMp;f}-DIEzz8EncaUD&W2 zOnaw9gm+57S*tybC3}}b1QuwpG-d@fnkV1IXdJR{b~1oK`#_-UQQrH9wHQJlKIybJ zva^TBPhV^}ju%9sV@v5t9AQqYzLe%^G2|$aR@jeD$IeTVzc)d@{X;)Kojtc5Hkej} zo%oK*WpiiTL=Si3LEF*;q|MFXf*)eZX|+EEyO?_w7f@32To2twrjufXNIbbzIotQr zIk!8tEtKsm=FMDQ2idX5!>72&c*NY7xWiwgh4ucqzvG7s=t`^gqnEkA=Ys#D_Ftsi z$RBV^?T3e#X&c|dgP4~$`1`rLx!!jEFpECi!vz=9hkNrQdkI-DdW^eVj83!OqI zBTX-K37r{dVY<*abBSB%b##-TA;J_OvQA#0^^|Ol;+6Ws5`cCHi0N}mnkBkZ6CsqRBu0Ky!5970NTiV(a1faKctFS?7gW; zWlh_jz=mNBCj-nYF^Z<&A`qGHG~D$&fFVktNIdyIk`z+)g-$wWi#Li~#u_Yzf;T2Z z!Cj%jw(t&gLjT(4A#0W%At$x>$b%E2x`$i5x!)X#C`L+_(!5 zIR|N@)zg$$#XEq+!VEDl-KxMhRL>|G4v(a38x2$y^YWRkFg?)ANObL5o#?jW-^Dzy zb*KG}m^a&+J9b}S}nyny-m@9!o>vE*x<=YE7oP$@lP~X6Tn< zsy~K~H1|`COxyAR%_zR#h1zgh;f0)E`{&zm*cqwFfYyO!nn{?Sc&gcrMKIhiVCZk7 z0#YDx;$SP?_10-MuhKUqDkbSm#WB42g_~R8#@4pqL8r-Lih%$epwLBO6ZDW6d=GPV zhbrcXN1ftPmzbyOcevW-Wdce}fS2mG&C8`HtY?fit8E^_pj61e_|-O#G_O%Huc&Qa zwyX@#Hof*hV*(h>p!hPYg5mKNu>_Hbu|!#((`S+rW{1 z#QX|y#Mfy!HP_MnSAIt%M4v$aXlEwQJ)_s`nk(X;5T)NPBaJg1ub1iz^FZY;-Cd2R zTvA67+*D2ypvc+8(5y_LWbAyioR8={!=CVQN`=BNWMBaKPvO+Z**NGd7yC3}qXWxm z$wh-VawQHZ2MNDvN_(s2W>xxWvuw}+O7n0$S}wLRyoh^McfY9B3Vew~lj|r(ol7Z! z9dY$nP>G{Bp%q83Jp-4ne?RToqpwZRi#YNO5xmN5oLT77p_*S{RN*&RVaCC~X-5QRj=w_>CM)*{1Brhd7qRU=pzG-N=TG<2rj_G z#}e8Q#i!G#x$%=B=sToFV%4|^Ivkzpc`^93^=-6D>rI|_RwG-cA$eaP<3qL=k9{577WIIOX@RJ7wDT6m2! zL2nT+-YCQ2X8K$~*o&%1()sT?{H?qJ+mmrc$}9fj5SCK@YAqg8`CAdGqSsuB4mG2P z!fYd0SE`q|_5AekSyj~Mp;UVYhi1*@y7VZF4E&`K%jH;mHOPg%2v_*FQOZ%$Aq>)v zlD_>W4IO)ovS7_|3-qmc-XUA4If8LX2#m%A%Ak@FjvHyzbpB0b72QO51fSWU`Z?fCmH4 zPw~!ZszH&6BUm+D$6ZboYLr>CkxaBYv zo+_CT>S4pBLz~2Ty08z_I^>k$mrLm^$m7zBeIq6dDdTp`l4t}xfal9>Tt;m~_-|tg zfkglsL~=M-!%#J1SBW3>LfROFAjXU6NDRzlMEVl z^o;GargpZ(-PvtYvTf34yG+40O2(v>Xj+L(XlPrJAv{B>_5#=odUU#p*E4xLB79^7dk^o{tD9%8{sI1Kp{{VJPKnlP2=X=g1k^Z^&zJ9O$*^+bS zobUI0zJH$Q`99C{ef|*7h`;zL@V8_C2!r{ez{FeEO-E_d*`zv1sVIX4FND*5XdzcD zk%@Vt2a}xrb0s}p&&p!X)6i#--r6*YJ6#~1ZFk3bpV{NMsz}bEt^i?9v%v>4{qr7D zRRrpu7YOi(pSQl)A+T{n7s^Tc{6))dI)Bj+@o9oV6ILy(JMvaMXU9Xe^ zKB>O7t^}37KcR0B$((0=(C!bMHZdOkG_r4Drw=mbqt#g7)iJwBrrqBsB*=%e948h9 zS{`yod3N~NveBS(O>Op?`PotD^VJH@1CW)ejvu7QY@YO5S{%+{h2Prj%;p9-y5BV< zj-^CDr*~}P@t_1; zlxqsI*9J486wtTPe95R_)JSq4iEmWHkPr^>E6oqV|LyS(kw|OZZou4o;cV+@;gRE$ zVvqXf=7Hgkp~~1&^4blqv>tzsq=vE+(OjorD)hq)JTWj$9!;lxBB=?qf2#F#mT{6{ zNZUkwS;)F!c}P|W^LZ1Wv=%BdCbxcTe`Q*0M}H}Dt6`ApQ-YKC)mMt#;9?yTs1HP$ z(O*OSNqtP1hjkxgk91t&1!j2sQHFKJP&irfF`P!X$Oz znMW~gcZrHCUc7EFQzyAp*xIqUP=Pqhhl{rB6T`0%`)RwD1>alKZ@0P=t4tnL`TVK? zp!0s3?M|PL*bm*#tHT}on~gq$GAjNe`K?U_;0zQdRS70cURxe6x{)Wqf?Roh)ERKLrPxt+;^(QrAJjz3zFSZeIgmg>e+~rwGCZqE((d z{KEAyky&q+c!t(eE5IFEOS9@CVIDD4uQ!$IEiCL`eV6Z;tx(OAgNWzklQa^9z^z8+x#WC7AMR)dAGwlU^`ovp8|Xeyr^E zkdPA;T5uj};qTC-PYEM2vg{R~N^WfOU2MdYypO&AhF zOB$(Z#%nVe^N`KvbKnK!^y_(uM7w(AwUyWfq(TP@|X4Q7^}G2w8NC*W3#ycsp9wQ?A( z&JPSJ&@epq#;Fs*0{}E{22=r7fvN`R8e*cUyR3!|)=3---OYBYf|bx-zhJ~QTfZ7| zJJv8vRk%*KNcz1uKyRngOj*X`_<#_SSCd1 z5l`u@%1L~R;iJvuqc7Lq7qL9L5}1q|-qmvdht3PM->?~(K;DE1&ppUPav>kj4a@e` z<8^B^X%R6ZTs^MFM9k5bG{+tt(&2yyg~emtUtr>dxt!r^w{zRgh|J$v3wdJXYc!Aq zDCUh%b<&wV*su+7ByOUpq$WR*93ev$3uQPdNjQdnXlX`2i&mk5sn$Tzu3l*rky5W+ z(2IIaXP3O;=R^-bBMb(myLHN7A`Ur;60*B*BZ`!5qLa!KJXWa4_xBuulyLXBwY+osd@-6ZA|2>jz5Gg zSNy~*SMPujKN%7Snb>x-+(m!8C@`36U4@hE5!*uak3# zyQFY5e#Cm-_|}}p0VE|jP5O-c|ky=B8D05!MC$)WrV0c~&<8cVT#RDh3J`A%8``-9>>weAxOM zo#T306G{D8j-ygjJE2V4n(X1KxBavA@!8&yli!+My@AFEe==yopR8}GbR&Uy)7pEo z8W_UG*z-6H(%GtA>c&OMHCjQsFy84m=$I^xQbe{?dGm+gr)QvWHv@Ac|7Oxf-C8*J z$`)B&oA`}txJ?av9h~pS_-!W1q*sZ6!^AdOZ(^G)S2I(wO@1S&iTXtc)vwwx;Y>Uz z*@%k9vtwa<5clKH{ag%`SlqlrUb`4@&+Nnu7-h@!YTmt(g)zpD?^?e9!1*A*b~=Cc zY=@1ljgHj;cSg59!dD4_j$@4$blw6Mcdg}qK%~b6LDvRttWCVEVaO(M8Vfw9vV1&@ zO)a!%?YJHX{i2^&Qo@Ap(tKEtCsqxQrY7;u-^p|6N{^TJjNCKG!-+L+@Q|zl--66I z0F%;g%5Qbu%c47(s>9=@=;IpJ5W{w#TVEVM(OT&hi$~YA{ju2^@&It~ebnFtl|lU+ zgJcXraJ}wMA{%P(u+a@`Z7N|qv_hlL$UxwoqMvKp=@p^Mcq)f_GuV_dUN4NB>1c~g zO@hfr;6=5WUaPg+3k!Y@3y`1f#CrGIkKrJ*cF`qtX@0Eg?Xhz8$fS_MoVvVwl{rf{ zK9UA%d>_ef-$!y6p2O44|0&J;>j=F!hvoUj7M5OSUYDO#tQc=ufZlpdHrHDJTB9qJ zV*ZqG8OF?H2bu8&OYdIZ!m7?}vrCSIt*#hajZ%4?Dgiu@`88F)`JQO&D?%cf%I zT94M~&Z9LZ2$Hz^Hqn~qRqW6zj#q*RmcC_pt=~(prrJ1ktESJ;t1Q9H-D~9sX+I>l z*0IaB6&8@W&PIk`#22P8hFBl4lbC52XqLuUXs79sJU%SbV&fY0P_b^B9!+%-t*691 ze9V4GrZ|53wnR8RdO`VdHVx9ue;I9xpO^>t%03g)N)zjK%@06f8&^$xx0h@(fPw3p zz>sIdZF>n#7sVD%OlV9umQ|f?Wkrqodmx*GP)KTs#r+g7BJpV$TmBD>` zZ(|qg9^Tl^*#bU+@^3rd7sC8-74*I>Vc$lt}DT zOYDW*gj}>QN9E@{A$agp)V*yFLekqV7n>%9$SA5Eli!0KfFSzq61l#kF-qjh5cJez zkOt*3GAQB7eAkn#09pjRxpYKvt0S?%AcG5z{j^^~)?yw9+CFH?VB}`ZSiAxP{?(N6 zve9wO;4xke?RIOF_=b%>vxCWpNG~z{*Lxo1ZluFZejhMq_*=Xw0`~EiOC&b7uJ;lw z{HDx^ghRsE=2a^Py=MF#w??P5(t&QTyM+Y8_wx!TR_Vy>K`!1vl9imMCFgjkBsDwK zR(>XuyWsJ=0~s%AkKy!plVT*}5ftJ%8Q{@uXmUJXCZ{2vjoGa6*e9?pW$?<*QM+mL zQ}8+kPwS7DO(M0j+OisMtWK?*%k`GIBIY+%+uU#x=9v{b*UhK(m{V8FrPQgb=Mv4< z&6l%Nwys9{E9bfj5NS$T&d=Uj(=m`W`Mm9G=Q`Kc+Sk^@3LAgfY~y^pvD$N|u^VfNKVrOcvx{r&#(I0% zTpdEJYF)(<@X1^~$@RZ<6^E z&rNpc!-j7r7$@uGhCbvOf=Q-Bg`3Lzsje2R4@#yJ#F;o_I4T-gW3)O}(B^MEg`0sz zk!BMxsnDGdQk%|ImsE8XHLo#8xNI=N`-NG?R8a_~){o9>Slf0rJkjrJ037;#E%f8_ z+q|Bj>J9Ww9CuDjQ)I*u!@6Ub3A|bzDUMh3aB8hf>Q~cR%~N~ekcl;G;!xqbocp5Q zF+$cB+I4LVmYw|M(@fg&o6h=k*;PZ-U`#UvPt(%6(hXvWb!> z3~_F#Ks7cM@USco{$2=tg8@PWLjT9qe}e?V1!%n43j574jl{uS$f>J_YMU_qAnRDi z185meoiVzODQ>qEAx1)lVWUOkMeC>7)=@8NG*M(EY?w^N+>z^dJ(utd=_9|h7=${X zBiMEmQW_#b7}bS@TNCi0((^zD*DE|$ofgX+LO79-ZK`3s^(ih^!+3aKr!5ODo(5~Q zc*#{<@H$zp2T%bg+0Fy34$YQl1b?lxsKJLZ2g$8NOX0~uAfjXgYu!ssh=)EPr6-jO z?|uV|j+tz#zfZu+T}fVEJXWU-kgSe^&sh{-)#USkyp5P;W)5(<9CUX?TY6rScWbmmmH=w$Df zi1Y-K{_=RgBs?l99)P}<3G-$nWlXq`oWz)suBwDf?$5pXoWivj?GZ71slVjE50;ER zB0QSwL(7H2!cBJK-=rNk5wh|2VHU@Jz>MTBnoU6kyz-4rL=JK9xD(x^wu&l# z=0qQ`D`N7Ioo%1R{p4)mWXIue?u-wvyvDtiyo*lt6DrAp*TRfb5u?eXiXV3jto#>d zq8OW@YKYKW?q$o}oj%*UOOc^*GWY)B{gJx*C!4ZgL|24o)xss$G73^n67VZPpLO6NM)ZT{TqRKd<%=l-Vg_rP6BR zgqdhpm7U0y@xgoEEPu}awf!867b+i|b9XHKiM!FceC15)jX-KVh_P5GNSBh|Wpp(T z9dKJdG|76@xQjlc7}A4^A)TGbUbUOdUo7mwp*LDCw2w>9yS99yd>46}P$x`e$`4iT zwy&^HR-vcn=%K4R+<5;z)#d%_Ro^wDF&^t}?BPnBMVFq5 z58nF)`xNj1+$>_ygZKPLP8P9M1L{&5hAXU2+0PR7{xo_nC**-&=mWI;W_f@4^J;qz z;V7!!w7+@Aem-}JYQJvG+-Jb}%};3;x(T=rIk!epC_P=uZ)^Ko%9nGZ{3I&OXT;tN zkK5V6eiE&b+;QAW=Vo8Ddw85VOpcWg-u9*G1i(&XboFV@oeREkmj^m{0|uRCWzN!4 zI}~&3NjQmPXi56zVtbtfDzr4w&e?RUR;uDnN7x!=xMKkNpC z51IL!!nd2$cVosEau!FK^~FSdqN>RbKm3Y&Juw_rzvly8SM`^t?f$9btZnSn1qC;& z0ewBfM92m)j58H6Tpu4UZ!GP2J83!fQ5?bRu@TQTLeVRI)QbzzqI@9w?D(6tlw;d2=l+@vlrqHtJ*mmf(n)@%!{wZA^h!kPvZkk*WcJ2+u z$L{^4c2e!H*E3u3Q};%l_u?dMUtesK_V0B0ZhOdyV2lvC*iI9%wyXG}gQ>}qwxRMd zJI4-SpY&`Lj$x&6QwZ&J;I4>3>8j(?U-r)j4L+D%Ph+ZpM3lK-hacSqn^@kRI!#=b zHO%`Cff1nvkK3n)$3!U7&I0M}!Z;tY2tWZl_fBU)DZAdpe=w9Vh01rvDe-~*URzs)+?mqVoLtvE8$JISN|{RF%_Mx;}mE z3cTR{gpN8lm9k{11rdVx6%*NnrXe?1tEhcbDZJ%HK8!sK7N}5lV%LW}9B!JXH!^+~ z;}xS?nfn!J&dxl|SvlKX5P)6MX{^z}vT2N^4Gzn$zq#ibLymUY8T-WW*zoIMJ~rPn z7Z*FGN`Ua#dMel_JW4nU5xgn`EvSIVNXRYoxZ`G%?Ry%2Zt2usdb0t8o9I|rqjA1n zVxK5KuJF0ABEv5Or+@BTU)C|O{C)I4GO-^0l}ClkcE3(QM<-z$YcV=9t(S3@vPP#5(CWKS&)_y?VNg1NEc@)P)stch5HC`#NVn7g-_$#W)~+ zg&nWAd^FFL+9!vO*#`rI69-{_BY~@SGSHS&q@i)o#5U`4OR;02Mf_|X zyANGzX{&YGO##@a#T8kS1JfRdKQ~ctiz?iGFz5#RocRYiTd|jt;lrMb>GeRigtD@y z3M%&m(&KXV)kMZc#l6KeIew8(|6tp;F1kPDE)G~bAd=7BnObrGWdVEP#^vbJr~0RE zT02(!V}7U#Z7()rZJZigLs3&gz}45+YS=lTgF=|(Og84{uu_Pv4K zSn+|W=0Su9{3s!+AzC9pyAEAgN_UpHks5}NS$jbNk%M`9hd*`PHoEh7>IJv;Hi3nM z+|**r>&}<%MvoWLnHri|3e+~*y8@GLWG=A|+-RJK70RXcQ9jB2-F&3lRQk0IDZ(R& zf0e%e7vB}Eu8N5ShzO9q?o6tunEn={H%%066bCEC|=Db&&H!K}jM?kOaaB^^2;hT8T-o_f4) zSHxr#Qd7zEkb0K~{hc%!=8H=_>?qC?7Nn)B!yT{NK)eOf3$@(<{2}B3$^fKR7>Epz zN+)oFN!hJ`iXr5K+-}w&omo1`l#LMAiz&<0OtMg!8e>sAp8PkQwKVu3(^DJ|#**u% zN8KUzZgsE7quKbUM<&{Us35#ktX!WsfqJDvJ!fU5LAoiV4%>aka<7PLB^tDc;>K7{ zD^km-NAROUGNerz z0ITG;lwyvV;B@9y^Y1wmzOivK`z))`h*wGsv}Vfr`)sBnmff4Vo6qk9b-p+WY8?e& zy;Z`~#jF$kuArqJAhj637D4|@9`xt(XckA!XLX#_Vla(>b(F%TTG<$2T}mniUgbU_ zu>T#jJ`AmgCo$}E1u$x##4DJDCGcR`+RKR|m;=V$3PY&LU&#_l_qK$EFscu40i)9k zSSe6V$>{uxq@oh`lDHX_#OpxtK`~X_CWCa>z0WgVA)4 zcXlVc--6tVNv7>d;l=+AzftW|4ExzUAy`~N+|6jr;s2psgpOR`EZG&5x@OD{J#R00 zKA1epTKwnp7Z3ba{vu-di?2@c7oVEqFaG2|fxp=Q|37~b|IgtsNZtk%!yWKH?d{Ru z#bu~q45%G2ghCcu#>=8Vz_|9^DA%2)8+(o%GmJx& zMm!e6XEi7#He)B{v?r@4dx84-M_w^(hha2eD}IB~=zTY%q3F~eqw(C4cQYD$p^RV= zY(=TZR_KeM_A&n{J>p%AQtxIoyvVpSSq zRrnqCS&bf#)#&zE4F+!iCaduhRN(is8n6CtR>KjianW=>x@msnIOGDV|2z4Od;d@Q z4G8WMF&y%JuRz^f`EK^Yeik|&vim*i9mcU}5(78bj5$mTT*v9Q&t?mKZX@6`8$PSy zQR$f=1<5p|6ox~j^gK>u>-n6#cwF!cXzgzf4`64*h5J0J@6X?=DL@vhToXxHqzoY z49dXvozH8S{J_7R*SHKe1YVn_bw^7CsQ5gHDmG2wBBG83?!(CWhNVsC2 z#)sR2Siar`?h6tZn+3#aI-Yr~OB~cSG-St3MF` z59>P*^2;bL$3uD;y)6F1J%0kz`uVePTh`;xPgP8g+Q-V#cm)RCYENtFhCUvD_TEoV zWH`ZR)zq`q?`V`y>5p~Y9=K`Quo@ud3HsIIv7gEikkd!9b?`;Lte7z2AIo z=6R~;pO$)UA;wcUzeb(rkP{|1Hg?n4MkTuJL6Vx;iHyR}6rvAGjQRm5{&KBvyp69~ zzl{)T(z!Rxc)E@AA>7cKjvh`N&0O6MJ5DYI&mP(hz1MBO0O0+M8%-%-V#8jiA!0Z8 zGL4HaKjSo%q|!xp!+~_`fkLO@fXwAO;Jxe<6Ink3iqo*yRyNrFzQhOH z$pcP9zth^OL8Iyl1QL786Qm$;k`cP*E?jrUNoM9G55$k#$&uF2JITGi+mzkV=`@Vk zty}EGf$}4`>Zyyp`tAh?p{X~D5!JH6K5^{*kkI59`KKB>=QJO1TDOqQG|;>^aHzbw z*J>EQ(w%)}ET4E@$K$?bGW)^ZIQr>P&$cbWKD>$LCLt)mW5(3;81XN7i; z5v0!yzmg69*nY+z=2Y=Ws>PYHCcoZcr&&5Yv5LB6sKD3&r&1F9Xu}=~h zI{U$*<^!p(jRca9!k~TmSDpr>sh@z@QXa|ndK<>b=Z&Sd)3cv~yp8Y9|HZ_BZBrcdhPWi#rL6yo`FqnHK>EP0fye0wv}$sGXQHEA-7ZF zfaZoJ-fK69m>#DYwDs`2DKz|wopqWs*+L9E`iK+cm|3}?C^ zD@de}BrA;M1|t)AbA&j&JN32E0JF6CO!CK0vLp+L;(yr`9XjhqH|yKzRr3p6yWUL7 zuVq!4=m$yM_DcAJ&p63&HgUj>+^?Z5E8!p`2ag#5PM~1GV(X|4kTyi6X8Im@o-MNb zq|aG!24(-T;%x94r*)*fZ}^wo(eu_!W_P*piwB+-EHCYJgX!68Lp*&pGtOv0L_~kX z(A*lLvYl^ZN`JNoaZFlCZ@i<~TZ;i^sWay#My-x}&DLu|6D4Fh)Li0*OvoALAU!_2 zsJSH2KlDyfLxiB&S2IemSNtOS4kY&OfHcoz3N!^W=Yqg${E$Axzh?~b zHpavWpodw{W$0|`Eb*=XUE;x9_pYFQEIX^8{LIwVg3QnQji%J`tO1nsmWQ%QOMcd zv4v_Pao*Cz0t$^^sA#&1 z@kV&Ha4H?nUUMAuWeteY6XP+b^hcx>;TZ2%*=v5K26q7~-DZx9A&$M-eH02G*$4IC zDYeu!lkstMK)X?@?4g|y@+AB#CE3XN7p8Wv+SZBEP978+J&IB6K+>eT(O=Z8=y9pS zLhI{l=vf*HvaF!+02eU)NUzr4T00l?gq|6D5;roNTRFCdxyH1`aE->7#1^(yh%pKh zJ6Y``C8(+C_VwjH)AgNNV`>$fS|6QR3nE6miK#yIny#pybVmI*@qhWYsrkp*fH~F5 zk3i-2nBjBj2I?<9(oKa!3^bJL3lqUYnzH**_3@We$NM>@2+l(pX082*plJroxHp~w zK-`ck^o%czHMXJZjnxy-2vDeHrIBv}djk8A<~TTgfM6hVSoQ(sqx$PiXq~8L8VY?P z`$5*59Vh-ylAybJ=_31vpy0MM-U|?D{NHJEVXOwg5ncj1kcKcYRbb{(locovxqxC7 zDN)q(3H{qu#jK z*2<~(y}VWIz6dlhg7A^(oxu&gz0&7~A}~uZt8cgE?ftXC9zSX0@#I@#W840~hJ8D%O*Bvn|rg(h)$2Wp-%>m|7hYAX)llg2zmm}0&G@07*^l}pIF700$oIN z=rqOD^WbVp_lL@f95HBTHS)9=?laW%)7>!xiYoN3DL4itA28hfAg;tfNzeHMIZOlI zKoWyyAafF%Wh-{NFqGDkKA8_Kk0pVE6wx0??{?iO$wb*p(BdWX#f>B({++ zk{j|M19G!Qx%Ir;;tbCHQ+~E5CtvyLq;!stX>OQx4&x^~0_SKPaGqtK?qKN7xN6Lnxb<2wMw5p9}K%=Oi96 z6L-{%&rF<{Jx!dZ+mARukW-!m&|o0~&-9I$h(Um!g7;{D290Y3!e`b2Ugt&#`NZ@ceJ{~YU%#|cR zeks$hPw@MgEWHSkKNoYfXv;kIp&I)bl;aI(hnVhT!OZ81&7!{{UbHVb-hua-nZxnR zfwN1scF=P#A&cQ+NyB-7c*!1pTnP2@gVDKlM%DK6a(~0LUqx#+ouhQOd5&wsm$wk* zuOZ~tov{-~-RP&$#vWe}vjZVQ;)JEoBu_wCoaUoN%~9yeDI=d2={*@FdEd`_$Zm6l zLwmN?!)+h1TXE<{Sr#!)*{cmLWLs@L3JGMFELPct8_>H%-RN9z{@(q)s>7+)NRhSf zGms+p+FvXE`W93=c2h~JD}+sZB7#($9xHU02i$AVaKk6;*3GgNY2E9Yg|+qvChUE7 zYnMB}gC#AHYfxgFTUThe_Dc292@qWOD~xVVW}A;X4TIV1CK0x+bsyxD5HpX%Y0CKW zCr~HIgK-RtC%X2yxa8(hkddcNBXGxwj5uTXoF?ReE6Bkr|-TmpA~d6l9sXJm-rNnJ2lQ&kRxkE_~hWB##!MKkYAScuf4?1;W=iNVMT$?3?yr9G&uJ7-VB_G9wrzkx}yK z_mDV&Qw*28^1*M;H#+EH)0blLpCpA;rD2ivSsS3FuKek0Q~1hr zn1-H@&AgkZ&+>N)4@bP}0Kp!ivcbdMTxj;lPOJqyvxDZ0wf07Xj=fI9Hc6+=TkPgR zgOsRUyM7b9%rKP0TMg|p0x<$9_yI*|CQHt!s?0qPAqlol-y{?7)HsBU&q886)Dw{I zfv*<*eqqGG>>j6iQ0zz0d&c2r>qHwe! zauE&in7(!cUpEC=lOQkW#&EF97<#^(ie6U2N;&|vpR9nXoAFrQ<1eEby$0eZ1qE2l`fpoq;JBne%z5OlE6*1zyeF=s2ET}q+5G!o= zPnL3VkRFZyPvJ!FoZ64))94%`3}`px1nek34d(|(Yj)?_uS?ifygk%;=cMQZtxY7=|SfG0g;j0@LbI(s=V| za*v^;Xr1L5lIfIx3Ik@V=OAu6ln~f)T@oLhbe6R zq&D`2QvRjRMLHvTa6@09%Ux0wDDu>{G*F9P4&z;F*TWH(Ictr^7`r{`j|mZ4gqp#p zl?YOS3GA|FmF@TVZGaC|mb9AS5vJWEIsQf^Uvn)1ao}|`vnnYq_V^f(m0c0L)!JGc zyLC(GPCmIfi#_sTDSz*d-3pJ361alW=$%mVc^p0Z!nLL9jrKKI zPm_FV{9>aY_YzUH#~!8Uj6)ZbBJJ}Len~5yj}V4;C`zL+>Z!_>Kjm(|8!1kmzGCH7 z9j_bj2J41rQ>QKTD0i&9>}kM3A@x5y#QNW{YDMe|1%z1Q6)K1U>js|bd1~@9>wyBg zq)1llzQYZ~q$PHTu|Vil6Pg)sURc_Y*`}Et4kFY9kBUoS>*cl4{UavkjzCvcH;|(- z(7uk{$1dIt$q_huYlA*v7bVMhbcgl$TNrt05wVvlJj{iKnmJ_y&V#W>Xe;wd`A&OG zF7`XK(T|t!lxckcOJ(GP*=Vk1r&i4|&XSEwAxd!%7~3w&)^1#yJ0glFGjCa(3)cDq z^YCr3+9zn2k1fr$QG#LDqUW0$tU$nevViz?bWS$o_2$=w{3>?oIoDu*oQ&~;BS>gh zFkS1}Bp!)%()8iitovs}$&SF?y$f74%AGQ=Hpgr1CCuU-R4Bli`)#_CTtH{EP=dqh zxi^|XbxX_V_23Q;9pBxLFZI)p2l#4s%v(J+Q&x{1Dfe$Y7DoH{`ZjE1L}=f|udRM< zgmO;vToW~hq#{=PGHN1FvY#|RI42QeGXVMuj6$y%BMf9=!u6tkG*tdTyeZWB$Jhd( zwQ{vpMgu3N=yN9K@tx>?(#bbj-y$ppS}RuWaS~-@JyG{TN~s>4<;3ZVqHaKdv9@;! zuUak~b+0RmCrYjF5VM&63|>Nln?!G_b??P!9(i;)QJuN8My<@6>$jz>dz=?jx}I>_ zJVd(gKowMWh@jdWqgQZ}(YzN@ZW1S#IfRKxJj`n|qDRaPd)TAq22I;WbAz%BZ7F3+ z;q1%}TL(%wo|M@{(9%r>oUVJV+3;@qs!`Ei`yQ7xWYVu)>pkG~MhD!SG_Xb5_~Qd1 zW1oiElepN_%c%@oJZHrTSp3zjL0_VmdFO2zng#pI>unZt>kd3H{OHJKAZ(goqvrdJ zqut!FGONr@$PfOh-i2)w9LPK;SWOG~VD3x2AgGFyN~x$90m$5!dcl^>JwYU;;5PSV zUc^gtPsINv=J|m@|D2`+ircK1Lq>OFCAw2xUOdZ2o{fF_D`ry691I$TvgQGW5Vj7V zLQZ#@${do2Cl1)(LKVEtzSwDa*uEC1s<*#|5k{x|Ik>Gy>~ED~A7X#5*lBpw{#MLs z-E4mjW$8xyTV+n`WA^95_O~jS)(WXy*vdeIm^Xzow<>iKdKsnfTxeP=5V;ayxPuO&FM> z1g9S}&|Lv;@@ih9+S=Gmw2L=^Ez)W(GUPo zcW&2sN~O*q_f&E;{qjXGer+_<@Sxo^l5IU?ZEZSqI8l3K;7PXErVRZc9{blahnq*T zUn5EJNMMjO2DE3nN&+XSXkFvQ?z87Qt?l+Q(!2}W?BzkHb(Ou0$eIc=WiKywOe`sU znZ4-4_VTc^eVJY@i}_K!@bKNf)I6ymW`VQaL|R==SWp3!w?u8&B0N)f&17n%)^#Udl zLZ_*cC#9M$dEYdY0nJ2@6=F{V(^vDr)KIE!Py}Ev0obP@={1GX=PW|n*!6N%d@rkn zHvISW|MGW@@3;2<4YC6Qh3IjoVGvmHK`s}^`PJwDJ$`gPOwu9}dM&oxD5G=Ozntnv zWzHbx1J4mZRj?0Nz_yif{V1)JaTXZ08fcb@`K;X7mgD8MxwMv!+5PaL@FRh- zBQG(Ffo@JI((t9X&s!3^J9}lOEL&o&tpLh!V;_v;)M-8N8b9IjK3HIxXkJWcEwLE14NFK%6vP6>jZlyv1rU?&Pyf0P$=QF-(ltn6>@7sB?oNxr7Z* zUp%UaBe38Zrc73`>!e}Tq(XiRfcYr*L2=l2b!_bG@boz3j|PTLO=PM>PAZr#*?&Z3 z(&6iWlwj`~)~^TOui6e+tZBLDg)9gX$)w?$OMI@m#Bj}XHMvV-%Uk~pmU(Wji5ceP zWi2I$E)mq3|_a+Oi8J^b?TiQ}bx8~-Kh+KnTsy)R{ z3o;1hQb2R*QE}A4v40viw05e^+@H|}qn}UtDgLJT&=T5;m-Sd@5XLL zj^n~*7TX{;IDNbIz!nDJ$eaI@l-KE=s7J;fBBK3ISr4bTIUzq4cn~tTI{^goac?PJqG^!U-EfXM1et{ zsc)O{Y_I?9t23S*^`G55;~7FjIGzYuuGBSb%GhF{$)D34f@ZWWf?lakbkrzWfYbmqeZO;#;^3~iRxk#bzzD?#fi~i>YZ~f*IPTT zBU{1yF=MSM$E55F!x%k`@U`@0kX%^{)0k=40eV7#UfdZt`9{&xGd!va>B$R--*h^V z{HHmIk@3G*e_OF)F#u>fOeg6WGR$La`xwMCI-S68_V+^$Cac~q;;~L9kezymFb9F( zd_1wmw}oNM<0W(fPWLZRwgpbiq3OPk zw7>~n-c}gs5A4ANwV}(pabJ0l-O$CkogKVf>?ng|3HIt_zOT@ZhOzLPmkhTM+M{NA7OXTYi%~t(6>oUVT4#cRv+hrZstAB>rt+2aJB3~X(fd$4>fj>x zhT-FZe2$JdH3w4yh%NZDf?Ee_)Qg|6=#K)hzE;@4#$)Wats_;3s|J8jEq}5EyOY+@ z@%IqPtO_3icYYNi-W#4{v9;2lz*7L5bnEfjAK*cNXT=3Y=8m=d!I>4zEXUeE;9SIoQJpngQ}QzQ=0lvl?2lN$;iGI2s(VI=*EVP$);7QOn&qBlIku?6TY|gLD?wpYuyRCora8SvrUL*%6&>?Fd=G7d9!o?WRFul081u0lA62fx&=Ind8B&Rzq-W zyl2H%5w9hA{5{J`U*d_)mV1hhu=1^Y_j#@tNc-^%Ky`G7{T)O2SA zIG%$9O=swvcGZ9USNf7HE#lz?BFAe((u*e^4lv7!Sf4(_PZCmfqIj4Cgw>QCfc(bj#@jKM_F;Fp%Qo*4^qF* z+OepvP~ou-1|qBJ*u2C@@|RGke9@#SdXeFmW|WWbwr(6M9|}b7_v^f(c3Ufv#sT6^ zi7b6ZiRvk`dK8Nwvv+K>c68?ykC**hdmKUe`QbFhocDC>PhRRYm2w~zzqk$428_Up zoiEJAb^hZ;O^@LLMxeN+-n$0JhfcZGm%EXjnijhWWX76@;dR+0N+%gKeRB(?gJ|ka zpDqj>qX3P4-awR8hQPZ`&on)T8#`@ML1u|7C&7~4FbE`mpedN(}BQoCpkAx^^l)8CinyGSdRxFH02jcL7CNEwavHRZy%zqIZdNfC79jdmmiK9Wm zMf-zlmlI2l<8}l;;eM%5@NZ*X&^*XOegY#nK)C2avr7_cGI79KccrRm%}eG)S5Fh^ z1LXkoUi(7RaRiA%>jCAbcSx!DS*AQx#gVlpXP@2BdsqMX(AmH~73$~^v`A{I$Y238e3+0hH!Gs%+WmN%>~yPQh{gK-~)AT3B&g9(bqU& zUL_M9PlVe(j`GiGu5^;sPU~DJk{UkEXYI)S1V|62Xr~}G|Na8&$K7^B$AOrAB@Zzx zd4-%uu%^h!eUGV|G5dntDb(ZVQ8V>Q6y)!rHB)q^<9lX7O1Uzx5A&UNpDyKU8~!rDBn$YTZLEyT9u2oJ2oJU~THLn;%Yp`Qf5DiHFgF=l+UH z`Kj1&N(YEHm+yu@7k`bK7-`q7UeosBEOs2hA9Hj*z(2(qivE~07fu#9Q72KLPJ-jZ z$!z&n* zPBGzvsZ#;+;P%*qKdO3r;uKu@PHeEW4on@%uJ-%1syq+>Car+F41Jx8vWIwVib!71XYPI*_$~)#D<;ejAs6Htx6#19U0KO z?YyJ)Mv)H1gNUw(@xjJB39p7^)Cg`8U$svrSEs;a7{kC&{MnVS+hbL4|A>V3@_A^) zs%2^}XxLh}f?3hWFaYoZS7B(tU2MD(dv&C7b6AKojZ}si9$+IB8!H0di1T+Nj9(EQ zN2Y3Q`6ONA(E6JM982D;7VV6wYigP>5tLTtU7%sUR&w{03X5r_R*XQW(;thfyovYp zkmNCa{x{#>M|yZGsA(ob{0z&)^P_ zCgQu=E-^>{RtIOh;zQ6vzkyxu`0Vv)Jd{p$)n_=%_L3ZB4T4kW3TcQ)2=k4@c*L7R zJF>`D2Qg_qJ~Ro;19b|KcY>lX;LG!#15h(z#jd8S{9tkN*SA z89|pYBk2Xz`wb1~#%avh(s~xb7zo!5%2F6Y$|UR+9iVLRZ$Ml>sXcjCvxOtwnOPe( zpI6H3G*}pz*N{oJ8>&&kv}NItGk!cWCIXu+HM$1gOWY`aSS zsq_;&oRqg(_q{q16)#19Uh&opK^ox$wNDVl4{4c*b;s5<_RoJ0!IP@5mdw7VBOoG2ev2k@OF;lnzvXKmD�m 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
P7Ry|dL3OFER0TZc7S`(
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

}#i{~|nB-6zSwGaRHWJ~`gk0`9dN64&k< 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 + { + public sealed class Channel + { + [JsonProperty("id")] + public string Id; + [JsonProperty("position")] + public uint Position; + } + private IEnumerable _channels; + public ReorderChannelsRequest(IEnumerable channels) { _channels = channels; } + + public IEnumerator GetEnumerator() => _channels.GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => _channels.GetEnumerator(); + } + + //Events + internal sealed class ChannelCreateEvent : ChannelInfo { } + internal sealed class ChannelDeleteEvent : ChannelInfo { } + internal sealed class ChannelUpdateEvent : ChannelInfo { } +} diff --git a/src/Discord.Net/API/Common.cs b/src/Discord.Net/API/Common.cs deleted file mode 100644 index 9885b3cd5..000000000 --- a/src/Discord.Net/API/Common.cs +++ /dev/null @@ -1,318 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; -using System; - -namespace Discord.API -{ - //User - public class UserReference - { - [JsonProperty("username")] - public string Username; - [JsonProperty("id")] - public string Id; - [JsonProperty("discriminator")] - public string Discriminator; - [JsonProperty("avatar")] - public string Avatar; - } - public class SelfUserInfo : UserReference - { - [JsonProperty("email")] - public string Email; - [JsonProperty("verified")] - public bool IsVerified; - } - - //Members - public class MemberReference - { - [JsonProperty("user_id")] - public string UserId; - [JsonProperty("guild_id")] - public string GuildId; - - [JsonProperty("user")] - private UserReference _user; - public UserReference User - { - get { return _user; } - set - { - _user = value; - UserId = User.Id; - } - } - } - public class MemberInfo : MemberReference - { - [JsonProperty("joined_at")] - public DateTime? JoinedAt; - [JsonProperty("roles")] - public string[] Roles; - } - public class ExtendedMemberInfo : MemberInfo - { - [JsonProperty("mute")] - public bool? IsServerMuted; - [JsonProperty("deaf")] - public bool? IsServerDeafened; - } - public class PresenceMemberInfo : MemberReference - { - [JsonProperty("game_id")] - public string GameId; - [JsonProperty("status")] - public string Status; - } - public class VoiceMemberInfo : MemberReference - { - [JsonProperty("channel_id")] - public string ChannelId; - [JsonProperty("session_id")] - public string SessionId; - [JsonProperty("token")] - public string Token; - - [JsonProperty("self_mute")] - public bool? IsSelfMuted; - [JsonProperty("self_deaf")] - public bool? IsSelfDeafened; - [JsonProperty("mute")] - public bool? IsServerMuted; - [JsonProperty("deaf")] - public bool? IsServerDeafened; - [JsonProperty("suppress")] - public bool? IsServerSuppressed; - } - - //Channels - public class ChannelReference - { - [JsonProperty("id")] - public string Id; - [JsonProperty("guild_id")] - public string GuildId; - [JsonProperty("name")] - public string Name; - [JsonProperty("type")] - public string Type; - } - public class ChannelInfo : ChannelReference - { - public sealed class PermissionOverwrite - { - [JsonProperty("type")] - public string Type; - [JsonProperty("id")] - public string Id; - [JsonProperty("deny")] - public uint Deny; - [JsonProperty("allow")] - public uint Allow; - } - - [JsonProperty("last_message_id")] - public string LastMessageId; - [JsonProperty("is_private")] - public bool IsPrivate; - [JsonProperty("position")] - public int? Position; - [JsonProperty(PropertyName = "topic")] - public string Topic; - [JsonProperty("permission_overwrites")] - public PermissionOverwrite[] PermissionOverwrites; - [JsonProperty("recipient")] - public UserReference Recipient; - } - - //Guilds (Servers) - public class GuildReference - { - [JsonProperty("id")] - public string Id; - [JsonProperty("name")] - public string Name; - } - public class GuildInfo : GuildReference - { - [JsonProperty("afk_channel_id")] - public string AFKChannelId; - [JsonProperty("afk_timeout")] - public int AFKTimeout; - [JsonProperty("embed_channel_id")] - public string EmbedChannelId; - [JsonProperty("embed_enabled")] - public bool EmbedEnabled; - [JsonProperty("icon")] - public string Icon; - [JsonProperty("joined_at")] - public DateTime? JoinedAt; - [JsonProperty("owner_id")] - public string OwnerId; - [JsonProperty("region")] - public string Region; - [JsonProperty("roles")] - public RoleInfo[] Roles; - } - public class ExtendedGuildInfo : GuildInfo - { - [JsonProperty("channels")] - public ChannelInfo[] Channels; - [JsonProperty("members")] - public ExtendedMemberInfo[] Members; - [JsonProperty("presences")] - public PresenceMemberInfo[] Presences; - [JsonProperty("voice_states")] - public VoiceMemberInfo[] VoiceStates; - [JsonProperty("unavailable")] - public bool Unavailable; - } - - //Messages - public class MessageReference - { - [JsonProperty("id")] - public string Id; - [JsonProperty("channel_id")] - public string ChannelId; - [JsonProperty("message_id")] - public string MessageId { get { return Id; } set { Id = value; } } - } - public class Message : MessageReference - { - public sealed class Attachment - { - [JsonProperty("id")] - public string Id; - [JsonProperty("url")] - public string Url; - [JsonProperty("proxy_url")] - public string ProxyUrl; - [JsonProperty("size")] - public int Size; - [JsonProperty("filename")] - public string Filename; - [JsonProperty("width")] - public int Width; - [JsonProperty("height")] - public int Height; - } - public sealed class Embed - { - public sealed class Reference - { - [JsonProperty("url")] - public string Url; - [JsonProperty("name")] - public string Name; - } - public sealed class ThumbnailInfo - { - [JsonProperty("url")] - public string Url; - [JsonProperty("proxy_url")] - public string ProxyUrl; - [JsonProperty("width")] - public int Width; - [JsonProperty("height")] - public int Height; - } - - [JsonProperty("url")] - public string Url; - [JsonProperty("type")] - public string Type; - [JsonProperty("title")] - public string Title; - [JsonProperty("description")] - public string Description; - [JsonProperty("author")] - public Reference Author; - [JsonProperty("provider")] - public Reference Provider; - [JsonProperty("thumbnail")] - public ThumbnailInfo Thumbnail; - } - - [JsonProperty("tts")] - public bool? IsTextToSpeech; - [JsonProperty("mention_everyone")] - public bool? IsMentioningEveryone; - [JsonProperty("timestamp")] - public DateTime? Timestamp; - [JsonProperty("edited_timestamp")] - public DateTime? EditedTimestamp; - [JsonProperty("mentions")] - public UserReference[] Mentions; - [JsonProperty("embeds")] - public Embed[] Embeds; //TODO: Parse this - [JsonProperty("attachments")] - public Attachment[] Attachments; - [JsonProperty("content")] - public string Content; - [JsonProperty("author")] - public UserReference Author; - [JsonProperty("nonce")] - public string Nonce; - } - - //Roles - public class RoleReference - { - [JsonProperty("guild_id")] - public string GuildId; - [JsonProperty("role_id")] - public string RoleId; - } - public class RoleInfo - { - [JsonProperty("permissions")] - public uint? Permissions; - [JsonProperty("name")] - public string Name; - [JsonProperty("position")] - public int? Position; - [JsonProperty("hoist")] - public bool? Hoist; - [JsonProperty("color")] - public uint? Color; - [JsonProperty("id")] - public string Id; - [JsonProperty("managed")] - public bool? Managed; - } - - //Invites - public class Invite - { - [JsonProperty("inviter")] - public UserReference Inviter; - [JsonProperty("guild")] - public GuildReference Guild; - [JsonProperty("channel")] - public ChannelReference Channel; - [JsonProperty("code")] - public string Code; - [JsonProperty("xkcdpass")] - public string XkcdPass; - } - public class ExtendedInvite : Invite - { - [JsonProperty("max_age")] - public int ?MaxAge; - [JsonProperty("max_uses")] - public int? MaxUses; - [JsonProperty("revoked")] - public bool? IsRevoked; - [JsonProperty("temporary")] - public bool? IsTemporary; - [JsonProperty("uses")] - public int? Uses; - [JsonProperty("created_at")] - public DateTime? CreatedAt; - } -} diff --git a/src/Discord.Net/API/Endpoints.cs b/src/Discord.Net/API/Endpoints.cs index 706607eca..67c256a88 100644 --- a/src/Discord.Net/API/Endpoints.cs +++ b/src/Discord.Net/API/Endpoints.cs @@ -1,9 +1,10 @@ namespace Discord.API { - internal static class Endpoints + public static class Endpoints { public const string BaseStatusApi = "https://status.discordapp.com/api/v2/"; public const string BaseApi = "https://discordapp.com/api/"; + public const string Gateway = "gateway"; public const string Auth = "auth"; @@ -39,7 +40,7 @@ public const string Voice = "voice"; public const string VoiceRegions = "voice/regions"; - public const string VoiceIce = "voice/ice"; + //public const string VoiceIce = "voice/ice"; public const string StatusActiveMaintenance = "scheduled-maintenances/active.json"; public const string StatusUpcomingMaintenance = "scheduled-maintenances/upcoming.json"; diff --git a/src/Discord.Net/API/Invites.cs b/src/Discord.Net/API/Invites.cs new file mode 100644 index 000000000..62d2049b3 --- /dev/null +++ b/src/Discord.Net/API/Invites.cs @@ -0,0 +1,59 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System; + +namespace Discord.API +{ + //Common + public class InviteReference + { + [JsonProperty("inviter")] + public UserReference Inviter; + [JsonProperty("guild")] + public GuildReference Guild; + [JsonProperty("channel")] + public ChannelReference Channel; + [JsonProperty("code")] + public string Code; + [JsonProperty("xkcdpass")] + public string XkcdPass; + } + public class InviteInfo : InviteReference + { + [JsonProperty("max_age")] + public int? MaxAge; + [JsonProperty("max_uses")] + public int? MaxUses; + [JsonProperty("revoked")] + public bool? IsRevoked; + [JsonProperty("temporary")] + public bool? IsTemporary; + [JsonProperty("uses")] + public int? Uses; + [JsonProperty("created_at")] + public DateTime? CreatedAt; + } + + //Create + public class CreateInviteRequest + { + [JsonProperty("max_age")] + public int MaxAge; + [JsonProperty("max_uses")] + public int MaxUses; + [JsonProperty("temporary")] + public bool IsTemporary; + [JsonProperty("xkcdpass")] + public bool WithXkcdPass; + } + public class CreateInviteResponse : InviteInfo { } + + //Get + public class GetInviteResponse : InviteReference { } + + //Accept + public class AcceptInviteResponse : InviteReference { } +} diff --git a/src/Discord.Net/API/Maintenance.cs b/src/Discord.Net/API/Maintenance.cs new file mode 100644 index 000000000..337b89453 --- /dev/null +++ b/src/Discord.Net/API/Maintenance.cs @@ -0,0 +1,33 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System; + +namespace Discord.API +{ + public class GetIncidentsResponse + { + [JsonProperty("page")] + public PageData Page; + [JsonProperty("scheduled_maintenances")] + public MaintenanceData[] ScheduledMaintenances; + + public sealed class PageData + { + [JsonProperty("id")] + public string Id; + [JsonProperty("name")] + public string Name; + [JsonProperty("url")] + public string Url; + [JsonProperty("updated-at")] + public DateTime? UpdatedAt; + } + + public sealed class MaintenanceData + { + } + } +} diff --git a/src/Discord.Net/API/Members.cs b/src/Discord.Net/API/Members.cs new file mode 100644 index 000000000..9858e51ab --- /dev/null +++ b/src/Discord.Net/API/Members.cs @@ -0,0 +1,88 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +namespace Discord.API +{ + //Common + public class MemberReference + { + [JsonProperty("user_id")] + public string UserId; + [JsonProperty("guild_id")] + public string GuildId; + + [JsonProperty("user")] + private UserReference _user; + public UserReference User + { + get { return _user; } + set + { + _user = value; + UserId = User.Id; + } + } + } + public class MemberInfo : MemberReference + { + [JsonProperty("joined_at")] + public DateTime? JoinedAt; + [JsonProperty("roles")] + public string[] Roles; + } + public class ExtendedMemberInfo : MemberInfo + { + [JsonProperty("mute")] + public bool? IsServerMuted; + [JsonProperty("deaf")] + public bool? IsServerDeafened; + } + public class PresenceInfo : MemberReference + { + [JsonProperty("game_id")] + public string GameId; + [JsonProperty("status")] + public string Status; + } + public class VoiceMemberInfo : MemberReference + { + [JsonProperty("channel_id")] + public string ChannelId; + [JsonProperty("session_id")] + public string SessionId; + [JsonProperty("token")] + public string Token; + + [JsonProperty("self_mute")] + public bool? IsSelfMuted; + [JsonProperty("self_deaf")] + public bool? IsSelfDeafened; + [JsonProperty("mute")] + public bool? IsServerMuted; + [JsonProperty("deaf")] + public bool? IsServerDeafened; + [JsonProperty("suppress")] + public bool? IsServerSuppressed; + } + + public class EditMemberRequest + { + [JsonProperty(PropertyName = "mute", NullValueHandling = NullValueHandling.Ignore)] + public bool? Mute; + [JsonProperty(PropertyName = "deaf", NullValueHandling = NullValueHandling.Ignore)] + public bool? Deaf; + [JsonProperty(PropertyName = "roles", NullValueHandling = NullValueHandling.Ignore)] + public IEnumerable Roles; + } + + //Events + internal sealed class MemberAddEvent : MemberInfo { } + internal sealed class MemberUpdateEvent : MemberInfo { } + internal sealed class MemberRemoveEvent : MemberInfo { } + internal sealed class MemberVoiceStateUpdateEvent : VoiceMemberInfo { } +} diff --git a/src/Discord.Net/API/Messages.cs b/src/Discord.Net/API/Messages.cs new file mode 100644 index 000000000..8fc031dd1 --- /dev/null +++ b/src/Discord.Net/API/Messages.cs @@ -0,0 +1,133 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +namespace Discord.API +{ + //Common + public class MessageReference + { + [JsonProperty("id")] + public string Id; + [JsonProperty("channel_id")] + public string ChannelId; + [JsonProperty("message_id")] + public string MessageId { get { return Id; } set { Id = value; } } + } + public class MessageInfo : MessageReference + { + public sealed class Attachment + { + [JsonProperty("id")] + public string Id; + [JsonProperty("url")] + public string Url; + [JsonProperty("proxy_url")] + public string ProxyUrl; + [JsonProperty("size")] + public int Size; + [JsonProperty("filename")] + public string Filename; + [JsonProperty("width")] + public int Width; + [JsonProperty("height")] + public int Height; + } + + public sealed class Embed + { + public sealed class Reference + { + [JsonProperty("url")] + public string Url; + [JsonProperty("name")] + public string Name; + } + + public sealed class ThumbnailInfo + { + [JsonProperty("url")] + public string Url; + [JsonProperty("proxy_url")] + public string ProxyUrl; + [JsonProperty("width")] + public int Width; + [JsonProperty("height")] + public int Height; + } + + [JsonProperty("url")] + public string Url; + [JsonProperty("type")] + public string Type; + [JsonProperty("title")] + public string Title; + [JsonProperty("description")] + public string Description; + [JsonProperty("author")] + public Reference Author; + [JsonProperty("provider")] + public Reference Provider; + [JsonProperty("thumbnail")] + public ThumbnailInfo Thumbnail; + } + + [JsonProperty("tts")] + public bool? IsTextToSpeech; + [JsonProperty("mention_everyone")] + public bool? IsMentioningEveryone; + [JsonProperty("timestamp")] + public DateTime? Timestamp; + [JsonProperty("edited_timestamp")] + public DateTime? EditedTimestamp; + [JsonProperty("mentions")] + public UserReference[] Mentions; + [JsonProperty("embeds")] + public Embed[] Embeds; //TODO: Parse this + [JsonProperty("attachments")] + public Attachment[] Attachments; + [JsonProperty("content")] + public string Content; + [JsonProperty("author")] + public UserReference Author; + [JsonProperty("nonce")] + public string Nonce; + } + + //Create + internal sealed class SendMessageRequest + { + [JsonProperty("content")] + public string Content; + [JsonProperty("mentions")] + public IEnumerable Mentions; + [JsonProperty("nonce", NullValueHandling = NullValueHandling.Ignore)] + public string Nonce; + [JsonProperty("tts", NullValueHandling = NullValueHandling.Ignore)] + public bool IsTTS; + } + public sealed class SendMessageResponse : MessageInfo { } + + //Edit + internal sealed class EditMessageRequest + { + [JsonProperty("content", NullValueHandling = NullValueHandling.Ignore)] + public string Content; + [JsonProperty("mentions", NullValueHandling = NullValueHandling.Ignore)] + public IEnumerable Mentions; + } + public sealed class EditMessageResponse : MessageInfo { } + + //Get + public sealed class GetMessagesResponse : List { } + + //Events + internal sealed class MessageCreateEvent : MessageInfo { } + internal sealed class MessageUpdateEvent : MessageInfo { } + internal sealed class MessageDeleteEvent : MessageReference { } + internal sealed class MessageAckEvent : MessageReference { } +} diff --git a/src/Discord.Net/API/Permissions.cs b/src/Discord.Net/API/Permissions.cs new file mode 100644 index 000000000..df8a82353 --- /dev/null +++ b/src/Discord.Net/API/Permissions.cs @@ -0,0 +1,21 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; + +namespace Discord.API +{ + //Create/Edit + internal sealed class SetChannelPermissionsRequest + { + [JsonProperty("id")] + public string Id; + [JsonProperty("type")] + public string Type; + [JsonProperty("allow")] + public uint Allow; + [JsonProperty("deny")] + public uint Deny; + } +} diff --git a/src/Discord.Net/API/Presence.cs b/src/Discord.Net/API/Presence.cs new file mode 100644 index 000000000..07a1d8f56 --- /dev/null +++ b/src/Discord.Net/API/Presence.cs @@ -0,0 +1,33 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; + +namespace Discord.API +{ + //Commands + internal sealed class UpdateStatusCommand : WebSocketMessage + { + public UpdateStatusCommand() : base(3) { } + public class Data + { + [JsonProperty("idle_since")] + public ulong? IdleSince; + [JsonProperty("game_id")] + public int? GameId; + } + } + + //Events + internal sealed class TypingStartEvent + { + [JsonProperty("user_id")] + public string UserId; + [JsonProperty("channel_id")] + public string ChannelId; + [JsonProperty("timestamp")] + public int Timestamp; + } + internal sealed class PresenceUpdateEvent : PresenceInfo { } +} diff --git a/src/Discord.Net/API/Requests.cs b/src/Discord.Net/API/Requests.cs deleted file mode 100644 index b60ee0fd8..000000000 --- a/src/Discord.Net/API/Requests.cs +++ /dev/null @@ -1,178 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; -using System.Collections.Generic; -using System.Collections; - -namespace Discord.API -{ - //Auth - internal sealed class RegisterRequest - { - [JsonProperty("fingerprint")] - public string Fingerprint; - [JsonProperty("username")] - public string Username; - } - internal sealed class LoginRequest - { - [JsonProperty("email")] - public string Email; - [JsonProperty("password")] - public string Password; - } - - //Channels - internal sealed class CreateChannelRequest - { - [JsonProperty("name")] - public string Name; - [JsonProperty("type")] - public string Type; - } - internal sealed class CreatePMChannelRequest - { - [JsonProperty("recipient_id")] - public string RecipientId; - } - internal sealed class EditChannelRequest - { - [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] - public string Name; - [JsonProperty("topic", NullValueHandling = NullValueHandling.Ignore)] - public string Topic; - } - internal sealed class ReorderChannelsRequest : IEnumerable - { - public sealed class Channel - { - [JsonProperty("id")] - public string Id; - [JsonProperty("position")] - public uint Position; - } - private IEnumerable _channels; - public ReorderChannelsRequest(IEnumerable channels) { _channels = channels; } - - public IEnumerator GetEnumerator() =>_channels.GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => _channels.GetEnumerator(); - } - - //Invites - internal sealed class CreateInviteRequest - { - [JsonProperty("max_age")] - public int MaxAge; - [JsonProperty("max_uses")] - public int MaxUses; - [JsonProperty("temporary")] - public bool IsTemporary; - [JsonProperty("xkcdpass")] - public bool WithXkcdPass; - } - - //Members - internal sealed class EditMemberRequest - { - [JsonProperty(PropertyName = "mute", NullValueHandling = NullValueHandling.Ignore)] - public bool? Mute; - [JsonProperty(PropertyName = "deaf", NullValueHandling = NullValueHandling.Ignore)] - public bool? Deaf; - [JsonProperty(PropertyName = "roles", NullValueHandling = NullValueHandling.Ignore)] - public IEnumerable Roles; - } - - //Messages - internal sealed class SendMessageRequest - { - [JsonProperty("content")] - public string Content; - [JsonProperty("mentions")] - public IEnumerable Mentions; - [JsonProperty("nonce", NullValueHandling = NullValueHandling.Ignore)] - public string Nonce; - [JsonProperty("tts", NullValueHandling = NullValueHandling.Ignore)] - public bool IsTTS; - } - internal sealed class EditMessageRequest - { - [JsonProperty("content", NullValueHandling = NullValueHandling.Ignore)] - public string Content; - [JsonProperty("mentions", NullValueHandling = NullValueHandling.Ignore)] - public IEnumerable Mentions; - } - - //Permissions - internal sealed class SetChannelPermissionsRequest //Both creates and modifies - { - [JsonProperty("id")] - public string Id; - [JsonProperty("type")] - public string Type; - [JsonProperty("allow")] - public uint Allow; - [JsonProperty("deny")] - public uint Deny; - } - - //Profile - internal sealed class EditProfileRequest - { - [JsonProperty(PropertyName = "password")] - public string CurrentPassword; - [JsonProperty(PropertyName = "email", NullValueHandling = NullValueHandling.Ignore)] - public string Email; - [JsonProperty(PropertyName = "new_password")] - public string Password; - [JsonProperty(PropertyName = "username", NullValueHandling = NullValueHandling.Ignore)] - public string Username; - [JsonProperty(PropertyName = "avatar", NullValueHandling = NullValueHandling.Ignore)] - public string Avatar; - } - - //Roles - internal sealed class EditRoleRequest - { - [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] - public string Name; - [JsonProperty("permissions", NullValueHandling = NullValueHandling.Ignore)] - public uint? Permissions; - [JsonProperty("hoist", NullValueHandling = NullValueHandling.Ignore)] - public bool? Hoist; - [JsonProperty("color", NullValueHandling = NullValueHandling.Ignore)] - public uint? Color; - } - internal sealed class ReorderRolesRequest : IEnumerable - { - public sealed class Role - { - [JsonProperty("id")] - public string Id; - [JsonProperty("position")] - public uint Position; - } - private IEnumerable _roles; - public ReorderRolesRequest(IEnumerable roles) { _roles = roles; } - - public IEnumerator GetEnumerator() => _roles.GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => _roles.GetEnumerator(); - } - - //Servers - internal sealed class CreateServerRequest - { - [JsonProperty("name")] - public string Name; - [JsonProperty("region")] - public string Region; - } - internal sealed class EditServerRequest - { - [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] - public string Name; - [JsonProperty("region", NullValueHandling = NullValueHandling.Ignore)] - public string Region; - } -} diff --git a/src/Discord.Net/API/Responses.cs b/src/Discord.Net/API/Responses.cs deleted file mode 100644 index c26dc701f..000000000 --- a/src/Discord.Net/API/Responses.cs +++ /dev/null @@ -1,106 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; -using System; -using System.Collections.Generic; - -namespace Discord.API -{ - //Auth - public sealed class GatewayResponse - { - [JsonProperty("url")] - public string Url; - } - public sealed class LoginResponse - { - [JsonProperty("token")] - public string Token; - } - - //Channels - public sealed class CreateChannelResponse : ChannelInfo { } - public sealed class DestroyChannelResponse : ChannelInfo { } - public sealed class EditChannelResponse : ChannelInfo { } - - //Invites - public sealed class CreateInviteResponse : ExtendedInvite { } - public sealed class GetInviteResponse : Invite { } - public sealed class AcceptInviteResponse : Invite { } - - //Messages - public sealed class SendMessageResponse : Message { } - public sealed class EditMessageResponse : Message { } - public sealed class GetMessagesResponse : List { } - - //Profile - public sealed class EditProfileResponse : SelfUserInfo { } - - //Roles - public sealed class CreateRoleResponse : RoleInfo { } - public sealed class EditRoleResponse : RoleInfo { } - - //Servers - public sealed class CreateServerResponse : GuildInfo { } - public sealed class DeleteServerResponse : GuildInfo { } - public sealed class EditServerResponse : GuildInfo { } - - //Voice - public sealed class GetRegionsResponse : List - { - public sealed class RegionData - { - [JsonProperty("sample_hostname")] - public string Hostname; - [JsonProperty("sample_port")] - public int Port; - [JsonProperty("id")] - public string Id; - [JsonProperty("name")] - public string Name; - } - } - public sealed class GetIceResponse - { - [JsonProperty("ttl")] - public string TTL; - [JsonProperty("servers")] - public ServerData[] Servers; - - public sealed class ServerData - { - [JsonProperty("url")] - public string URL; - [JsonProperty("username")] - public string Username; - [JsonProperty("credential")] - public string Credential; - } - } - - public sealed class GetIncidentsResponse - { - [JsonProperty("page")] - public PageData Page; - [JsonProperty("scheduled_maintenances")] - public MaintenanceData[] ScheduledMaintenances; - - public sealed class PageData - { - [JsonProperty("id")] - public string Id; - [JsonProperty("name")] - public string Name; - [JsonProperty("url")] - public string Url; - [JsonProperty("updated-at")] - public DateTime? UpdatedAt; - } - - public sealed class MaintenanceData - { - } - } -} diff --git a/src/Discord.Net/API/RestClient.BuiltIn.cs b/src/Discord.Net/API/RestClient.BuiltIn.cs deleted file mode 100644 index ec5b6bb61..000000000 --- a/src/Discord.Net/API/RestClient.BuiltIn.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* -using Discord.API; -using System; -using System.Globalization; -using System.IO; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace Discord.API -{ - internal class BuiltInRestEngine : IRestEngine - { - private readonly HttpClient _client; - - public BuiltInRestEngine(string userAgent, int timeout) - { - _client = new HttpClient(new HttpClientHandler - { - AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, - UseCookies = false, - PreAuthenticate = false //We do auth ourselves - }); - _client.DefaultRequestHeaders.Add("accept", "*\/*"); - _client.DefaultRequestHeaders.Add("accept-encoding", "gzip,deflate"); - _client.DefaultRequestHeaders.Add("user-agent", userAgent); - _client.Timeout = TimeSpan.FromMilliseconds(timeout); - } - - public void SetToken(string token) - { - _client.DefaultRequestHeaders.Remove("authorization"); - if (token != null) - _client.DefaultRequestHeaders.Add("authorization", token); - } - - public async Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken) - { - using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) - { - if (json != null) - request.Content = new StringContent(json, Encoding.UTF8, "application/json"); - return await Send(request, cancelToken); - } - } - public async Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken) - { - using (var request = new HttpRequestMessage(method, Endpoints.BaseApi + path)) - { - var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)); - content.Add(new StreamContent(File.OpenRead(filePath)), "file", Path.GetFileName(filePath)); - request.Content = content; - return await Send(request, cancelToken); - } - } - private async Task Send(HttpRequestMessage request, CancellationToken cancelToken) - { - var response = await _client.SendAsync(request, cancelToken).ConfigureAwait(false); - if (!response.IsSuccessStatusCode) - throw new HttpException(response.StatusCode); - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); - } - } -} -*/ \ No newline at end of file diff --git a/src/Discord.Net/API/Roles.cs b/src/Discord.Net/API/Roles.cs new file mode 100644 index 000000000..ba1517513 --- /dev/null +++ b/src/Discord.Net/API/Roles.cs @@ -0,0 +1,87 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System.Collections; +using System.Collections.Generic; + +namespace Discord.API +{ + //Common + public class RoleReference + { + [JsonProperty("guild_id")] + public string GuildId; + [JsonProperty("role_id")] + public string RoleId; + } + public class RoleInfo + { + [JsonProperty("permissions")] + public uint? Permissions; + [JsonProperty("name")] + public string Name; + [JsonProperty("position")] + public int? Position; + [JsonProperty("hoist")] + public bool? Hoist; + [JsonProperty("color")] + public uint? Color; + [JsonProperty("id")] + public string Id; + [JsonProperty("managed")] + public bool? Managed; + } + + //Create + public sealed class CreateRoleResponse : RoleInfo { } + + //Edit + public sealed class EditRoleRequest + { + [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] + public string Name; + [JsonProperty("permissions", NullValueHandling = NullValueHandling.Ignore)] + public uint? Permissions; + [JsonProperty("hoist", NullValueHandling = NullValueHandling.Ignore)] + public bool? Hoist; + [JsonProperty("color", NullValueHandling = NullValueHandling.Ignore)] + public uint? Color; + } + public sealed class EditRoleResponse : RoleInfo { } + + //Reorder + public sealed class ReorderRolesRequest : IEnumerable + { + public sealed class Role + { + [JsonProperty("id")] + public string Id; + [JsonProperty("position")] + public uint Position; + } + private IEnumerable _roles; + public ReorderRolesRequest(IEnumerable roles) { _roles = roles; } + + public IEnumerator GetEnumerator() => _roles.GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => _roles.GetEnumerator(); + } + + //Events + internal sealed class RoleCreateEvent + { + [JsonProperty("guild_id")] + public string GuildId; + [JsonProperty("role")] + public RoleInfo Data; + } + internal sealed class RoleUpdateEvent + { + [JsonProperty("guild_id")] + public string GuildId; + [JsonProperty("role")] + public RoleInfo Data; + } + internal sealed class RoleDeleteEvent : RoleReference { } +} diff --git a/src/Discord.Net/API/Servers.cs b/src/Discord.Net/API/Servers.cs new file mode 100644 index 000000000..b86a94ffa --- /dev/null +++ b/src/Discord.Net/API/Servers.cs @@ -0,0 +1,80 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System; + +namespace Discord.API +{ + //Common + public class GuildReference + { + [JsonProperty("id")] + public string Id; + [JsonProperty("name")] + public string Name; + } + public class GuildInfo : GuildReference + { + [JsonProperty("afk_channel_id")] + public string AFKChannelId; + [JsonProperty("afk_timeout")] + public int AFKTimeout; + [JsonProperty("embed_channel_id")] + public string EmbedChannelId; + [JsonProperty("embed_enabled")] + public bool EmbedEnabled; + [JsonProperty("icon")] + public string Icon; + [JsonProperty("joined_at")] + public DateTime? JoinedAt; + [JsonProperty("owner_id")] + public string OwnerId; + [JsonProperty("region")] + public string Region; + [JsonProperty("roles")] + public RoleInfo[] Roles; + } + public class ExtendedGuildInfo : GuildInfo + { + [JsonProperty("channels")] + public ChannelInfo[] Channels; + [JsonProperty("members")] + public ExtendedMemberInfo[] Members; + [JsonProperty("presences")] + public PresenceInfo[] Presences; + [JsonProperty("voice_states")] + public VoiceMemberInfo[] VoiceStates; + [JsonProperty("unavailable")] + public bool Unavailable; + } + + //Create + internal sealed class CreateServerRequest + { + [JsonProperty("name")] + public string Name; + [JsonProperty("region")] + public string Region; + } + public sealed class CreateServerResponse : GuildInfo { } + + //Edit + internal sealed class EditServerRequest + { + [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] + public string Name; + [JsonProperty("region", NullValueHandling = NullValueHandling.Ignore)] + public string Region; + } + public sealed class EditServerResponse : GuildInfo { } + + //Delete + public sealed class DeleteServerResponse : GuildInfo { } + + //Events + internal sealed class GuildCreateEvent : ExtendedGuildInfo { } + internal sealed class GuildUpdateEvent : GuildInfo { } + internal sealed class GuildDeleteEvent : ExtendedGuildInfo { } +} diff --git a/src/Discord.Net/API/Users.cs b/src/Discord.Net/API/Users.cs new file mode 100644 index 000000000..52bb8d6a2 --- /dev/null +++ b/src/Discord.Net/API/Users.cs @@ -0,0 +1,47 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; + +namespace Discord.API +{ + //Common + public class UserReference + { + [JsonProperty("username")] + public string Username; + [JsonProperty("id")] + public string Id; + [JsonProperty("discriminator")] + public string Discriminator; + [JsonProperty("avatar")] + public string Avatar; + } + public class UserInfo : UserReference + { + [JsonProperty("email")] + public string Email; + [JsonProperty("verified")] + public bool? IsVerified; + } + + //Edit + internal sealed class EditUserRequest + { + [JsonProperty(PropertyName = "password")] + public string CurrentPassword; + [JsonProperty(PropertyName = "email", NullValueHandling = NullValueHandling.Ignore)] + public string Email; + [JsonProperty(PropertyName = "new_password")] + public string Password; + [JsonProperty(PropertyName = "username", NullValueHandling = NullValueHandling.Ignore)] + public string Username; + [JsonProperty(PropertyName = "avatar", NullValueHandling = NullValueHandling.Ignore)] + public string Avatar; + } + public sealed class EditUserResponse : UserInfo { } + + //Events + internal sealed class UserUpdateEvent : UserInfo { } +} diff --git a/src/Discord.Net/API/Voice.cs b/src/Discord.Net/API/Voice.cs new file mode 100644 index 000000000..2bf30fe53 --- /dev/null +++ b/src/Discord.Net/API/Voice.cs @@ -0,0 +1,153 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Discord.API +{ + public class GetRegionsResponse : List + { + public sealed class RegionData + { + [JsonProperty("sample_hostname")] + public string Hostname; + [JsonProperty("sample_port")] + public int Port; + [JsonProperty("id")] + public string Id; + [JsonProperty("name")] + public string Name; + } + } + + public class GetIceResponse + { + [JsonProperty("ttl")] + public string TTL; + [JsonProperty("servers")] + public ServerData[] Servers; + + public sealed class ServerData + { + [JsonProperty("url")] + public string URL; + [JsonProperty("username")] + public string Username; + [JsonProperty("credential")] + public string Credential; + } + } + + //Commands + internal sealed class JoinVoiceCommand : WebSocketMessage + { + public JoinVoiceCommand() : base(4) { } + public class Data + { + [JsonProperty("guild_id")] + public string ServerId; + [JsonProperty("channel_id")] + public string ChannelId; + [JsonProperty("self_mute")] + public string SelfMute; + [JsonProperty("self_deaf")] + public string SelfDeaf; + } + } + + //Events + internal sealed class VoiceServerUpdateEvent + { + [JsonProperty("guild_id")] + public string GuildId; + [JsonProperty("endpoint")] + public string Endpoint; + [JsonProperty("token")] + public string Token; + } + + //Commands (Voice) + internal sealed class VoiceLoginCommand : WebSocketMessage + { + public VoiceLoginCommand() : base(0) { } + public class Data + { + [JsonProperty("server_id")] + public string ServerId; + [JsonProperty("user_id")] + public string UserId; + [JsonProperty("session_id")] + public string SessionId; + [JsonProperty("token")] + public string Token; + } + } + internal sealed class VoiceLogin2Command : WebSocketMessage + { + public VoiceLogin2Command() : base(1) { } + public class Data + { + public class SocketInfo + { + [JsonProperty("address")] + public string Address; + [JsonProperty("port")] + public int Port; + [JsonProperty("mode")] + public string Mode = "xsalsa20_poly1305"; + } + [JsonProperty("protocol")] + public string Protocol = "udp"; + [JsonProperty("data")] + public SocketInfo SocketData = new SocketInfo(); + } + } + internal sealed class VoiceKeepAliveCommand : WebSocketMessage + { + public VoiceKeepAliveCommand() : base(3, null) { } + } + internal sealed class IsTalkingCommand : WebSocketMessage + { + public IsTalkingCommand() : base(5) { } + public class Data + { + [JsonProperty("delay")] + public int Delay; + [JsonProperty("speaking")] + public bool IsSpeaking; + } + } + + //Events (Voice) + public class VoiceReadyEvent + { + [JsonProperty("ssrc")] + public uint SSRC; + [JsonProperty("port")] + public ushort Port; + [JsonProperty("modes")] + public string[] Modes; + [JsonProperty("heartbeat_interval")] + public int HeartbeatInterval; + } + + public class JoinServerEvent + { + [JsonProperty("secret_key")] + public byte[] SecretKey; + [JsonProperty("mode")] + public string Mode; + } + + public class IsTalkingEvent + { + [JsonProperty("user_id")] + public string UserId; + [JsonProperty("ssrc")] + public uint SSRC; + [JsonProperty("speaking")] + public bool IsSpeaking; + } +} diff --git a/src/Discord.Net/API/WebSockets.cs b/src/Discord.Net/API/WebSockets.cs new file mode 100644 index 000000000..246bd2c6a --- /dev/null +++ b/src/Discord.Net/API/WebSockets.cs @@ -0,0 +1,112 @@ +//Ignore unused/unassigned variable warnings +#pragma warning disable CS0649 +#pragma warning disable CS0169 + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Collections.Generic; + +namespace Discord.API +{ + //Common + public class WebSocketMessage + { + [JsonProperty("op")] + public int Operation; + [JsonProperty("d")] + public object Payload; + [JsonProperty("t", NullValueHandling = NullValueHandling.Ignore)] + public string Type; + [JsonProperty("s", NullValueHandling = NullValueHandling.Ignore)] + public int? Sequence; + } + internal abstract class WebSocketMessage : WebSocketMessage + where T : new() + { + public WebSocketMessage() { Payload = new T(); } + public WebSocketMessage(int op) { Operation = op; Payload = new T(); } + public WebSocketMessage(int op, T payload) { Operation = op; Payload = payload; } + + [JsonIgnore] + public new T Payload + { + get + { + if (base.Payload is JToken) + base.Payload = (base.Payload as JToken).ToObject(); + return (T)base.Payload; + } + set { base.Payload = value; } + } + } + + //Commands + internal sealed class KeepAliveCommand : WebSocketMessage + { + public KeepAliveCommand() : base(1, EpochTime.GetMilliseconds()) { } + } + internal sealed class LoginCommand : WebSocketMessage + { + public LoginCommand() : base(2) { } + public class Data + { + [JsonProperty("token")] + public string Token; + [JsonProperty("v")] + public int Version = 3; + [JsonProperty("properties")] + public Dictionary Properties = new Dictionary(); + } + } + internal sealed class ResumeCommand : WebSocketMessage + { + public ResumeCommand() : base(6) { } + public class Data + { + [JsonProperty("session_id")] + public string SessionId; + [JsonProperty("seq")] + public int Sequence; + } + } + + //Events + internal sealed class ReadyEvent + { + public sealed class ReadStateInfo + { + [JsonProperty("id")] + public string ChannelId; + [JsonProperty("mention_count")] + public int MentionCount; + [JsonProperty("last_message_id")] + public string LastMessageId; + } + + [JsonProperty("v")] + public int Version; + [JsonProperty("user")] + public UserInfo User; + [JsonProperty("session_id")] + public string SessionId; + [JsonProperty("read_state")] + public ReadStateInfo[] ReadState; + [JsonProperty("guilds")] + public ExtendedGuildInfo[] Guilds; + [JsonProperty("private_channels")] + public ChannelInfo[] PrivateChannels; + [JsonProperty("heartbeat_interval")] + public int HeartbeatInterval; + } + internal sealed class ResumedEvent + { + [JsonProperty("heartbeat_interval")] + public int HeartbeatInterval; + } + + internal sealed class RedirectEvent + { + [JsonProperty("url")] + public string Url; + } +} diff --git a/src/Discord.Net/DiscordClient.API.cs b/src/Discord.Net/DiscordClient.API.cs index b90f23d52..d8642f9ba 100644 --- a/src/Discord.Net/DiscordClient.API.cs +++ b/src/Discord.Net/DiscordClient.API.cs @@ -1,4 +1,5 @@ using Discord.API; +using Discord.Net; using System; using System.Collections.Generic; using System.Linq; @@ -312,7 +313,7 @@ namespace Discord { var msg = _messages.GetOrAdd("nonce_" + nonce, channel.Id, CurrentUserId); var currentMember = _members[msg.UserId, channel.ServerId]; - msg.Update(new API.Message + msg.Update(new MessageInfo { Content = blockText, Timestamp = DateTime.UtcNow, @@ -611,26 +612,20 @@ namespace Discord } //Profile - public Task EditProfile(string currentPassword = "", + public Task EditProfile(string currentPassword = "", string username = null, string email = null, string password = null, AvatarImageType avatarType = AvatarImageType.Png, byte[] avatar = null) { if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); - return _api.EditProfile(currentPassword: currentPassword, username: username ?? _currentUser?.Name, email: email ?? _currentUser?.Email, password: password, + return _api.EditUser(currentPassword: currentPassword, username: username ?? _currentUser?.Name, email: email ?? _currentUser?.Email, password: password, avatarType: avatarType, avatar: avatar); } public Task SetStatus(string status) { - switch (status) - { - case UserStatus.Online: - case UserStatus.Away: - _status = status; - break; - default: - throw new ArgumentException($"Invalid status, must be {UserStatus.Online} or {UserStatus.Away}"); - } + if (status != UserStatus.Online && status != UserStatus.Idle) + throw new ArgumentException($"Invalid status, must be {UserStatus.Online} or {UserStatus.Idle}"); + _status = status; return SendStatus(); } public Task SetGame(int? gameId) @@ -640,7 +635,7 @@ namespace Discord } private Task SendStatus() { - _dataSocket.SendStatus(_status == UserStatus.Away ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (ulong?)null, _gameId); + _dataSocket.SendStatus(_status == UserStatus.Idle ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (ulong?)null, _gameId); return TaskHelper.CompletedTask; } diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index be80cddb1..f32fdd487 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -1,7 +1,6 @@ using Discord.API; using Discord.Collections; -using Discord.WebSockets; -using Discord.WebSockets.Data; +using Discord.Net; using Newtonsoft.Json; using System; using System.Collections.Concurrent; @@ -9,7 +8,6 @@ using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; -using VoiceWebSocket = Discord.WebSockets.Voice.VoiceWebSocket; namespace Discord { @@ -474,7 +472,7 @@ namespace Discord //Members case "GUILD_MEMBER_ADD": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var user = _users.GetOrAdd(data.User.Id); user.Update(data.User); var member = _members.GetOrAdd(data.User.Id, data.GuildId); @@ -486,7 +484,7 @@ namespace Discord break; case "GUILD_MEMBER_UPDATE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var member = _members[data.User.Id, data.GuildId]; if (member != null) { @@ -497,7 +495,7 @@ namespace Discord break; case "GUILD_MEMBER_REMOVE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var member = _members.TryRemove(data.UserId, data.GuildId); if (member != null) RaiseUserRemoved(member); @@ -507,7 +505,7 @@ namespace Discord //Roles case "GUILD_ROLE_CREATE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var role = _roles.GetOrAdd(data.Data.Id, data.GuildId, false); role.Update(data.Data); var server = _servers[data.GuildId]; @@ -518,7 +516,7 @@ namespace Discord break; case "GUILD_ROLE_UPDATE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var role = _roles[data.Data.Id]; if (role != null) role.Update(data.Data); @@ -527,7 +525,7 @@ namespace Discord break; case "GUILD_ROLE_DELETE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var server = _servers[data.GuildId]; if (server != null) server.RemoveRole(data.RoleId); @@ -540,7 +538,7 @@ namespace Discord //Bans case "GUILD_BAN_ADD": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var server = _servers[data.GuildId]; if (server != null) { @@ -551,7 +549,7 @@ namespace Discord break; case "GUILD_BAN_REMOVE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var server = _servers[data.GuildId]; if (server != null && server.RemoveBan(data.User?.Id)) RaiseBanRemoved(data.User?.Id, server); @@ -682,7 +680,7 @@ namespace Discord //Voice case "VOICE_STATE_UPDATE": { - var data = e.Payload.ToObject(_serializer); + var data = e.Payload.ToObject(_serializer); var member = _members[data.UserId, data.GuildId]; if (member != null) { diff --git a/src/Discord.Net/DiscordSimpleClient.cs b/src/Discord.Net/DiscordSimpleClient.cs index d9bb88e7f..9dde13ef0 100644 --- a/src/Discord.Net/DiscordSimpleClient.cs +++ b/src/Discord.Net/DiscordSimpleClient.cs @@ -1,11 +1,10 @@ -using Discord.WebSockets.Data; +using Discord.Net; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.ExceptionServices; using System.Threading; using System.Threading.Tasks; -using VoiceWebSocket = Discord.WebSockets.Voice.VoiceWebSocket; namespace Discord { diff --git a/src/Discord.Net/Helpers/Extensions.cs b/src/Discord.Net/Helpers/Extensions.cs index 20e6a6d41..45aad0c5b 100644 --- a/src/Discord.Net/Helpers/Extensions.cs +++ b/src/Discord.Net/Helpers/Extensions.cs @@ -6,6 +6,53 @@ namespace Discord { internal static class Extensions { + public static async Task Timeout(this Task self, int milliseconds) + { + Task timeoutTask = Task.Delay(milliseconds); + Task finishedTask = await Task.WhenAny(self, timeoutTask).ConfigureAwait(false); + if (finishedTask == timeoutTask) + throw new TimeoutException(); + else + await self.ConfigureAwait(false); + } + public static async Task Timeout(this Task self, int milliseconds) + { + Task timeoutTask = Task.Delay(milliseconds); + Task finishedTask = await Task.WhenAny(self, timeoutTask).ConfigureAwait(false); + if (finishedTask == timeoutTask) + throw new TimeoutException(); + else + return await self.ConfigureAwait(false); + } + public static async Task Timeout(this Task self, int milliseconds, CancellationTokenSource timeoutToken) + { + try + { + timeoutToken.CancelAfter(milliseconds); + await self.ConfigureAwait(false); + } + catch (OperationCanceledException) + { + if (timeoutToken.IsCancellationRequested) + throw new TimeoutException(); + throw; + } + } + public static async Task Timeout(this Task self, int milliseconds, CancellationTokenSource timeoutToken) + { + try + { + timeoutToken.CancelAfter(milliseconds); + return await self.ConfigureAwait(false); + } + catch (OperationCanceledException) + { + if (timeoutToken.IsCancellationRequested) + throw new TimeoutException(); + throw; + } + } + public static async Task Wait(this CancellationTokenSource tokenSource) { var token = tokenSource.Token; diff --git a/src/Discord.Net/Format.cs b/src/Discord.Net/Helpers/Format.cs similarity index 100% rename from src/Discord.Net/Format.cs rename to src/Discord.Net/Helpers/Format.cs diff --git a/src/Discord.Net/Mention.cs b/src/Discord.Net/Helpers/Mention.cs similarity index 100% rename from src/Discord.Net/Mention.cs rename to src/Discord.Net/Helpers/Mention.cs diff --git a/src/Discord.Net/Helpers/CollectionHelper.cs b/src/Discord.Net/Helpers/Shared/CollectionHelper.cs similarity index 100% rename from src/Discord.Net/Helpers/CollectionHelper.cs rename to src/Discord.Net/Helpers/Shared/CollectionHelper.cs diff --git a/src/Discord.Net/Shared/TaskHelper.cs b/src/Discord.Net/Helpers/Shared/TaskHelper.cs similarity index 100% rename from src/Discord.Net/Shared/TaskHelper.cs rename to src/Discord.Net/Helpers/Shared/TaskHelper.cs diff --git a/src/Discord.Net/Helpers/TaskExtensions.cs b/src/Discord.Net/Helpers/TaskExtensions.cs deleted file mode 100644 index fa555dc0a..000000000 --- a/src/Discord.Net/Helpers/TaskExtensions.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace Discord -{ - public static class TaskExtensions - { - public static async Task Timeout(this Task self, int milliseconds) - { - Task timeoutTask = Task.Delay(milliseconds); - Task finishedTask = await Task.WhenAny(self, timeoutTask); - if (finishedTask == timeoutTask) - throw new TimeoutException(); - else - await self; - } - public static async Task Timeout(this Task self, int milliseconds) - { - Task timeoutTask = Task.Delay(milliseconds); - Task finishedTask = await Task.WhenAny(self, timeoutTask).ConfigureAwait(false); - if (finishedTask == timeoutTask) - throw new TimeoutException(); - else - return await self.ConfigureAwait(false); - } - public static async Task Timeout(this Task self, int milliseconds, CancellationTokenSource timeoutToken) - { - try - { - timeoutToken.CancelAfter(milliseconds); - await self.ConfigureAwait(false); - } - catch (OperationCanceledException) - { - if (timeoutToken.IsCancellationRequested) - throw new TimeoutException(); - throw; - } - } - public static async Task Timeout(this Task self, int milliseconds, CancellationTokenSource timeoutToken) - { - try - { - timeoutToken.CancelAfter(milliseconds); - return await self.ConfigureAwait(false); - } - catch (OperationCanceledException) - { - if (timeoutToken.IsCancellationRequested) - throw new TimeoutException(); - throw; - } - } - } -} diff --git a/src/Discord.Net/TimeoutException.cs b/src/Discord.Net/Helpers/TimeoutException.cs similarity index 100% rename from src/Discord.Net/TimeoutException.cs rename to src/Discord.Net/Helpers/TimeoutException.cs diff --git a/src/Discord.Net/Audio/Opus.cs b/src/Discord.Net/Interop/Opus.cs similarity index 99% rename from src/Discord.Net/Audio/Opus.cs rename to src/Discord.Net/Interop/Opus.cs index 20f65be06..78c7b39d9 100644 --- a/src/Discord.Net/Audio/Opus.cs +++ b/src/Discord.Net/Interop/Opus.cs @@ -1,7 +1,7 @@ using System; using System.Runtime.InteropServices; -namespace Discord.Audio +namespace Discord.Interop { internal unsafe static class Opus { diff --git a/src/Discord.Net/Audio/OpusDecoder.cs b/src/Discord.Net/Interop/OpusDecoder.cs similarity index 99% rename from src/Discord.Net/Audio/OpusDecoder.cs rename to src/Discord.Net/Interop/OpusDecoder.cs index e6c9cd400..0341a8acf 100644 --- a/src/Discord.Net/Audio/OpusDecoder.cs +++ b/src/Discord.Net/Interop/OpusDecoder.cs @@ -1,6 +1,6 @@ using System; -namespace Discord.Audio +namespace Discord.Interop { /// Opus codec wrapper. internal class OpusDecoder : IDisposable diff --git a/src/Discord.Net/Audio/OpusEncoder.cs b/src/Discord.Net/Interop/OpusEncoder.cs similarity index 99% rename from src/Discord.Net/Audio/OpusEncoder.cs rename to src/Discord.Net/Interop/OpusEncoder.cs index c5e033a2b..d6209927f 100644 --- a/src/Discord.Net/Audio/OpusEncoder.cs +++ b/src/Discord.Net/Interop/OpusEncoder.cs @@ -1,6 +1,6 @@ using System; -namespace Discord.Audio +namespace Discord.Interop { /// Opus codec wrapper. internal class OpusEncoder : IDisposable diff --git a/src/Discord.Net/Audio/Sodium.cs b/src/Discord.Net/Interop/Sodium.cs similarity index 97% rename from src/Discord.Net/Audio/Sodium.cs rename to src/Discord.Net/Interop/Sodium.cs index ec7dde612..8d5d7e3cd 100644 --- a/src/Discord.Net/Audio/Sodium.cs +++ b/src/Discord.Net/Interop/Sodium.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Discord.Audio +namespace Discord.Interop { internal unsafe static class Sodium { diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index 106335e8a..b7df1a2df 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; @@ -99,16 +100,16 @@ namespace Discord _areMembersStale = true; } - internal void Update(API.ChannelReference model) + internal void Update(ChannelReference model) { if (model.Name != null) Name = model.Name; if (model.Type != null) Type = model.Type; } - internal void Update(API.ChannelInfo model) + internal void Update(ChannelInfo model) { - Update(model as API.ChannelReference); + Update(model as ChannelReference); if (model.Position != null) Position = model.Position.Value; diff --git a/src/Discord.Net/Models/Invite.cs b/src/Discord.Net/Models/Invite.cs index 1c523fc16..bdf1e6518 100644 --- a/src/Discord.Net/Models/Invite.cs +++ b/src/Discord.Net/Models/Invite.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; namespace Discord { @@ -53,7 +54,7 @@ namespace Discord public override string ToString() => XkcdPass ?? Id; - internal void Update(API.Invite model) + internal void Update(InviteReference model) { if (model.Channel != null) ChannelId = model.Channel.Id; @@ -61,9 +62,9 @@ namespace Discord InviterId = model.Inviter.Id; } - internal void Update(API.ExtendedInvite model) + internal void Update(InviteInfo model) { - Update(model as API.Invite); + Update(model as InviteReference); if (model.IsRevoked != null) IsRevoked = model.IsRevoked.Value; if (model.IsTemporary != null) diff --git a/src/Discord.Net/Models/Member.cs b/src/Discord.Net/Models/Member.cs index c784fbb47..4360465de 100644 --- a/src/Discord.Net/Models/Member.cs +++ b/src/Discord.Net/Models/Member.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -77,7 +78,7 @@ namespace Discord public override string ToString() => UserId; - internal void Update(API.UserReference model) + internal void Update(UserReference model) { if (model.Avatar != null) AvatarId = model.Avatar; @@ -86,7 +87,7 @@ namespace Discord if (model.Username != null) Name = model.Username; } - internal void Update(API.MemberInfo model) + internal void Update(MemberInfo model) { if (model.User != null) Update(model.User); @@ -102,7 +103,7 @@ namespace Discord UpdatePermissions(); } - internal void Update(API.ExtendedMemberInfo model) + internal void Update(ExtendedMemberInfo model) { Update(model as API.MemberInfo); if (model.IsServerDeafened != null) @@ -110,7 +111,7 @@ namespace Discord if (model.IsServerMuted != null) IsServerMuted = model.IsServerMuted.Value; } - internal void Update(API.PresenceMemberInfo model) + internal void Update(PresenceInfo model) { //Allows null if (Status != model.Status) @@ -121,7 +122,7 @@ namespace Discord } GameId = model.GameId; } - internal void Update(API.VoiceMemberInfo model) + internal void Update(VoiceMemberInfo model) { if (model.IsServerDeafened != null) IsServerDeafened = model.IsServerDeafened.Value; diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index b0cab1347..3d00a1265 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -175,7 +176,7 @@ namespace Discord MentionIds = _initialMentions; } - internal void Update(API.Message model) + internal void Update(MessageInfo model) { if (model.Attachments != null) { diff --git a/src/Discord.Net/Models/Role.cs b/src/Discord.Net/Models/Role.cs index 50c889e06..678bb31e1 100644 --- a/src/Discord.Net/Models/Role.cs +++ b/src/Discord.Net/Models/Role.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; @@ -52,7 +53,7 @@ namespace Discord Position = int.MinValue; } - internal void Update(API.RoleInfo model) + internal void Update(RoleInfo model) { if (model.Name != null) Name = model.Name; diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs index 3d6554d42..c3f59fd45 100644 --- a/src/Discord.Net/Models/Server.cs +++ b/src/Discord.Net/Models/Server.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -103,7 +104,7 @@ namespace Discord _roles = new ConcurrentDictionary(); } - internal void Update(API.GuildInfo model) + internal void Update(GuildInfo model) { AFKChannelId = model.AFKChannelId; AFKTimeout = model.AFKTimeout; @@ -124,9 +125,9 @@ namespace Discord isEveryone = false; } } - internal void Update(API.ExtendedGuildInfo model) + internal void Update(ExtendedGuildInfo model) { - Update(model as API.GuildInfo); + Update(model as GuildInfo); var channels = _client.Channels; foreach (var subModel in model.Channels) diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index d225c9b6d..a0104bcb3 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -77,7 +78,7 @@ namespace Discord _servers = new ConcurrentDictionary(); } - internal void Update(API.UserReference model) + internal void Update(UserReference model) { if (model.Avatar != null) AvatarId = model.Avatar; @@ -86,11 +87,14 @@ namespace Discord if (model.Username != null) Name = model.Username; } - internal void Update(API.SelfUserInfo model) + internal void Update(UserInfo model) { - Update(model as API.UserReference); - Email = model.Email; - IsVerified = model.IsVerified; + Update(model as UserReference); + + if (model.Email != null) + Email = model.Email; + if (model.IsVerified != null) + IsVerified = model.IsVerified; } internal void UpdateActivity(DateTime? activity = null) { diff --git a/src/Discord.Net/WebSockets/Data/DataWebSocket.cs b/src/Discord.Net/Net/DataWebSocket.cs similarity index 98% rename from src/Discord.Net/WebSockets/Data/DataWebSocket.cs rename to src/Discord.Net/Net/DataWebSocket.cs index 53e917f9f..d95423348 100644 --- a/src/Discord.Net/WebSockets/Data/DataWebSocket.cs +++ b/src/Discord.Net/Net/DataWebSocket.cs @@ -1,9 +1,10 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Threading.Tasks; -namespace Discord.WebSockets.Data +namespace Discord.Net { internal partial class DataWebSocket : WebSocket { diff --git a/src/Discord.Net/WebSockets/Data/DataWebSockets.Events.cs b/src/Discord.Net/Net/DataWebSockets.Events.cs similarity index 94% rename from src/Discord.Net/WebSockets/Data/DataWebSockets.Events.cs rename to src/Discord.Net/Net/DataWebSockets.Events.cs index 410829069..6f5177fe1 100644 --- a/src/Discord.Net/WebSockets/Data/DataWebSockets.Events.cs +++ b/src/Discord.Net/Net/DataWebSockets.Events.cs @@ -1,7 +1,7 @@ using Newtonsoft.Json.Linq; using System; -namespace Discord.WebSockets.Data +namespace Discord.Net { internal sealed class WebSocketEventEventArgs : EventArgs { diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/Net/DiscordAPIClient.cs similarity index 96% rename from src/Discord.Net/DiscordAPIClient.cs rename to src/Discord.Net/Net/DiscordAPIClient.cs index 44c5b6dc4..bb5f0fb06 100644 --- a/src/Discord.Net/DiscordAPIClient.cs +++ b/src/Discord.Net/Net/DiscordAPIClient.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace Discord +namespace Discord.Net { /// A lightweight wrapper around the Discord API. public class DiscordAPIClient @@ -225,26 +225,6 @@ namespace Discord return _rest.Delete(Endpoints.ChannelPermission(channelId, userOrRoleId), null); } - //Profile - public Task EditProfile(string currentPassword = "", - string username = null, string email = null, string password = null, - AvatarImageType avatarType = AvatarImageType.Png, byte[] avatar = null) - { - if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); - - string avatarBase64 = null; - if (avatarType == AvatarImageType.None) - avatarBase64 = ""; - else if (avatar != null) - { - string base64 = Convert.ToBase64String(avatar); - string type = avatarType == AvatarImageType.Jpeg ? "image/jpeg;base64" : "image/png;base64"; - avatarBase64 = $"data:{type},{base64}"; - } - var request = new EditProfileRequest { CurrentPassword = currentPassword, Username = username, Email = email, Password = password, Avatar = avatarBase64 }; - return _rest.Patch(Endpoints.UserMe, request); - } - //Roles public Task CreateRole(string serverId) { @@ -302,10 +282,30 @@ namespace Discord return _rest.Patch(Endpoints.Server(serverId), request); } + //User + public Task EditUser(string currentPassword = "", + string username = null, string email = null, string password = null, + AvatarImageType avatarType = AvatarImageType.Png, byte[] avatar = null) + { + if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); + + string avatarBase64 = null; + if (avatarType == AvatarImageType.None) + avatarBase64 = ""; + else if (avatar != null) + { + string base64 = Convert.ToBase64String(avatar); + string type = avatarType == AvatarImageType.Jpeg ? "image/jpeg;base64" : "image/png;base64"; + avatarBase64 = $"data:{type},{base64}"; + } + var request = new EditUserRequest { CurrentPassword = currentPassword, Username = username, Email = email, Password = password, Avatar = avatarBase64 }; + return _rest.Patch(Endpoints.UserMe, request); + } + //Voice public Task GetVoiceRegions() => _rest.Get(Endpoints.VoiceRegions); - public Task GetVoiceIce() - => _rest.Get(Endpoints.VoiceIce); + /*public Task GetVoiceIce() + => _rest.Get(Endpoints.VoiceIce);*/ } } diff --git a/src/Discord.Net/API/HttpException.cs b/src/Discord.Net/Net/HttpException.cs similarity index 68% rename from src/Discord.Net/API/HttpException.cs rename to src/Discord.Net/Net/HttpException.cs index e0dba7d06..84ae66530 100644 --- a/src/Discord.Net/API/HttpException.cs +++ b/src/Discord.Net/Net/HttpException.cs @@ -1,14 +1,14 @@ using System; using System.Net; -namespace Discord.API +namespace Discord.Net { public class HttpException : Exception { public HttpStatusCode StatusCode { get; } public HttpException(HttpStatusCode statusCode) - : base($"The server responded with error {statusCode}") + : base($"The server responded with error {(int)statusCode} ({statusCode})") { StatusCode = statusCode; } diff --git a/src/Discord.Net/API/RestClient.Events.cs b/src/Discord.Net/Net/RestClient.Events.cs similarity index 97% rename from src/Discord.Net/API/RestClient.Events.cs rename to src/Discord.Net/Net/RestClient.Events.cs index d5d257d49..85c4d02a1 100644 --- a/src/Discord.Net/API/RestClient.Events.cs +++ b/src/Discord.Net/Net/RestClient.Events.cs @@ -1,7 +1,7 @@ using System; using System.Net.Http; -namespace Discord.API +namespace Discord.Net { internal partial class RestClient { diff --git a/src/Discord.Net/API/RestClient.SharpRest.cs b/src/Discord.Net/Net/RestClient.SharpRest.cs similarity index 80% rename from src/Discord.Net/API/RestClient.SharpRest.cs rename to src/Discord.Net/Net/RestClient.SharpRest.cs index a7391fe14..31e4f4925 100644 --- a/src/Discord.Net/API/RestClient.SharpRest.cs +++ b/src/Discord.Net/Net/RestClient.SharpRest.cs @@ -1,17 +1,17 @@ -using RestSharp; +using Discord.API; +using RestSharp; using System; -using System.IO; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -namespace Discord.API +namespace Discord.Net { - internal class RestSharpRestEngine : IRestEngine + internal partial class RestClient { - private readonly RestSharp.RestClient _client; + private RestSharp.RestClient _client; - public RestSharpRestEngine(string userAgent, int timeout) + partial void Initialize(string userAgent, int timeout) { _client = new RestSharp.RestClient(Endpoints.BaseApi) { @@ -24,20 +24,20 @@ namespace Discord.API _client.ReadWriteTimeout = timeout; } - public void SetToken(string token) + internal void SetToken(string token) { _client.RemoveDefaultParameter("authorization"); if (token != null) _client.AddDefaultHeader("authorization", token); } - public Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken) + private Task SendInternal(HttpMethod method, string path, string json, CancellationToken cancelToken) { var request = new RestRequest(path, GetMethod(method)); request.AddParameter("application/json", json, ParameterType.RequestBody); return Send(request, cancelToken); } - public Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken) + private Task SendFileInternal(HttpMethod method, string path, string filePath, CancellationToken cancelToken) { var request = new RestRequest(path, Method.POST); request.AddFile("file", filePath); diff --git a/src/Discord.Net/API/RestClient.cs b/src/Discord.Net/Net/RestClient.cs similarity index 90% rename from src/Discord.Net/API/RestClient.cs rename to src/Discord.Net/Net/RestClient.cs index 707bd785b..be1d9e4a6 100644 --- a/src/Discord.Net/API/RestClient.cs +++ b/src/Discord.Net/Net/RestClient.cs @@ -1,32 +1,25 @@ -using Newtonsoft.Json; +using Discord.API; +using Newtonsoft.Json; using System; using System.Diagnostics; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -namespace Discord.API +namespace Discord.Net { - internal interface IRestEngine - { - void SetToken(string token); - Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken); - Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken); - } - internal partial class RestClient { - private readonly IRestEngine _engine; private readonly LogMessageSeverity _logLevel; private CancellationToken _cancelToken; public RestClient(LogMessageSeverity logLevel, string userAgent, int timeout) { _logLevel = logLevel; - - _engine = new RestSharpRestEngine(userAgent, timeout); } + partial void Initialize(string userAgent, int timeout); + //DELETE private static readonly HttpMethod _delete = HttpMethod.Delete; internal Task Delete(string path, object data) where ResponseT : class => Send(_delete, path, data); @@ -37,12 +30,14 @@ namespace Discord.API internal Task Delete(string path) => Send(_delete, path); + //GET private static readonly HttpMethod _get = HttpMethod.Get; internal Task Get(string path) where ResponseT : class => Send(_get, path); internal Task Get(string path) => Send(_get, path); + //PATCH private static readonly HttpMethod _patch = new HttpMethod("PATCH"); internal Task Patch(string path, object data) where ResponseT : class => Send(_patch, path, data); @@ -97,7 +92,7 @@ namespace Discord.API if (_logLevel >= LogMessageSeverity.Verbose) stopwatch = Stopwatch.StartNew(); - string responseJson = await _engine.Send(method, path, requestJson, _cancelToken).ConfigureAwait(false); + string responseJson = await SendInternal(method, path, requestJson, _cancelToken).ConfigureAwait(false); #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) @@ -136,7 +131,7 @@ namespace Discord.API if (_logLevel >= LogMessageSeverity.Verbose) stopwatch = Stopwatch.StartNew(); - string responseJson = await _engine.SendFile(method, path, filePath, _cancelToken).ConfigureAwait(false); + string responseJson = await SendFileInternal(method, path, filePath, _cancelToken).ConfigureAwait(false); #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) @@ -173,7 +168,6 @@ namespace Discord.API #endif } - internal void SetToken(string token) => _engine.SetToken(token); internal void SetCancelToken(CancellationToken token) => _cancelToken = token; } } diff --git a/src/Discord.Net/WebSockets/Voice/VoiceBuffer.cs b/src/Discord.Net/Net/VoiceBuffer.cs similarity index 92% rename from src/Discord.Net/WebSockets/Voice/VoiceBuffer.cs rename to src/Discord.Net/Net/VoiceBuffer.cs index 8f3dc9f53..29bcb8e77 100644 --- a/src/Discord.Net/WebSockets/Voice/VoiceBuffer.cs +++ b/src/Discord.Net/Net/VoiceBuffer.cs @@ -1,7 +1,7 @@ using System; using System.Threading; -namespace Discord.WebSockets.Voice +namespace Discord.Net { internal class VoiceBuffer : IDiscordVoiceBuffer { @@ -46,7 +46,11 @@ namespace Discord.WebSockets.Voice if (_readCursor == nextPosition) { _notOverflowEvent.Reset(); - _notOverflowEvent.Wait(cancelToken); + try + { + _notOverflowEvent.Wait(cancelToken); + } + catch (OperationCanceledException) { return; } } if (i == wholeFrames) @@ -100,7 +104,11 @@ namespace Discord.WebSockets.Voice _isClearing = true; for (int i = 0; i < _frameCount; i++) Buffer.BlockCopy(_blankFrame, 0, _buffer, i * _frameCount, i++); - _underflowEvent.Wait(cancelToken); + try + { + _underflowEvent.Wait(cancelToken); + } + catch (OperationCanceledException) { } _writeCursor = 0; _readCursor = 0; _isClearing = false; diff --git a/src/Discord.Net/WebSockets/Voice/VoiceWebSocket.Events.cs b/src/Discord.Net/Net/VoiceWebSocket.Events.cs similarity index 95% rename from src/Discord.Net/WebSockets/Voice/VoiceWebSocket.Events.cs rename to src/Discord.Net/Net/VoiceWebSocket.Events.cs index e2e676986..82f525158 100644 --- a/src/Discord.Net/WebSockets/Voice/VoiceWebSocket.Events.cs +++ b/src/Discord.Net/Net/VoiceWebSocket.Events.cs @@ -1,6 +1,6 @@ using System; -namespace Discord.WebSockets.Voice +namespace Discord.Net { internal sealed class IsTalkingEventArgs : EventArgs { diff --git a/src/Discord.Net/WebSockets/Voice/VoiceWebSocket.cs b/src/Discord.Net/Net/VoiceWebSocket.cs similarity index 98% rename from src/Discord.Net/WebSockets/Voice/VoiceWebSocket.cs rename to src/Discord.Net/Net/VoiceWebSocket.cs index 76a42d6b4..59f48da47 100644 --- a/src/Discord.Net/WebSockets/Voice/VoiceWebSocket.cs +++ b/src/Discord.Net/Net/VoiceWebSocket.cs @@ -1,5 +1,6 @@ #define USE_THREAD -using Discord.Audio; +using Discord.API; +using Discord.Interop; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; @@ -13,7 +14,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace Discord.WebSockets.Voice +namespace Discord.Net { internal partial class VoiceWebSocket : WebSocket { @@ -109,8 +110,8 @@ namespace Discord.WebSockets.Voice #if !DNX451 && !__MonoCS__ _udp.AllowNatTraversal(true); #endif - - LoginCommand msg = new LoginCommand(); + + VoiceLoginCommand msg = new VoiceLoginCommand(); msg.Payload.ServerId = _serverId; msg.Payload.SessionId = _sessionId; msg.Payload.Token = _token; @@ -238,7 +239,7 @@ namespace Discord.WebSockets.Voice int port = packet[68] | packet[69] << 8; string ip = Encoding.ASCII.GetString(packet, 4, 70 - 6).TrimEnd('\0'); - var login2 = new Login2Command(); + var login2 = new VoiceLogin2Command(); login2.Payload.Protocol = "udp"; login2.Payload.SocketData.Address = ip; login2.Payload.SocketData.Mode = _encryptionMode; @@ -458,7 +459,7 @@ namespace Discord.WebSockets.Voice { if (_state != (int)WebSocketState.Connected) { - var payload = (msg.Payload as JToken).ToObject(); + var payload = (msg.Payload as JToken).ToObject(); _heartbeatInterval = payload.HeartbeatInterval; _ssrc = payload.SSRC; _endpoint = new IPEndPoint((await Dns.GetHostAddressesAsync(Host.Replace("wss://", "")).ConfigureAwait(false)).FirstOrDefault(), payload.Port); diff --git a/src/Discord.Net/WebSockets/WebSocket.BuiltIn.cs b/src/Discord.Net/Net/WebSocket.BuiltIn.cs.old similarity index 99% rename from src/Discord.Net/WebSockets/WebSocket.BuiltIn.cs rename to src/Discord.Net/Net/WebSocket.BuiltIn.cs.old index e413c2432..af375e743 100644 --- a/src/Discord.Net/WebSockets/WebSocket.BuiltIn.cs +++ b/src/Discord.Net/Net/WebSocket.BuiltIn.cs.old @@ -1,5 +1,4 @@ -/* -using Discord.Helpers; +using Discord.Helpers; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -149,5 +148,4 @@ namespace Discord.WebSockets _sendQueue.Enqueue(message); } } -} -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/src/Discord.Net/WebSockets/WebSocket.Events.cs b/src/Discord.Net/Net/WebSocket.Events.cs similarity index 96% rename from src/Discord.Net/WebSockets/WebSocket.Events.cs rename to src/Discord.Net/Net/WebSocket.Events.cs index 9824fbff8..1c2383198 100644 --- a/src/Discord.Net/WebSockets/WebSocket.Events.cs +++ b/src/Discord.Net/Net/WebSocket.Events.cs @@ -1,6 +1,6 @@ using System; -namespace Discord.WebSockets +namespace Discord.Net { internal abstract partial class WebSocket { diff --git a/src/Discord.Net/WebSockets/WebSocket.WebSocketSharp.cs b/src/Discord.Net/Net/WebSocket.WebSocketSharp.cs similarity index 98% rename from src/Discord.Net/WebSockets/WebSocket.WebSocketSharp.cs rename to src/Discord.Net/Net/WebSocket.WebSocketSharp.cs index c55196259..f245dd24e 100644 --- a/src/Discord.Net/WebSockets/WebSocket.WebSocketSharp.cs +++ b/src/Discord.Net/Net/WebSocket.WebSocketSharp.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using WSSharpNWebSocket = WebSocketSharp.WebSocket; -namespace Discord.WebSockets +namespace Discord.Net { internal class WSSharpWebSocketEngine : IWebSocketEngine { diff --git a/src/Discord.Net/WebSockets/WebSocket.cs b/src/Discord.Net/Net/WebSocket.cs similarity index 99% rename from src/Discord.Net/WebSockets/WebSocket.cs rename to src/Discord.Net/Net/WebSocket.cs index 6f9165f8c..cf93518c3 100644 --- a/src/Discord.Net/WebSockets/WebSocket.cs +++ b/src/Discord.Net/Net/WebSocket.cs @@ -6,7 +6,7 @@ using System.Runtime.ExceptionServices; using System.Threading; using System.Threading.Tasks; -namespace Discord.WebSockets +namespace Discord.Net { public enum WebSocketState : byte { diff --git a/src/Discord.Net/WebSockets/Data/Commands.cs b/src/Discord.Net/WebSockets/Data/Commands.cs deleted file mode 100644 index 90b4e59d3..000000000 --- a/src/Discord.Net/WebSockets/Data/Commands.cs +++ /dev/null @@ -1,64 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; -using System.Collections.Generic; - -namespace Discord.WebSockets.Data -{ - internal sealed class KeepAliveCommand : WebSocketMessage - { - public KeepAliveCommand() : base(1, EpochTime.GetMilliseconds()) { } - } - internal sealed class LoginCommand : WebSocketMessage - { - public LoginCommand() : base(2) { } - public class Data - { - [JsonProperty("token")] - public string Token; - [JsonProperty("v")] - public int Version = 3; - [JsonProperty("properties")] - public Dictionary Properties = new Dictionary(); - } - } - internal sealed class UpdateStatusCommand : WebSocketMessage - { - public UpdateStatusCommand() : base(3) { } - public class Data - { - [JsonProperty("idle_since")] - public ulong? IdleSince; - [JsonProperty("game_id")] - public int? GameId; - } - } - internal sealed class JoinVoiceCommand : WebSocketMessage - { - public JoinVoiceCommand() : base(4) { } - public class Data - { - [JsonProperty("guild_id")] - public string ServerId; - [JsonProperty("channel_id")] - public string ChannelId; - [JsonProperty("self_mute")] - public string SelfMute; - [JsonProperty("self_deaf")] - public string SelfDeaf; - } - } - internal sealed class ResumeCommand : WebSocketMessage - { - public ResumeCommand() : base(6) { } - public class Data - { - [JsonProperty("session_id")] - public string SessionId; - [JsonProperty("seq")] - public int Sequence; - } - } -} diff --git a/src/Discord.Net/WebSockets/Data/Events.cs b/src/Discord.Net/WebSockets/Data/Events.cs deleted file mode 100644 index 2ed5c4b4b..000000000 --- a/src/Discord.Net/WebSockets/Data/Events.cs +++ /dev/null @@ -1,115 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Discord.API; -using Newtonsoft.Json; - -namespace Discord.WebSockets.Data -{ - internal sealed class ReadyEvent - { - public sealed class ReadStateInfo - { - [JsonProperty("id")] - public string ChannelId; - [JsonProperty("mention_count")] - public int MentionCount; - [JsonProperty("last_message_id")] - public string LastMessageId; - } - - [JsonProperty("v")] - public int Version; - [JsonProperty("user")] - public SelfUserInfo User; - [JsonProperty("session_id")] - public string SessionId; - [JsonProperty("read_state")] - public ReadStateInfo[] ReadState; - [JsonProperty("guilds")] - public ExtendedGuildInfo[] Guilds; - [JsonProperty("private_channels")] - public ChannelInfo[] PrivateChannels; - [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval; - } - internal sealed class ResumedEvent - { - [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval; - } - - internal sealed class RedirectEvent - { - [JsonProperty("url")] - public string Url; - } - - //Servers - internal sealed class GuildCreateEvent : ExtendedGuildInfo { } - internal sealed class GuildUpdateEvent : GuildInfo { } - internal sealed class GuildDeleteEvent : ExtendedGuildInfo { } - - //Channels - internal sealed class ChannelCreateEvent : ChannelInfo { } - internal sealed class ChannelDeleteEvent : ChannelInfo { } - internal sealed class ChannelUpdateEvent : ChannelInfo { } - - //Memberships - internal sealed class GuildMemberAddEvent : MemberInfo { } - internal sealed class GuildMemberUpdateEvent : MemberInfo { } - internal sealed class GuildMemberRemoveEvent : MemberInfo { } - - //Roles - internal sealed class GuildRoleCreateEvent - { - [JsonProperty("guild_id")] - public string GuildId; - [JsonProperty("role")] - public RoleInfo Data; - } - internal sealed class GuildRoleUpdateEvent - { - [JsonProperty("guild_id")] - public string GuildId; - [JsonProperty("role")] - public RoleInfo Data; - } - internal sealed class GuildRoleDeleteEvent : RoleReference { } - - //Bans - internal sealed class GuildBanAddEvent : MemberReference { } - internal sealed class GuildBanRemoveEvent : MemberReference { } - - //User - internal sealed class UserUpdateEvent : SelfUserInfo { } - internal sealed class PresenceUpdateEvent : PresenceMemberInfo { } - internal sealed class VoiceStateUpdateEvent : VoiceMemberInfo { } - - //Chat - internal sealed class MessageCreateEvent : API.Message { } - internal sealed class MessageUpdateEvent : API.Message { } - internal sealed class MessageDeleteEvent : MessageReference { } - internal sealed class MessageAckEvent : MessageReference { } - internal sealed class TypingStartEvent - { - [JsonProperty("user_id")] - public string UserId; - [JsonProperty("channel_id")] - public string ChannelId; - [JsonProperty("timestamp")] - public int Timestamp; - } - - //Voice - internal sealed class VoiceServerUpdateEvent - { - [JsonProperty("guild_id")] - public string GuildId; - [JsonProperty("endpoint")] - public string Endpoint; - [JsonProperty("token")] - public string Token; - } -} diff --git a/src/Discord.Net/WebSockets/Voice/Commands.cs b/src/Discord.Net/WebSockets/Voice/Commands.cs deleted file mode 100644 index 740f235bc..000000000 --- a/src/Discord.Net/WebSockets/Voice/Commands.cs +++ /dev/null @@ -1,59 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; - -namespace Discord.WebSockets.Voice -{ - internal sealed class LoginCommand : WebSocketMessage - { - public LoginCommand() : base(0) { } - public class Data - { - [JsonProperty("server_id")] - public string ServerId; - [JsonProperty("user_id")] - public string UserId; - [JsonProperty("session_id")] - public string SessionId; - [JsonProperty("token")] - public string Token; - } - } - internal sealed class Login2Command : WebSocketMessage - { - public Login2Command() : base(1) { } - public class Data - { - public class SocketInfo - { - [JsonProperty("address")] - public string Address; - [JsonProperty("port")] - public int Port; - [JsonProperty("mode")] - public string Mode = "xsalsa20_poly1305"; - } - [JsonProperty("protocol")] - public string Protocol = "udp"; - [JsonProperty("data")] - public SocketInfo SocketData = new SocketInfo(); - } - } - internal sealed class KeepAliveCommand : WebSocketMessage - { - public KeepAliveCommand() : base(3, null) { } - } - internal sealed class IsTalkingCommand : WebSocketMessage - { - public IsTalkingCommand() : base(5) { } - public class Data - { - [JsonProperty("delay")] - public int Delay; - [JsonProperty("speaking")] - public bool IsSpeaking; - } - } -} diff --git a/src/Discord.Net/WebSockets/Voice/Events.cs b/src/Discord.Net/WebSockets/Voice/Events.cs deleted file mode 100644 index a2bd730df..000000000 --- a/src/Discord.Net/WebSockets/Voice/Events.cs +++ /dev/null @@ -1,38 +0,0 @@ -//Ignore unused/unassigned variable warnings -#pragma warning disable CS0649 -#pragma warning disable CS0169 - -using Newtonsoft.Json; - -namespace Discord.WebSockets.Voice -{ - internal sealed class ReadyEvent - { - [JsonProperty("ssrc")] - public uint SSRC; - [JsonProperty("port")] - public ushort Port; - [JsonProperty("modes")] - public string[] Modes; - [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval; - } - - internal sealed class JoinServerEvent - { - [JsonProperty("secret_key")] - public byte[] SecretKey; - [JsonProperty("mode")] - public string Mode; - } - - internal sealed class IsTalkingEvent - { - [JsonProperty("user_id")] - public string UserId; - [JsonProperty("ssrc")] - public uint SSRC; - [JsonProperty("speaking")] - public bool IsSpeaking; - } -} diff --git a/src/Discord.Net/WebSockets/WebSocketMessage.cs b/src/Discord.Net/WebSockets/WebSocketMessage.cs deleted file mode 100644 index c63bd4787..000000000 --- a/src/Discord.Net/WebSockets/WebSocketMessage.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Discord.WebSockets -{ - public class WebSocketMessage - { - [JsonProperty("op")] - public int Operation; - [JsonProperty("d")] - public object Payload; - [JsonProperty("t", NullValueHandling = NullValueHandling.Ignore)] - public string Type; - [JsonProperty("s", NullValueHandling = NullValueHandling.Ignore)] - public int? Sequence; - } - internal abstract class WebSocketMessage : WebSocketMessage - where T : new() - { - public WebSocketMessage() { Payload = new T(); } - public WebSocketMessage(int op) { Operation = op; Payload = new T(); } - public WebSocketMessage(int op, T payload) { Operation = op; Payload = payload; } - - [JsonIgnore] - public new T Payload - { - get { if (base.Payload is JToken) { base.Payload = (base.Payload as JToken).ToObject(); } return (T)base.Payload; } - set { base.Payload = value; } - } - } -} diff --git a/src/Discord.Net/packages.config b/src/Discord.Net/packages.config deleted file mode 100644 index 505e58836..000000000 --- a/src/Discord.Net/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file