From 25cd9f2b4c7d1eec3075e684d335f1861a18d88b Mon Sep 17 00:00:00 2001 From: Savvy Date: Tue, 11 Jul 2017 17:27:18 -0400 Subject: [PATCH] Added/Changed many things, need to switch from thunderbolt to irg.json, need sql cleanup --- .../2.13/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .gradle/2.13/taskArtifacts/fileHashes.bin | Bin 29233 -> 39343 bytes .gradle/2.13/taskArtifacts/fileSnapshots.bin | Bin 553151 -> 942113 bytes .gradle/2.13/taskArtifacts/taskArtifacts.bin | Bin 25611 -> 34449 bytes ...com_mashape_unirest_unirest_java_1_4_9.xml | 5 +- ...radle__com_sedmelluq_lavaplayer_1_2_39.xml | 11 - ...radle__commons_codec_commons_codec_1_9.xml | 5 +- ...e__commons_logging_commons_logging_1_2.xml | 5 +- ...dle__mysql_mysql_connector_java_5_1_38.xml | 5 +- ...pache_commons_commons_collections4_4_1.xml | 5 +- ...__org_apache_commons_commons_lang3_3_5.xml | 5 +- ...e_httpcomponents_httpasyncclient_4_1_1.xml | 5 +- ...apache_httpcomponents_httpclient_4_5_2.xml | 5 +- ...g_apache_httpcomponents_httpcore_4_4_4.xml | 5 +- ...ache_httpcomponents_httpcore_nio_4_4_4.xml | 5 +- ...g_apache_httpcomponents_httpmime_4_5_2.xml | 5 +- .../Gradle__org_json_json_20160810.xml | 5 +- .idea/misc.xml | 15 +- .idea/modules/Rixa_main.iml | 11 +- .idea/modules/Rixa_test.iml | 11 +- .idea/workspace.xml | 1479 ++++++----------- build.gradle | 8 +- src/main/java/me/savvy/rixa/Rixa.java | 20 +- .../java/me/savvy/rixa/action/Action.java | 17 + .../me/savvy/rixa/action/ActionManager.java | 50 + .../rixa/action/actions/MessageResponse.java | 28 + .../rixa/commands/admin/ConfigCommand.java | 63 +- .../rixa/commands/admin/InviteCommand.java | 32 + .../rixa/commands/general/HelpCommand.java | 2 +- .../rixa/commands/general/InfoCommand.java | 33 +- .../rixa/commands/general/MusicCommand.java | 14 +- .../commands/general/ServerInfoCommand.java | 1 + .../general/UrbanDictionaryCommand.java | 56 + .../savvy/rixa/commands/mod/MuteCommand.java | 1 - .../data/database/sql/DatabaseManager.java | 1 - .../me/savvy/rixa/events/MemberEvent.java | 60 + .../me/savvy/rixa/events/MessageEvent.java | 54 + .../java/me/savvy/rixa/guild/RixaGuild.java | 28 +- .../rixa/guild/management/GuildSettings.java | 51 +- .../savvy/rixa/modules/music/MusicModule.java | 8 +- .../reactions/react/ConfigReaction.java | 41 + .../modules/reactions/react/HelpReaction.java | 16 +- .../rixa/modules/twitter/TwitterModule.java | 80 + .../me/savvy/rixa/utils/MessageBuilder.java | 7 +- .../me/savvy/rixa/utils/UrbanDictionary.java | 57 + .../me/savvy/rixa/utils/YoutubeSearch.java | 7 + 46 files changed, 1199 insertions(+), 1123 deletions(-) delete mode 100644 .idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml create mode 100644 src/main/java/me/savvy/rixa/action/Action.java create mode 100644 src/main/java/me/savvy/rixa/action/ActionManager.java create mode 100644 src/main/java/me/savvy/rixa/action/actions/MessageResponse.java create mode 100644 src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java create mode 100644 src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java create mode 100644 src/main/java/me/savvy/rixa/events/MemberEvent.java create mode 100644 src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java create mode 100644 src/main/java/me/savvy/rixa/utils/UrbanDictionary.java create mode 100644 src/main/java/me/savvy/rixa/utils/YoutubeSearch.java diff --git a/.gradle/2.13/taskArtifacts/cache.properties.lock b/.gradle/2.13/taskArtifacts/cache.properties.lock index 0a03c04855d1e4cd2bde0683723f3d1cc92023b9..fd54d85b228b262ea29b1b911fa2c7988469c30e 100644 GIT binary patch literal 17 UcmZRM`)gkj_?x4T0SvTQ0W!S=CjbBd literal 17 UcmZRM`)gkj_?x4T0SrX*05bdpdjJ3c diff --git a/.gradle/2.13/taskArtifacts/fileHashes.bin b/.gradle/2.13/taskArtifacts/fileHashes.bin index 406a999e14bd1cd84ed3cbbad224d0da09175ec6..276a4567076ec5a05b124468d63d12d13fdaa06f 100644 GIT binary patch delta 9678 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 delta 1604 zcmYLIe@s(X6b8f}pdv!cy9I$)L?}Y(tK~<5Y-+MV0V_2#P6BFC3I(l-;;al1hKsT} zEdAUfw2YPn$L5?i%`!Dnbc+TThs-~gY33%AZMqqM#W=PlbN9ZxWKB-)={e^+=eyrM z?^G}>Fcs=js%M1Azfv1L^10s>|G&SkFOWBfgoRwddLqF`MqpK`(5ouJV^uHu;t3|> zooGrBa3+Dc7ZEtAU0kF`L}Cd#5(!QxN|;V8MP(8#Nh0oKE9@e{7_}8@6V9lukWwU! zPU-XO9`Y*6I_`zo@vFgEIN-`v{sKwtqwjd!Gv}Mu53MSW^aOBM`==<)=5|) znJ^(qAbQG2uR_7H5{xaA5N#k>Z_vYU5ZpQRmN_bXlp`S`SAa2>(#};OKz&V~3YB># zoXr#5`IJ31XFlzeuY%fWLZ{J+i~@p6YTX4o+@q(d(1ejf33G}FEJbNy3x5g(975pY zm$QNvQ)p;-&v>7Jl}$=KEQ=JgD=x=o?6&_YR=4asJoXiRr_kzmAK6~v54XUBfSKTv zQpLQU@&4sJ7}JlHyO++a?iu%#W9M!W31uwpY5WiK2sLYzu$0BoNggK}%W`P8ZxPRi zOkuK2KyGua+~5Sv&C6sji0E!^9oy_lervk%fBdfTMNi)L@&BCQtSu~I~nf*`_q&6iknCD{0Y9@jIK5r7OVeFu7 z=Vd9luv+e*MQgi!+o2W6s*pp)_^n+;SA~L2*Z~iZwxM^wfypxTCL%34jK))hc8J() zkqd{>VqvNdo#F%MkIDmG9em(t!TXlcnc^;AV~Vk||H$Bmu4AXyA1z_(w0}BP$1yP{ z+1m#1tUDP-`+JPR-pWm3OyU@xFM1&>k?d9mHPye)pf%oCF|j8Zx_1=8V(VQwQV(q{ zBjO$8poPoP+e+|OEu-oE9s{*ZT<=w$ot-ML(=$0cFdy@5EbF_@v$Gs{@?Jb_wpfbw z-9oF4Ddf9{zxK*n`2N7}Ha`vd6X2?2qWCT&dY>$)KOHZ4C=UC1XmAg<*R!g@Vm#a@ zcNn~ZALNiuhes4qcxLdq<2(6vx~$Eg^9Fg(*!P#Bj^6mv)WNG)3hvaz9=P2xQDxy*>wC`24B@geeN9Z6{@VyN uiDLip^P}%*K-J#_lE(>a0>ngSd}U zN-3)DvlJ2ceJfS>Q4Qi2NB{3R_q|6BYbIa)|E8Z$lFiEOyytm8@8^6y&vP(bA}KHX zm-$aZ|EHpUNS`bRKg-jvKa+u<`>EHGEiJg$K{_Y*S~}yr`}J|~H#OtvzyGbaL{c}6 ze*I#GM50KcUynb;y_WXHxYxloGb9q@x76PR={vh$-}q1>`QlgV{opU#x?j)E0k2n5 z?-!}ioqHYp$5QTfknK5;G$~8JF4u~CU1WMi?sd`W;2E2g zqyDDI8723+=$WzL^=#_>kn*3nUw7ROUeBT5|KqMi(sUC2dL{y1r&F(s^{yX-0NZs0o~a56MqMi88OCGoeUXyz)k(B(}0ABw>zpf9Si+NpY5x5Wg`pbsk^$O~5O5L3< zkwomKUWXn4_h(-l0X-x3(C?3^$-R~YnW^{0Zz2Um3WyXCDIiinq<}~PkpdzGL<)!$ z5Gf#1K%{_30g(bC1w;yn6c8!!PEg<=h`vio&`T+=4`SCOJ2*fhQI-O~RvNjq{NxGg zqyC`&N&49zY$jpU**}lYPyGBZ>iwW!zGL4XgMR+w`&X6~r9bNCI`;jU&&#G)Na`I! zy{x>sz zf1MlM=)Zrmi+#WLuXBz}?wziu|NgiCvG3QL^XjMl{h!c0Bb~X3ecyuI&)h#|xPt!s zw$<79<4&&JJlAzgO1)pK@=*5u0jDodf7V{!hQ9C2t?c`Q>JL<{s+vI4?fo*V*!S6= z^ydf7Vt;3UGViZue`kL(@9$@SXMZy9U!i}B-$e?D6c8yOQb44DNCA-oA_YVWh!hYh zAW}f2fJgz60wM)O3WyXCDIiinq<}~PkpdzGL<)!$5Gf#1K%{_30g(bC1w;yn6c8yO zQb44DNCA-oA_YVWh!hYh@c%yw9MphkBGKPuu|N=1F#z5VS_Zy;B)@`-oRl`Nk92kt z4kyydnqVdzNVpwKN+4`5Ct|g^i1>JG->?C8M?YsGiV;YRH3dcD94H=7AOjp|Vj{SJ z{xyvGRnZr9NH+)ip#!And0$YX!w#0|vJy_|wt&~AFrzN1Fw_c`VSQTmIgG~_TiWQC zTBof)W(7{ZV7cU{GBZXN|G9hLJC=S4>+5`*EhIs~?e>LdSic#h2(J9$cJ-#q|J-~# z5(8S)8=7#i&iuw@$L~^wR4HPlk7m%SycoLfQ1Dl)$**APo&fmAoMes15eMP4Cpj>} zi6o#_n^by&r%ysKyUk*aQ}lJ(ZNajSJI^>#LEmG-uwdgtjXV^kpHH&=MgVtnIxuRj zNMAG=MG^?ai6$qfA`bG9CfM<$cr5BMHWirnV(J1tTOjNP4o+Z3BIdqL;RS06h@jji)I?mEwlAW~co z)QKe8lTatx9Lf9;>P{q~r8rHb*`@YwEPwemf?HQgI!ZMZg8P6Zg9yterVlJ!Q<^&=IyrQTa!@S2n zny)Vrgd@1Xa&})%q33P{qB&QWaqR8*CoRM|T>^I50vYWcdv7Dvn zmkhpti|6|%xvYSL86IjzN^ru#Qg=PiN&upja3;mO z*n3W>YM)ZB+Nt8VqB5tnoZIs9Bc7j^J3pNCAVqsL;YhGLoq*febqqUq_?v~!AB~D* z{aeMB9I43+@-})Di~)zCSRYc`(V8MmjaaNeV}z*{D#Y%f^%X)YEkvzU>6J#65DxLXE1_797X*nAV^+tF=nhLYN3Mfof2_L8GBA3u7+>D{}

J1$;ubAaVbU9a> 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%0D< zNtR_eC3MzFkTp|uuuXu1Bt5R5dXCor={dT4$DI=&Kf1m}jr+@d@k7FP%xIe~xLEF7 zS7Yv!0qVMpD`h^fGIK+@gI3=_L{k^zO`W!%TGp*GY{&<5?aq@tS>~sEezp2t&FNW` zy9|B)(8+~3A;GTfW}|SoH#;~hQXg&eMdyz%*5r0HsJHF-EZlMz3UNYi$?m#=i;*BD z#dUm{6vPRUA-E?gIKwIs2xM4L6)F@iK{Swn@*fuojp_`KFA6r2WWYxBZ5~8?srj8h zJ+M4)z(6&v!y|{EvpkM%Y_s1*R2Fapb!KKL7)%>3d!u!gCAVq-fRH^ zg=kxQai{IqcBQ6Ff3@?0L+AW246lDKd!N-lrM@Y9^deRS3PGR{r)}No%-w7AhGds| zcu6EMpoAb$$gO7e%rB_q{76re~P57eFVQr=!yn~ z#8cs+$OXw#Zb5P&FURfe%NswaB>l6~d9bm2@^XZv%=RrZGTU~@;#E!-C_o;%L(t5c~_ou;-H zC8`gwyf8H8RuE)F^HLl&t32rJ|5;ORz}~Y1N+ut9Y`@iWAhf3kMK1Ql%(Cmords!v zl)U`V!Qp6E%K29L=O%A`Yw5=eHokR!=y9t*Y_LIlu-RrrlXe6du|$4on*1IZYEQs= zENd_isP#-WkNh>`+CKkzL5=>Se#t8Q=A|Qxj>lmo!YW9{Jt)}VdgGM!H(gP!T3khwCXB*JiSs7WW;}~o^XV@YQJW+onoG%dh`zLqd=I)t$`FeDcL|k z_6wn=MIY5!yyP5~|KoF$Mi*lo6E<3Yki^^(f{f@{YCTPSor)6#8PP#TiPISuEe-v* zzdU3l4x{u20U%vl6C1bTISjyCEQYfR=^`Z7w_;=!f`{eb7Lww$jX3$O_i6>+y{RTUb9I9*qY{TkHY=hKB?VDZ5G4gsQUqT2 zh{B`1Mx?Hb;BmwM0JA6cGHG2S*9;ccnON)_|HJ^KcC zS=K&lbm{pgAMf_|(+^vo(~9s4c_5|pDZ%7Q1Ygi;TSkp7AF{k%GhLYm64Q;jc>G40;Zu?-%GVj#8YvxM`lXA1TgVGmb&jCIU zDwG3u%WaofD=Mr*H^QVKOo~w-cAdz(F)!`At+u9vp-StkXw4XCQ82qxkdvJr779g} zlw6+|>gh03Ho@uM_^=lgno)YQ}N0X zaZ0Cc_kogaHkAFQ*!r`Nz4BgGjXA$0>SKl~R6F}c!JFdNsS|>~Uoetu2yGk)lY%fQ z_QSu=iPjdDmd+0TgcA57$cg4c^8zKQ6vF}e3zr~~B`~A_UkH-|#mJFaW`s%U$44No zc%xmTQR)=2b2)9ZlP2cu8g%}AcGnAa2d-T)#PZZrjQ

3V=T8e^E@zE^C)^u8^NY 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 N%G{17Z>sn3{|4)0*V6z1 delta 11895 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 B;&A`~ delta 235 zcmbQ(%hY{>ae^o#(?l^jCI-EYiF?H-7HChFlSp8S=-u2P!E7ui&cMJV&V0_=;t8+Z zu^yJ2|8Cx1*S)}N|HkfB=eVa%Ug+&Lxg{V#!mM)fy$@%0oNUQgSy3!=k@?o1<7T_- z_msmGXtEe6%?!UUV&3?pSc#W4;@Rq%5l^C$u0a)qu`#K#mM~~fz8E6AIkvWsadViz z8|P-TgtN>N{2w+>56hDCYcRWXWS*_h;kjwO<$_h~GBz`2Y-N`CxOJnK{H4di@Agc8 cx!a+^S4kyj+kD=SIhz|}wlZ@tfB| + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml b/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml deleted file mode 100644 index 46b8c65..0000000 --- a/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml b/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml index ea493a9..ead3f32 100644 --- a/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml +++ b/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml b/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml index 7a70d30..9d03aca 100644 --- a/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml +++ b/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml index 1bad8c9..b66e8b8 100644 --- a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml +++ b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml b/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml index b4c6feb..0fdac3b 100644 --- a/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml +++ b/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml index 7b1f75e..5ee8c1f 100644 --- a/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml +++ b/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml index 21d2822..8c7ef75 100644 --- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml +++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml index 217c1cf..3152057 100644 --- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml +++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml index 8fa2fc3..8fe3436 100644 --- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml +++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml index f255260..4edbd94 100644 --- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml +++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml index 9b958e8..2c132b6 100644 --- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml +++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_json_json_20160810.xml b/.idea/libraries/Gradle__org_json_json_20160810.xml index 26de386..976804c 100644 --- a/.idea/libraries/Gradle__org_json_json_20160810.xml +++ b/.idea/libraries/Gradle__org_json_json_20160810.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9793229..0548357 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,19 +1,6 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/.idea/modules/Rixa_main.iml b/.idea/modules/Rixa_main.iml index c32c2c9..fb1c457 100644 --- a/.idea/modules/Rixa_main.iml +++ b/.idea/modules/Rixa_main.iml @@ -1,6 +1,6 @@ - + @@ -9,11 +9,10 @@ - + - - - + + @@ -29,7 +28,6 @@ - @@ -37,5 +35,6 @@ + \ No newline at end of file diff --git a/.idea/modules/Rixa_test.iml b/.idea/modules/Rixa_test.iml index 3ecf3b6..a954436 100644 --- a/.idea/modules/Rixa_test.iml +++ b/.idea/modules/Rixa_test.iml @@ -1,6 +1,6 @@ - + @@ -10,11 +10,10 @@ - + - - - + + @@ -30,7 +29,6 @@ - @@ -38,6 +36,7 @@ + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 453e2fa..4ce36d1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,41 +2,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -63,6 +34,9 @@ + + + @@ -81,13 +55,39 @@ + + + musicrole + joinpm + music + greetings + addPerm + setTitle + "http://rixa.io" + pplay + Staff + sendHelp + The configuration + getMessage( + Adding to queue + leave + log_channel + testin + testing + + + setTitle(String.format("Help: %s", title)) + ; + the configuration + + - - - @@ -575,15 +579,8 @@ - - - - - - - + - @@ -600,15 +597,11 @@ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - @@ -1029,27 +753,19 @@ - - - - - - - + + + + @@ -1070,57 +786,71 @@ + + + + + + + + + + + + + + + + + + - - - - - - @@ -1146,136 +876,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1322,27 +913,6 @@ - - - - - - - - @@ -1364,9 +934,6 @@ - - - - - - - - - @@ -1434,64 +995,38 @@ - - - - - @@ -1517,12 +1052,14 @@ - + + + - @@ -1535,32 +1072,31 @@ - - - - + + - - - + - - + - + + + + + @@ -1569,7 +1105,7 @@ - + @@ -1580,14 +1116,14 @@ - + + - - - + + @@ -1615,399 +1151,328 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - - - + + - + - - - - - - + + - + - - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build.gradle b/build.gradle index 5fef19d..6710a9a 100644 --- a/build.gradle +++ b/build.gradle @@ -24,11 +24,11 @@ repositories { } dependencies { - compile 'net.dv8tion:JDA:3.1.1_212' + compile 'net.dv8tion:JDA:3.1.1_215' compile 'mysql:mysql-connector-java:5.1.38' - compile 'com.sedmelluq:lavaplayer:1.2.39' - compile group: 'edu.cmu.sphinx', name: 'sphinx4-core', version:'5prealpha-SNAPSHOT' - compile group: 'edu.cmu.sphinx', name: 'sphinx4-data', version:'5prealpha-SNAPSHOT' + compile 'com.sedmelluq:lavaplayer:1.2.42' + compile 'org.twitter4j:twitter4j-core:4.0.3' + compile 'org.twitter4j:twitter4j-stream:4.0.6' } compileJava.options.encoding = 'UTF-8' diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java index ab03467..45cc03e 100644 --- a/src/main/java/me/savvy/rixa/Rixa.java +++ b/src/main/java/me/savvy/rixa/Rixa.java @@ -14,8 +14,11 @@ import me.savvy.rixa.data.database.sql.DatabaseManager; import me.savvy.rixa.data.filemanager.ConfigManager; import me.savvy.rixa.data.filemanager.LanguageManager; import me.savvy.rixa.events.BotEvent; +import me.savvy.rixa.events.MemberEvent; import me.savvy.rixa.events.MessageEvent; +import me.savvy.rixa.modules.reactions.handlers.React; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; +import me.savvy.rixa.modules.reactions.react.ConfigReaction; import me.savvy.rixa.modules.reactions.react.HelpReaction; import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.JDA; @@ -60,7 +63,7 @@ public class Rixa { dbManager.createTable(); getInstance().setLanguageManager(new LanguageManager()); try { - int shards = 3; + int shards = 5; for(int i = 0; i < shards; i++) { Logger.getLogger("Rixa").info("Loading shard #" + i); JDABuilder jda = new JDABuilder(AccountType.BOT) @@ -68,6 +71,7 @@ public class Rixa { .setEventManager(new AnnotatedEventManager()) .addEventListener(new MessageEvent()) .addEventListener(new BotEvent()) + .addEventListener(new MemberEvent()) .setGame(Game.of(config.getConfig().getString("botGame"))) .setAutoReconnect(true) .setStatus(OnlineStatus.ONLINE) @@ -84,8 +88,8 @@ public class Rixa { new InfoCommand(), new ServerInfoCommand(), new HelpCommand(), new DeleteMessagesCommand(), new PingCommand(), new PurgeMessagesCommand(), new BatchMoveCommand(), new MuteCommand(), new MusicCommand(), - new ConfigCommand()}); - ReactionManager.registerReaction(new HelpReaction()); + new ConfigCommand(), new UrbanDictionaryCommand(), /*new InviteCommand()*/}); + register(new React[] {new HelpReaction(), new ConfigReaction()}); data = new Data(DataType.SQL); } @@ -115,6 +119,12 @@ public class Rixa { } } + private static void register(React react[]) { + for (React reaction: react) { + ReactionManager.registerReaction(reaction); + } + } + public static Rixa getInstance() { return instance; } @@ -130,4 +140,8 @@ public class Rixa { public ConfigManager getConfig() { return config; } + + public List getShardsList() { + return shardsList; + } } diff --git a/src/main/java/me/savvy/rixa/action/Action.java b/src/main/java/me/savvy/rixa/action/Action.java new file mode 100644 index 0000000..527a6cb --- /dev/null +++ b/src/main/java/me/savvy/rixa/action/Action.java @@ -0,0 +1,17 @@ +package me.savvy.rixa.action; + +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +/** + * Created by savit on 6/24/2017. + */ +public interface Action { + + String getName(); + + String getDescription(); + + void execute(); + + void execute(GuildMessageReceivedEvent event); +} diff --git a/src/main/java/me/savvy/rixa/action/ActionManager.java b/src/main/java/me/savvy/rixa/action/ActionManager.java new file mode 100644 index 0000000..052f7f3 --- /dev/null +++ b/src/main/java/me/savvy/rixa/action/ActionManager.java @@ -0,0 +1,50 @@ +package me.savvy.rixa.action; + +import net.dv8tion.jda.core.entities.Guild; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by savit on 6/24/2017. + */ +public class ActionManager { + + private Guild guild; + private Map actionMap; + + public ActionManager(Guild guild) { + this.guild = guild; + actionMap = new HashMap<>(); + } + + public Guild getGuild() { + return guild; + } + + public Map getActionMap() { + return actionMap; + } + + public Action getAction(String actionName) { + return actionMap.get(actionName); + } + + public void addAction(String actionName, Action action) { + if(hasAction(actionName)) { + actionMap.remove(actionName); + } + actionMap.put(actionName, action); + } + + public void removeAction(String actionName) { + if(!(hasAction(actionName))) { + return; + } + actionMap.remove(actionName); + } + + public boolean hasAction(String actionName) { + return actionMap.containsKey(actionName); + } +} diff --git a/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java b/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java new file mode 100644 index 0000000..8cb3852 --- /dev/null +++ b/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java @@ -0,0 +1,28 @@ +package me.savvy.rixa.action.actions; + +import me.savvy.rixa.action.Action; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +/** + * Created by savit on 6/24/2017. + */ +public class MessageResponse implements Action { + @Override + public String getName() { + return "MessageResponse"; + } + + @Override + public String getDescription() { + return "Upon trigger, responds with messages"; + } + + @Override + public void execute(GuildMessageReceivedEvent event) { + new MessageBuilder("MessageResponse action is still in development.") + .setColor(event.getMember().getColor()).queue(event.getChannel()); + } + + public void execute() {} +} diff --git a/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java b/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java index 28a8a6b..009b86d 100644 --- a/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java +++ b/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java @@ -10,6 +10,7 @@ import me.savvy.rixa.utils.MessageBuilder; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Role; +import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; import org.apache.commons.lang3.EnumUtils; @@ -22,7 +23,9 @@ import java.util.List; public class ConfigCommand implements CommandExec { private List config; + private static ConfigCommand instance; public ConfigCommand() { + instance = this; config = Arrays.asList( "%pconfig set greetings ; Set channel where greeting messages are announced!", "%pconfig set farewell ; Set channel where farewell messages are announced!", @@ -33,6 +36,7 @@ public class ConfigCommand implements CommandExec { "%pconfig joinMessage ; Set the greetings message for when a user joins the server!", "%pconfig quitMessage ; Set the quit message for when a user leaves the server!", "%pconfig joinPm ; Set the message to be private messaged when a user joins!", + "%pconfig description ; Set your server description!", "%pconfig addPerm ; Give a role permission to access a command!", "%pconfig removePerm ; Remove a role's permission to access a command!", "%pconfig enable ; Enabled a Rixa Module!", @@ -40,7 +44,6 @@ public class ConfigCommand implements CommandExec { } @Override @Command(mainCommand = "config", - aliases = {}, description = "Configure Rixa to your liking!", type = CommandType.ADMIN, channelType = ChannelType.TEXT) @@ -57,36 +60,60 @@ public class ConfigCommand implements CommandExec { try { try { page = Integer.parseInt(messages[1]); - sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()); + sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1"); + event.getMessage().delete().complete(); + new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel()); } catch(NumberFormatException ex) { - sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()); - ex.printStackTrace(); + sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1"); } } catch (IllegalArgumentException ex){ - sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()); - ex.printStackTrace(); + sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1"); + event.getMessage().delete().complete(); + new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel()); } return; }else if (messages.length < 3) { - sendHelp(event.getMember(), 0, rixaGuild.getGuildSettings().getPrefix()); + sendHelp(event.getMember(), 0, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1"); + event.getMessage().delete().complete(); + new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel()); return; } String message; if (messages[1].equalsIgnoreCase("joinmessage")) { message = getMessage(messages, 2); + if(event.getMessage().getMentionedChannels().size() > 0) { + for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) { + message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">"); + } + } rixaGuild.getGuildSettings().setJoinMessage(message); new MessageBuilder("Successfully set Join Message to\n" + message.replace("{0}", event.getMember().getUser().getName()) .replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel()); } else if (messages[1].equalsIgnoreCase("quitmessage")) { message = getMessage(messages, 2); + if(event.getMessage().getMentionedChannels().size() > 0) { + for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) { + message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">"); + } + } rixaGuild.getGuildSettings().setQuitMessage(message); new MessageBuilder("Successfully set Quit Message to\n" + message.replace("{0}", event.getMember().getUser().getName()) .replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel()); } else if (messages[1].equalsIgnoreCase("joinpm")) { message = getMessage(messages, 2); + if(event.getMessage().getMentionedChannels().size() > 0) { + for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) { + message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">"); + } + } rixaGuild.getGuildSettings().setJoinPrivateMessage(message); new MessageBuilder("Successfully set Private Join Message to\n" + message.replace("{0}", event.getMember().getUser().getName()) .replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel()); + } else if (messages[1].equalsIgnoreCase("description")) { + message = getMessage(messages, 2); + rixaGuild.getGuildSettings().setDescription(message); + new MessageBuilder("Successfully set Server Description to\n" + message.replace("{0}", event.getMember().getUser().getName()) + .replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel()); } else if (messages[1].equalsIgnoreCase("set")) { if (messages[2].equalsIgnoreCase("greetings")) { rixaGuild.getGuildSettings().setJoinMessageChannel(event.getChannel()); @@ -211,24 +238,32 @@ public class ConfigCommand implements CommandExec { new MessageBuilder("Successfully removed the permission " + perm.name() + " from the role " + role.getName() + "!").setColor(event.getMember().getColor()).queue(event.getChannel()); } else { int page = 0; - sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()); + sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1"); + event.getMessage().delete().complete(); + new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel()); } } - private void sendHelp(Member member, int page, String prefix) { + public MessageBuilder sendHelp(Member member, int page, String prefix) { int sizePerPage = 4; int maxPages = config.size() / sizePerPage + (config.size() % sizePerPage > 0 ? 1 : 0); - int from = Math.max(0, (page + 1 )* sizePerPage); + if(page < 0) { + page = 0; + } + if(page > maxPages - 2) { + page = maxPages - 3; + } + int from = Math.max(0, page * sizePerPage); int to = Math.min(config.size(), (page + 2) * sizePerPage); List configList = config.subList(from, to); MessageBuilder builder = new MessageBuilder("\u2699" + " **Config**" + "\n" + "Click the back or forward reactions to switch between pages."); configList.forEach(object -> { - builder.addField(object.split(" ; ")[0].replace("%p", prefix), object.split(" ; ")[1], true); + builder.addField(object.split(" ; ")[0].replace("%p", prefix), object.split(" ; ")[1], false); }); builder.footer("Page: (" + page + " / " + (maxPages - 2) + ")", member.getGuild().getIconUrl()); - builder.setColor(member.getColor()).sendUser(member.getUser()).setTitle("Config").addReaction("\u2B05").addReaction("\u27A1"); + return builder.setColor(member.getColor()).setTitle(String.format("Config: %s", member.getGuild().getId())); } private String getMessage(String[] messages, int argToBegin) { @@ -238,4 +273,8 @@ public class ConfigCommand implements CommandExec { } return builder.toString().trim(); } + + public static ConfigCommand getInstance() { + return instance; + } } diff --git a/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java b/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java new file mode 100644 index 0000000..1dc454f --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java @@ -0,0 +1,32 @@ +package me.savvy.rixa.commands.admin; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.CommandType; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.TextChannel; +import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.requests.restaction.InviteAction; + +/** + * Created by savit on 7/7/2017. + */ +public class InviteCommand implements CommandExec { + + @Command( + description = "Receive an invite from a server", + type = CommandType.USER, + channelType = ChannelType.TEXT, + usage = "%pinvite", mainCommand = "invite") + public void execute(GuildMessageReceivedEvent event) { + User owner = event.getGuild().getOwner().getUser(); + if(!event.getAuthor().getId().equalsIgnoreCase(owner.getId())) { + return; + } + TextChannel channel = event.getJDA().getGuildById(event.getMessage().getContent().split(" ")[1]).getTextChannels().get(0); + InviteAction inviteAction = channel.createInvite(); + owner.openPrivateChannel().complete().sendMessage( + "http://discord.gg/" + inviteAction.setMaxUses(1).complete().getCode()).queue(); + } +} diff --git a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java index 6bceef1..2e18a7d 100644 --- a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java @@ -27,7 +27,7 @@ public class HelpCommand implements CommandExec { " **Help**" + "\n" + "Click the corresponding number for more information about the command menu."; - embedBuilder.setTitle("Help", "http://rixa.io") + embedBuilder.setTitle(String.format("Help: %s", event.getGuild().getId())) .setDescription(stringBuilder) .addField("1 - General Commands", "Reveals usable commands intended for `everyone`", false) .addField("2 - Staff Commands", "Reveals usable commands intended for `staff` use only", false) diff --git a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java index ec4de04..9ef529d 100644 --- a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java @@ -5,6 +5,7 @@ import me.savvy.rixa.commands.handlers.Command; import me.savvy.rixa.commands.handlers.CommandExec; import me.savvy.rixa.commands.handlers.CommandType; import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; @@ -18,7 +19,7 @@ import java.util.concurrent.TimeUnit; */ public class InfoCommand implements CommandExec { - @Command(aliases = {""}, + @Command( description = "Receive information about Rixa", type = CommandType.USER, channelType = ChannelType.TEXT, @@ -35,18 +36,24 @@ public class InfoCommand implements CommandExec { long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24); long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60); long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60); - messageEmbed - .setTitle("Rixa Discord Bot", "http://rixa.io/") - .setDescription("Rixa is a user-friendly, multi-purpose bot that is capable of being customized to your discord server needs. " + - "Rixa is complete with a dashboard, user profile, server statistics system, and many more features such as assigning " + - "roles on user join, music module, levels, and more. Rixa was created to bring ease and simplicity to managing discord" + - " servers, it has since then grown into much more than just a bot used for moderation.") - .addField("Created", event.getJDA().getSelfUser().getCreationTime().format(formatter), true) - .addField("Bot Uptime ", "Uptime: " + day + " days " + hours + " hours " + minute + " minutes " + second + " seconds.", true) - .addField("Total Guilds", event.getJDA().getGuilds().size() + "", true) - .addField("Total Users", event.getJDA().getUsers().size() + "", true) - .addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true) - .setFooter("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl()); + int guildCount = 0; + int userCount = 0; + for(JDA jda: Rixa.getInstance().getShardsList()) { + guildCount += jda.getGuilds().size(); + userCount += jda.getUsers().size(); + } + messageEmbed + .setTitle("Rixa Discord Bot", "http://rixa.io/") + .setDescription("Rixa is a user-friendly, multi-purpose bot currently in development which is capable of being customized to your Discord server needs. " + + "Rixa is complete with a dashboard, user profile, server statistics system, and many more features such as assigning roles on user join, music module, " + + "levels, and more. Rixa was created to bring ease and simplicity to managing Discord servers, and has since grown into much more than just a bot used for " + + "moderation.") + .addField("Created", event.getJDA().getSelfUser().getCreationTime().format(formatter), true) + .addField("Bot Uptime ", "Uptime: " + day + " days " + hours + " hours " + minute + " minutes " + second + " seconds.", true) + .addField("Total Guilds", String.valueOf(guildCount), true) + .addField("Total Users", String.valueOf(userCount), true) + .addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true) + .setFooter("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl()); event.getChannel().sendMessage(messageEmbed.build()).queue(); } } diff --git a/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java b/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java index 8916eb7..a7f367a 100644 --- a/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java @@ -59,8 +59,7 @@ public class MusicCommand implements CommandExec { musicManagers = new HashMap<>(); } - @Command(aliases = {}, - description = "Play music in your voice chat.", + @Command(description = "Play music in your voice chat.", type = CommandType.USER, channelType = ChannelType.TEXT, usage = "%pmusic", mainCommand = "music") @@ -73,7 +72,13 @@ public class MusicCommand implements CommandExec { } if(rixaGuild.getMusicModule().isRoleRequired()) { Role role = event.getGuild().getRoleById(rixaGuild.getMusicModule().getMusicRole()); - if(!event.getMember().getRoles().contains(role)) { + boolean hasRole = false; + for (Role roleItem : event.getMember().getRoles()) { + if (roleItem.getId().equalsIgnoreCase(role.getId())) { + hasRole = true; + } + } + if(!hasRole) { new MessageBuilder("You must have the " + role.getName() + " role to use the music module.").setColor(event.getMember().getColor()).queue(event.getChannel()); return; } @@ -232,7 +237,7 @@ public class MusicCommand implements CommandExec { } } } - } else if(message[1].equalsIgnoreCase("play") || message[1].equalsIgnoreCase("pplay")) { + } else if(message[1].equalsIgnoreCase("play") || message[1].equalsIgnoreCase("playlist")) { loadAndPlay(mng, event.getChannel(), message[2], false); } else if(message[1].equalsIgnoreCase("vol") || message[1].equalsIgnoreCase("volume")) { try { @@ -254,7 +259,6 @@ public class MusicCommand implements CommandExec { String msg = "Adding to queue: " + track.getInfo().title; mng.scheduler.queue(track); new MessageBuilder(msg).setColor(Color.decode("#4CC276")).queue(channel); - channel.sendMessage(msg).queue(); } @Override diff --git a/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java index a702c08..a7bbd50 100644 --- a/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java @@ -35,6 +35,7 @@ public class ServerInfoCommand implements CommandExec { .addField("Voice Channels", String.valueOf(event.getGuild().getVoiceChannels().size()), true) .addField("Roles", String.valueOf(event.getGuild().getRoles().size()), true) .addField("Owner", owner.getName() + "#" + owner.getDiscriminator(), true) + .addField("Enlisted", String.valueOf(rixaGuild.getGuildSettings().isEnlisted()), true) .setThumbnail(event.getGuild().getIconUrl()) .setFooter("ServerID: " + event.getGuild().getId(), event.getGuild().getIconUrl()); event.getChannel().sendMessage(messageEmbed.build()).queue(); diff --git a/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java new file mode 100644 index 0000000..cd9d69e --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java @@ -0,0 +1,56 @@ +package me.savvy.rixa.commands.general; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.utils.MessageBuilder; +import me.savvy.rixa.utils.UrbanDictionary; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +/** + * Created by savit on 6/24/2017. + */ +public class UrbanDictionaryCommand implements CommandExec { + + + @Override + @Command(mainCommand = "urbandictionary", + aliases = {"ud"}, + description = "Search urban dictionary for a command!", + channelType = ChannelType.TEXT) + public void execute(GuildMessageReceivedEvent event) { + String[] message = event.getMessage().getContent().split(" "); + String search = getMessage(message, 1); + UrbanDictionary ud = null; + try { + ud = new UrbanDictionary(URLEncoder.encode(search, "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + if(ud == null) { + new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel()); + } + try { + if(!ud.search()) { + new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + } catch (IOException e) { + new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel()); + } + new MessageBuilder(ud.getDefinition()).setTitle(String.format("Definition: %s", ud.getWordToSearch())).setColor(event.getMember().getColor()) + .addThumbnail("https://s-media-cache-ak0.pinimg.com/originals/f2/aa/37/f2aa3712516cfd0cf6f215301d87a7c2.jpg").queue(event.getChannel()); + } + + private String getMessage(String[] messages, int argToBegin) { + StringBuilder builder = new StringBuilder(); + for(int i = argToBegin; i < messages.length; i++) { + builder.append(messages[i]).append(" "); + } + return builder.toString().trim(); + } +} diff --git a/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java b/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java index b41a135..903f942 100644 --- a/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java +++ b/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java @@ -22,7 +22,6 @@ import java.util.Collections; public class MuteCommand implements CommandExec { @Override @Command(mainCommand = "mute", - aliases = "", description = "Mute a member.", type = CommandType.MOD, channelType = ChannelType.TEXT) diff --git a/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java b/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java index 698ab3f..a61f129 100644 --- a/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java +++ b/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java @@ -117,7 +117,6 @@ public class DatabaseManager { return Result.FALSE; } } catch (SQLException e) { - e.printStackTrace(); return Result.ERROR; } } diff --git a/src/main/java/me/savvy/rixa/events/MemberEvent.java b/src/main/java/me/savvy/rixa/events/MemberEvent.java new file mode 100644 index 0000000..295c028 --- /dev/null +++ b/src/main/java/me/savvy/rixa/events/MemberEvent.java @@ -0,0 +1,60 @@ +package me.savvy.rixa.events; + +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Role; +import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent; +import net.dv8tion.jda.core.exceptions.PermissionException; +import net.dv8tion.jda.core.hooks.SubscribeEvent; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by savit on 6/18/2017. + */ +public class MemberEvent { + + public static Map joinMembers = new HashMap<>(); + + @SubscribeEvent + public void onMember(GuildMemberJoinEvent event) { + RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild()); + if(rixaGuild.getGuildSettings().getJoinMessageChannel() != null) { + try { + new MessageBuilder(rixaGuild.getGuildSettings().getJoinMessage() + .replace("{0}", event.getMember().getAsMention()).replace("{1}", event.getGuild().getName()).replace + ("{2}", String.valueOf(event.getGuild().getMembers().size()))).setColor + (event.getMember().getColor()).queue(rixaGuild.getGuildSettings().getJoinMessageChannel()); + } catch(PermissionException ex) { + new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName())) + .setColor(event.getMember().getColor()).send(rixaGuild.getGuild().getOwner().getUser()); + return; + } + } + + + if(rixaGuild.getGuildSettings().isJoinVerification()) { + joinMembers.put(event.getMember().getUser().getId(), event.getGuild()); + } else if(!rixaGuild.getGuildSettings().getDefaultRole().equalsIgnoreCase("default_value")) { + try { + Role role = event.getGuild().getRoleById(rixaGuild.getGuildSettings().getDefaultRole()); + event.getGuild().getController().addRolesToMember(event.getMember(), Collections.singleton(role)).complete(); + } catch(PermissionException ex) { + new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName())) + .setColor(event.getMember().getColor()).send(rixaGuild.getGuild().getOwner().getUser()); + return; + } + } + if(rixaGuild.getGuildSettings().getJoinPrivateMessage().equalsIgnoreCase("default")) { + return; + } + String message = rixaGuild.getGuildSettings().getJoinPrivateMessage().replace("{0}", event.getMember().getAsMention()) + .replace("{1}", event.getGuild().getName()).replace("{2}", String.valueOf + (event.getGuild().getMembers().size())); + new MessageBuilder(message).setColor(event.getMember().getColor()).send(event.getMember().getUser()); + } +} diff --git a/src/main/java/me/savvy/rixa/events/MessageEvent.java b/src/main/java/me/savvy/rixa/events/MessageEvent.java index 2f5e563..dfbfeb1 100644 --- a/src/main/java/me/savvy/rixa/events/MessageEvent.java +++ b/src/main/java/me/savvy/rixa/events/MessageEvent.java @@ -1,19 +1,28 @@ package me.savvy.rixa.events; import com.mysql.jdbc.StringUtils; +import me.savvy.rixa.Rixa; import me.savvy.rixa.commands.handlers.CommandHandler; import me.savvy.rixa.commands.handlers.CommandRegistrar; import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.RixaManager; import me.savvy.rixa.modules.reactions.handlers.ReactRegistrar; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.Permission; import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.MessageEmbed; +import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent; import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.core.exceptions.PermissionException; import net.dv8tion.jda.core.hooks.SubscribeEvent; +import java.awt.*; import java.lang.reflect.Method; +import java.util.Collections; /** * Created by Timber on 5/7/2017. @@ -35,12 +44,57 @@ public class MessageEvent { CommandRegistrar cmd = CommandHandler.get(splitContent[0]); Method m = cmd.getMethod(); try { + Rixa.getInstance().getLogger().info("Invoking: " + cmd.getCommandAnnotation().mainCommand()); m.invoke(cmd.getExecutor(), event); } catch (Exception e) { e.printStackTrace(); } } + @SubscribeEvent + public void onMemberJoin(PrivateMessageReceivedEvent event) { + RixaGuild rixaGuild; + if (MemberEvent.joinMembers.containsKey(event.getAuthor().getId())) { + rixaGuild = RixaManager.getGuild(MemberEvent.joinMembers.get(event.getAuthor().getId())); + if (event.getMessage().getContent().equalsIgnoreCase("I agree") || + event.getMessage().getContent().equalsIgnoreCase("I accept") + || event.getMessage().getContent().equalsIgnoreCase("Yes")) { + MemberEvent.joinMembers.remove(event.getAuthor().getId()); + if (!rixaGuild.getGuildSettings().getDefaultRole().equalsIgnoreCase("default_value")) { + try { + rixaGuild.getGuild().getController().addRolesToMember(rixaGuild.getGuild() + .getMember(event.getAuthor()), Collections.singleton(rixaGuild.getGuild().getRoleById(rixaGuild.getGuildSettings().getDefaultRole()))).complete(); + new MessageBuilder(String.format("You have been promoted on %s!", rixaGuild.getGuild().getName())) + .setColor(rixaGuild.getGuild().getMember(event.getAuthor()).getColor()).send(event.getAuthor()); + } catch(PermissionException ex) { + new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName())) + .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser()); + } + } + } else if (event.getMessage().getContent().equalsIgnoreCase("I disagree") || + event.getMessage().getContent().equalsIgnoreCase("I deny") || + event.getMessage().getContent().equalsIgnoreCase("No")) { + try { + new MessageBuilder(String.format("You have been removed from %s because you did not agree to the terms!", rixaGuild.getGuild().getName())) + .setColor(Color.RED).send(event.getAuthor()); + MemberEvent.joinMembers.remove(event.getAuthor().getId()); + rixaGuild.getGuild().getController().kick(rixaGuild.getGuild().getMember(event.getAuthor())).complete(); + } catch (PermissionException ex) { + if(ex.getPermission() == Permission.KICK_MEMBERS) { + new MessageBuilder(String.format("I do not have permission to kick %s from %s", event.getAuthor().getName(), rixaGuild.getGuild().getName())) + .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser()); + } else { + new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName())) + .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser()); + } + } + } + } else { + if(!event.getAuthor().isBot()) + new MessageBuilder("Private messages are currently disabled!").setColor(Color.RED).send(event.getAuthor()); + } + } + @SubscribeEvent public void onReact(MessageReactionAddEvent event) { Message message = event.getChannel().getMessageById(event.getMessageId()).complete(); diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java index 99dde46..6e6a814 100644 --- a/src/main/java/me/savvy/rixa/guild/RixaGuild.java +++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java @@ -3,8 +3,10 @@ package me.savvy.rixa.guild; import me.savvy.rixa.Rixa; import me.savvy.rixa.commands.handlers.RixaPermission; import me.savvy.rixa.data.database.sql.DatabaseManager; +import me.savvy.rixa.enums.Result; import me.savvy.rixa.guild.management.GuildSettings; import me.savvy.rixa.modules.music.MusicModule; +import me.savvy.rixa.modules.twitter.TwitterModule; import net.dv8tion.jda.core.entities.*; import java.sql.PreparedStatement; @@ -22,6 +24,7 @@ public class RixaGuild { private DatabaseManager db; private GuildSettings guildSettings; private MusicModule musicModule; + private TwitterModule twitterModule; private List mutedMembers = new ArrayList<>(); public RixaGuild(Guild guild) { @@ -32,7 +35,13 @@ public class RixaGuild { } private void load() { - if(check()) return; + if(!(checkExists())) { + Rixa.getInstance().getDbManager() + .insert("INSERT INTO `core` (`guild_id`, `guild_name`, `description`, `keywords`, `icon`) VALUES ('%id%', '%name%', 'Description not set.', 'No Keywords Found.', '%icon%')" + .replace("%id%", guild.getId()) + .replace("%name%", guild.getName().replace("'", "\\'")) + .replace("%icon%", guild.getIconId())); + } setGuildSettings(new GuildSettings(this.guild)); RixaManager.addGuild(this); } @@ -45,11 +54,9 @@ public class RixaGuild { this.guildSettings = guildSettings; } - /** - * TODO: Check if Guild exists in database if not create new instance; - */ - public boolean check() { - return guildSettings == null; + private boolean checkExists() { + Result r = Rixa.getInstance().getDbManager().checkExists("SELECT `guild_name` FROM `core` WHERE `guild_id` = '" + guild.getId() + "';"); + return r == Result.TRUE; } public Guild getGuild() { @@ -100,6 +107,7 @@ public class RixaGuild { ps.setBoolean(1, value); ps.setString(2, guild.getId()); ps.setString(3, role.getId()); + ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } @@ -136,4 +144,12 @@ public class RixaGuild { public void setMusicModule(MusicModule musicModule) { this.musicModule = musicModule; } + + public TwitterModule getTwitterModule() { + return twitterModule; + } + + public void setTwitterModule(TwitterModule twitterModule) { + this.twitterModule = twitterModule; + } } diff --git a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java index 2374b90..446e149 100644 --- a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java +++ b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java @@ -1,6 +1,7 @@ package me.savvy.rixa.guild.management; import me.savvy.rixa.Rixa; +import me.savvy.rixa.enums.Result; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.TextChannel; @@ -28,19 +29,40 @@ public class GuildSettings { } private void load() throws SQLException { + if(!checkExists()) { + Rixa.getInstance().getDbManager().insert("INSERT INTO `settings` (`guild_id`, `log_enabled`, `log_channel`, `joinMessage`, `quitMessage`, `greetings`, `farewell`," + + " `prefix`, `joinPm`, `joinVerification`, `defaultRole`, `muteRole`)" + + " VALUES ('" + guild.getId() + "', '0', 'default_value', 'default_value', 'default_value', 'default_value', 'default_value', '/'," + + " 'default', '0', 'default_value', 'default_value');"); + return; + } PreparedStatement ps = Rixa.getInstance().getDbManager() .getConnection().prepareStatement("SELECT * FROM `settings` WHERE `guild_id` = ?"); ps.setString(1, guild.getId()); ResultSet set = Rixa.getInstance().getDbManager().getObject(ps); - setPrefix(set.getString("prefix")); - setDefaultRole(set.getString("defaultRole")); - setJoinMessage(set.getString("joinMessage")); - setQuitMessage(set.getString("quitMessage")); - setJoinPrivateMessage(set.getString("joinPM")); - setMuteRole(set.getString("muteRole")); - setJoinVerification(set.getBoolean("joinVerification")); - setDescription((String)Rixa.getInstance().getData().get("guild_id", guild.getId(), "description", "core")); - setEnlisted((boolean) Rixa.getInstance().getData().get("guild_id", guild.getId(), "enlisted", "core")); + this.prefix = (set.getString("prefix")); + this.defaultRole = (set.getString("defaultRole")); + this.joinMessage = (set.getString("joinMessage")); + this.quitMessage = (set.getString("quitMessage")); + this.joinPrivateMessage = (set.getString("joinPM")); + this.muteRole = (set.getString("muteRole")); + this.joinVerification = (set.getBoolean("joinVerification")); + if(!set.getString("greetings").equalsIgnoreCase("default_value")) { + joinMessageChannel = guild.getTextChannelById(set.getString("greetings")); + } + if(!set.getString("farewell").equalsIgnoreCase("default_value")) { + quitMessageChannel = guild.getTextChannelById(set.getString("farewell")); + } + ps = Rixa.getInstance().getDbManager() + .getConnection().prepareStatement("SELECT * FROM `core` WHERE `guild_id` = ?"); + ps.setString(1, guild.getId()); + set = Rixa.getInstance().getDbManager().getObject(ps); + this.description = (set.getString("description")); + this.enlisted = (set.getBoolean("enlisted")); + } + + private boolean checkExists() { + return Rixa.getInstance().getDbManager().checkExists("SELECT `guild_id` FROM `settings` WHERE `guild_id` = '" + guild.getId() + "'") == Result.TRUE; } public void unload() { @@ -57,6 +79,7 @@ public class GuildSettings { public void setJoinMessage(String joinMessage) { this.joinMessage = joinMessage; + Rixa.getInstance().getData().update("settings", "joinMessage", "guild_id", joinMessage, guild.getId()); } public String getQuitMessage() { @@ -65,6 +88,7 @@ public class GuildSettings { public void setQuitMessage(String quitMessage) { this.quitMessage = quitMessage; + Rixa.getInstance().getData().update("settings", "quitMessage", "guild_id", quitMessage, guild.getId()); } public String getJoinPrivateMessage() { @@ -73,6 +97,7 @@ public class GuildSettings { public void setJoinPrivateMessage(String joinPrivateMessage) { this.joinPrivateMessage = joinPrivateMessage; + Rixa.getInstance().getData().update("settings", "joinPM", "guild_id", joinPrivateMessage, guild.getId()); } public TextChannel getJoinMessageChannel() { @@ -81,6 +106,7 @@ public class GuildSettings { public void setJoinMessageChannel(TextChannel joinMessageChannel) { this.joinMessageChannel = joinMessageChannel; + Rixa.getInstance().getData().update("settings", "greetings", "guild_id", joinMessageChannel.getId(), guild.getId()); } public TextChannel getQuitMessageChannel() { @@ -89,6 +115,7 @@ public class GuildSettings { public void setQuitMessageChannel(TextChannel quitMessageChannel) { this.quitMessageChannel = quitMessageChannel; + Rixa.getInstance().getData().update("settings", "farewell", "guild_id", quitMessageChannel.getId(), guild.getId()); } public String getDefaultRole() { @@ -97,6 +124,7 @@ public class GuildSettings { public void setDefaultRole(String defaultRole) { this.defaultRole = defaultRole; + Rixa.getInstance().getData().update("settings", "defaultRole", "guild_id", defaultRole, guild.getId()); } public String getPrefix() { @@ -105,6 +133,7 @@ public class GuildSettings { public void setPrefix(String prefix) { this.prefix = prefix; + Rixa.getInstance().getData().update("settings", "prefix", "guild_id", prefix, guild.getId()); } public String getDescription() { @@ -113,6 +142,7 @@ public class GuildSettings { public void setDescription(String description) { this.description = description; + Rixa.getInstance().getData().update("core", "description", "guild_id", description, guild.getId()); } public boolean isEnlisted() { @@ -121,6 +151,7 @@ public class GuildSettings { public void setEnlisted(boolean enlisted) { this.enlisted = enlisted; + Rixa.getInstance().getData().update("core", "enlisted", "guild_id", enlisted, guild.getId()); } public String getMuteRole() { @@ -129,6 +160,7 @@ public class GuildSettings { public void setMuteRole(String muteRole) { this.muteRole = muteRole; + Rixa.getInstance().getData().update("settings", "muteRole", "guild_id", muteRole, guild.getId()); } public boolean isJoinVerification() { @@ -137,5 +169,6 @@ public class GuildSettings { public void setJoinVerification(boolean joinVerification) { this.joinVerification = joinVerification; + Rixa.getInstance().getData().update("settings", "joinVerification", "guild_id", joinVerification, guild.getId()); } } diff --git a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java index 2d86855..ab6f895 100644 --- a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java +++ b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java @@ -28,11 +28,9 @@ public class MusicModule implements RixaModule { } public void load() { - System.out.println("Testing " + guild.getName()); if(!checkExists()) { db.insert("INSERT INTO `music` (`guild_id`, `music_role`, `enabled`)" + " VALUES ('" + guild.getId() + "', 'default_value', '0');"); - return; } try { PreparedStatement ps = db.getConnection().prepareStatement @@ -67,7 +65,7 @@ public class MusicModule implements RixaModule { } public boolean isRoleRequired() { - return (musicRole.equalsIgnoreCase("default_value") && guild.getRolesByName(musicRole, true).size() > 0); + return (!musicRole.equalsIgnoreCase("default_value")); } public String getMusicRole() { @@ -84,6 +82,8 @@ public class MusicModule implements RixaModule { } public boolean checkExists() { - return Rixa.getInstance().getData().exists("SELECT `enabled` FROM `music` WHERE `guild_id` = '" + guild.getId() + "'") == Result.TRUE; + Result r = Rixa.getInstance().getDbManager().checkExists("SELECT `guild_id` FROM `music` WHERE `guild_id` = '" + + guild.getId() + "';"); + return r == Result.TRUE; } } diff --git a/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java b/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java index ddcc3ac..a120f7c 100644 --- a/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java +++ b/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java @@ -1,8 +1,19 @@ package me.savvy.rixa.modules.reactions.react; +import me.savvy.rixa.commands.admin.ConfigCommand; +import me.savvy.rixa.commands.handlers.CommandHandler; +import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; import me.savvy.rixa.modules.reactions.handlers.React; import me.savvy.rixa.modules.reactions.handlers.ReactHandle; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.core.exceptions.ErrorResponseException; /** * Created by Timber on 6/9/2017. @@ -12,5 +23,35 @@ public class ConfigReaction implements React { @Override @ReactHandle(title = "Config", description = "Configuration Menu for Rixa") public void reactionTrigger(MessageReactionAddEvent event) { + if (event.getChannel().getType() != ChannelType.PRIVATE + || event.getUser().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) { + return; + } + // "Page: (" + page + // + "/ " + (maxPages - 2) + ")" + Message message = event.getChannel().getMessageById(event.getMessageId()).complete(); + String title = message.getEmbeds().get(0).getTitle().split(": ")[1]; + Guild guild = event.getJDA().getGuildById(title); + if(guild == null) { + return; + } + RixaGuild rixaGuild = RixaManager.getGuild(guild); + String prefix = rixaGuild.getGuildSettings().getPrefix(); + MessageBuilder builder = null; + int page = 500; + switch (event.getReaction().getEmote().getName()) { + case "\u2B05":// previous + page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split(" /")[0].replace("Page: (", "")) - 1; + break; + case "\u27A1":// next + page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split(" /")[0].replace("Page: (", "")) + 1; + break; + } + System.out.println(page); + if(page != 500) { + builder = ConfigCommand.getInstance().sendHelp + (rixaGuild.getGuild().getMember(event.getUser()), page, prefix); + message.editMessage(builder.getBuilder().build()).queue(); + } } } \ No newline at end of file diff --git a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java index 913dab5..57fa86f 100644 --- a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java +++ b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java @@ -2,6 +2,7 @@ package me.savvy.rixa.modules.reactions.react; import me.savvy.rixa.commands.handlers.CommandHandler; import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.RixaManager; import me.savvy.rixa.modules.reactions.handlers.React; import me.savvy.rixa.modules.reactions.handlers.ReactHandle; @@ -24,8 +25,9 @@ public class HelpReaction implements React { return; } Message message = event.getChannel().getMessageById(event.getMessageId()).complete(); - String prefix = (event.getChannel().getType() != ChannelType.PRIVATE) ? - RixaManager.getGuild(event.getGuild()).getGuildSettings().getPrefix() : "/"; + String title = message.getEmbeds().get(0).getTitle().split(": ")[1]; + RixaGuild rixaGuild = RixaManager.getGuild(event.getJDA().getGuildById(title)); + String prefix = rixaGuild.getGuildSettings().getPrefix(); EmbedBuilder embedBuilder; try { switch(event.getReaction().getEmote().getName()) { @@ -40,7 +42,7 @@ public class HelpReaction implements React { " **General Commands Help**" + "\n" + "Click a number below for information about other commands."; - embedBuilder.setTitle("Help", "http://rixa.io"); + embedBuilder.setTitle(String.format("Help: %s", title)); embedBuilder.setDescription(stringBuilder); CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.USER) .forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommandAnnotation().mainCommand(), @@ -53,11 +55,11 @@ public class HelpReaction implements React { " **Staff Commands Help**" + "\n" + "Click a number below for information about other commands."; - embedBuilder.setTitle("Help", "http://rixa.io"); + embedBuilder.setTitle(String.format("Help: %s", title)); embedBuilder.setDescription(stringBuilder); CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.ADMIN || cmd.getCommandAnnotation().type() == CommandType.MOD) - .forEach(cmd -> embedBuilder.addField(prefix, cmd.getCommandAnnotation().description(), false)); + .forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommandAnnotation().mainCommand(), cmd.getCommandAnnotation().description(), false)); message.editMessage(embedBuilder.build()).queue(); break; case "\u0033\u20E3": // three emoji @@ -66,14 +68,14 @@ public class HelpReaction implements React { " **Music Commands Help**" + "\n" + "Click a number below for information about other commands."; - embedBuilder.setTitle("Help", "http://rixa.io"); + embedBuilder.setTitle(String.format("Help: %s", title)); embedBuilder.setDescription(stringBuilder); embedBuilder.addField(prefix + "music join [name]", "Joins a voice channel that has the provided name", false) .addField(prefix + "music join [id]", "Joins a voice channel based on the provided id.", false) .addField(prefix + "music leave", "Leaves the voice channel that the bot is currently in.", false) .addField(prefix + "music play", "Plays songs from the current queue. Starts playing again if it was previously paused", false) .addField(prefix + "music play [url]", "Adds a new song to the queue and starts playing if it wasn't playing already", false) - .addField(prefix + "music pplay", "Adds a playlist to the queue and starts playing if not already playing", false) + .addField(prefix + "music playlist", "Adds a playlist to the queue and starts playing if not already playing", false) .addField(prefix + "music pause", "Pauses audio playback", false) .addField(prefix + "music stop", "Completely stops audio playback, skipping the current song.", false) .addField(prefix + "music skip", "Skips the current song, automatically starting the next", false) diff --git a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java new file mode 100644 index 0000000..c391760 --- /dev/null +++ b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java @@ -0,0 +1,80 @@ +package me.savvy.rixa.modules.twitter; + +import me.savvy.rixa.guild.RixaGuild; +import twitter4j.*; +import twitter4j.conf.ConfigurationBuilder; + +/** + * Created by savit on 7/9/2017. + */ +public class TwitterModule { + + private final TwitterStream twitterStream; + private ConfigurationBuilder configurationBuilder; + private Twitter twitter; + private TwitterFactory twitterFactory; + private String consumerKey, consumerSecret, accessToken, accessTokenSecret; + + public TwitterModule(RixaGuild rixaGuild, String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) { + this.consumerKey = consumerKey; + this.consumerSecret = consumerSecret; + this.accessToken = accessToken; + this.accessTokenSecret = accessTokenSecret; + configurationBuilder = new ConfigurationBuilder() + .setOAuthConsumerKey(getConsumerKey()) + .setOAuthConsumerSecret(getConsumerSecret()) + .setOAuthAccessToken(getAccessToken()) + .setOAuthAccessTokenSecret(getAccessTokenSecret()); + twitterFactory = new TwitterFactory(configurationBuilder.build()); + twitterStream = new TwitterStreamFactory().getInstance(); + twitter = twitterFactory.getInstance(); + } + + public ConfigurationBuilder getConfigurationBuilder() { + return configurationBuilder; + } + + public TwitterFactory getTwitterFactory() { + return twitterFactory; + } + + public Twitter getTwitter() { + return twitter; + } + + public String getConsumerKey() { + return consumerKey; + } + + public void setConsumerKey(String consumerKey) { + this.consumerKey = consumerKey; + } + + public String getConsumerSecret() { + return consumerSecret; + } + + public void setConsumerSecret(String consumerSecret) { + this.consumerSecret = consumerSecret; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getAccessTokenSecret() { + return accessTokenSecret; + } + + public void setAccessTokenSecret(String accessTokenSecret) { + this.accessTokenSecret = accessTokenSecret; + } + + public TwitterStream getTwitterStream() { + return twitterStream; + } +} diff --git a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java index 3cd8703..0ffbb75 100644 --- a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java +++ b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java @@ -23,7 +23,7 @@ public class MessageBuilder { } public MessageBuilder setTitle(String title) { - setTitle(title, "http://rixa.io/"); + builder.setTitle(title); return this; } @@ -37,6 +37,11 @@ public class MessageBuilder { return this; } + public MessageBuilder addThumbnail(String url) { + builder.setThumbnail(url); + return this; + } + public EmbedBuilder getBuilder() { return builder; } diff --git a/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java b/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java new file mode 100644 index 0000000..e11f88e --- /dev/null +++ b/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java @@ -0,0 +1,57 @@ +package me.savvy.rixa.utils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Scanner; + +/** + * Created by savit on 6/24/2017. + */ +public class UrbanDictionary { + + private String wordToSearch; + private String definition; + private String permaLink; + public UrbanDictionary(String wordToSearch) { + this.wordToSearch = wordToSearch; + } + + public boolean search() throws IOException { + URL url = new URL("http://api.urbandictionary.com/v0/define?term=" + wordToSearch); + InputStream in = url.openStream(); + Scanner scan = new Scanner(in); + String jsonString = ""; + while(scan.hasNext()){ + jsonString += scan.next() + " "; + } + scan.close(); + try { + JSONObject obj = new JSONObject(jsonString.trim()); + JSONArray array = obj.getJSONArray("list"); + JSONObject newObj = array.getJSONObject(0); + this.wordToSearch = newObj.getString("word"); + this.permaLink = newObj.getString("permalink"); + this.definition = newObj.getString("definition"); + return true; + } catch(JSONException ex) { + return false; + } + } + + public String getPermaLink() { + return permaLink; + } + + public String getWordToSearch() { + return wordToSearch; + } + + public String getDefinition() { + return definition; + } +} diff --git a/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java new file mode 100644 index 0000000..8af2cf0 --- /dev/null +++ b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java @@ -0,0 +1,7 @@ +package me.savvy.rixa.utils; + +/** + * Created by savit on 7/11/2017. + */ +public class YoutubeSearch { +}