From 42569e4d8c0c256da7a9908e9ae611d4d847076b Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Tue, 21 Sep 2021 16:09:02 -0400 Subject: [PATCH] build for me --- .../dependencies-accessors.lock | Bin 0 -> 38 bytes .../7.1/dependencies-accessors/gc.properties | 0 .../7.1/executionHistory/executionHistory.bin | Bin 0 -> 34458 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 38 bytes .gradle/7.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/7.1/fileHashes/fileHashes.bin | Bin 0 -> 21047 bytes .gradle/7.1/fileHashes/fileHashes.lock | Bin 0 -> 38 bytes .gradle/7.1/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 38 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18983 bytes .gradle/checksums/checksums.lock | Bin 0 -> 38 bytes .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 6 + .idea/gradle.xml | 17 ++ .idea/jarRepositories.xml | 35 ++++ .idea/misc.xml | 10 + .idea/runConfigurations.xml | 10 + .idea/vcs.xml | 6 + build.gradle | 44 +++++ build/resources/main/logback.xml | 12 ++ .../compileJava/previous-compilation-data.bin | Bin 0 -> 36765 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ settings.gradle | 1 + src/main/java/tech/nevets/nevetsbot/Bot.java | 38 ++++ .../java/tech/nevets/nevetsbot/Config.java | 50 +++++ .../java/tech/nevets/nevetsbot/Listener.java | 36 ++++ .../nevetsbot/commands/CommandContext.java | 31 +++ .../nevetsbot/commands/CommandManager.java | 84 ++++++++ .../nevets/nevetsbot/commands/HelpCmd.java | 65 ++++++ .../nevets/nevetsbot/commands/ICommand.java | 16 ++ .../nevetsbot/commands/admin/KickCmd.java | 61 ++++++ .../nevetsbot/commands/admin/PingCmd.java | 27 +++ .../nevetsbot/commands/games/CoinFlipCmd.java | 41 ++++ .../nevetsbot/commands/games/DadJokeCmd.java | 35 ++++ .../nevetsbot/commands/games/DiceCmd.java | 30 +++ .../nevetsbot/commands/music/JoinCmd.java | 48 +++++ .../nevetsbot/commands/pics/CatCmd.java | 32 +++ .../nevetsbot/commands/pics/DogCmd.java | 32 +++ .../nevetsbot/commands/pics/FoxCmd.java | 32 +++ .../nevetsbot/commands/pics/PandaCmd.java | 32 +++ .../nevetsbot/util/httprequests/DadJoke.java | 25 +++ .../util/httprequests/temp/CatRequest.java | 40 ++++ .../util/httprequests/temp/DogRequest.java | 40 ++++ .../util/httprequests/temp/FoxRequest.java | 40 ++++ .../util/httprequests/temp/PandaRequest.java | 40 ++++ src/main/resources/logback.xml | 12 ++ 51 files changed, 1318 insertions(+) create mode 100644 .gradle/7.1/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/7.1/dependencies-accessors/gc.properties create mode 100644 .gradle/7.1/executionHistory/executionHistory.bin create mode 100644 .gradle/7.1/executionHistory/executionHistory.lock create mode 100644 .gradle/7.1/fileChanges/last-build.bin create mode 100644 .gradle/7.1/fileHashes/fileHashes.bin create mode 100644 .gradle/7.1/fileHashes/fileHashes.lock create mode 100644 .gradle/7.1/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/checksums/checksums.lock create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 build.gradle create mode 100644 build/resources/main/logback.xml create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/tech/nevets/nevetsbot/Bot.java create mode 100644 src/main/java/tech/nevets/nevetsbot/Config.java create mode 100644 src/main/java/tech/nevets/nevetsbot/Listener.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/CommandContext.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/CommandManager.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/HelpCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/ICommand.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/admin/KickCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/admin/PingCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/games/CoinFlipCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/games/DadJokeCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/games/DiceCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/music/JoinCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/pics/CatCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/pics/DogCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/pics/FoxCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/commands/pics/PandaCmd.java create mode 100644 src/main/java/tech/nevets/nevetsbot/util/httprequests/DadJoke.java create mode 100644 src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/CatRequest.java create mode 100644 src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/DogRequest.java create mode 100644 src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/FoxRequest.java create mode 100644 src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/PandaRequest.java create mode 100644 src/main/resources/logback.xml diff --git a/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..85dc99c9c22d2d9f73f00a51437e89f3359338b3 GIT binary patch literal 38 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 literal 0 HcmV?d00001 diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..8a6804dc1c53ab9af66e6ad8a7209cb92007d200 GIT binary patch literal 38 pcmZRc=)oo#W52Qz)u( zlW?K@y(sgVz`>|~BSJorji69;rHLo{iTHFr4cYq@!gZ|xr=3UqWP|KY zx!-t2fHN;3e){;wEB-w(08{9mh@X=i-{Tn>UIAXPe>}wx_j{DFKFa}aw_}Qzo>fSV z|M^G2ovaYgA9CRy?(y>hoF<7lCvqbCqqc`7-2O7+xBQvX#V>vP0k_RT{Pt!^8*TI5 zR{>|PMZDPQLRHmvg&N445HC5CC9O8HZx7(~5yZ>#wXT$M)+qvRmp;WmeTtWG-{c8- z9pV+^nJuI2LyrKr|A6=-gTM}UyOJB^-iSYm^fzK@>=^>wDI9UGXTa)&^zvlDX}b{b zJf1^~TD@2va9az+e>;`VK6<=00C2|w#CuE&{dsQPw;@+S{53CEJg{~}FMR(-#QUC$ z<#DK9dVtf*5$~6eKK{yMSqR|vDTx1Z?`qWIj8)$7{i6{dQwvTjij7zZISujmM`VJN zBhn#vxQX}&pG)Cu&95`T_O_vjkIy$BQ1aYi1~?-g@sEkI5k?(*YXPTgAwKbo{dmxe z@o2yu<|Fn^2b{4OaoHoj}W*@8s z+_n|*(oZJ#9Mw}?mmTXo6jErW9ax7R^@|72r5XZ+w%!0o7rqeluwlnY+NYg_;q zzy)vtTmToq1#kge02jaoZ~;-Ge{BeRw(dd4mG2DiyzCHx2AsQ0CFi3H7?)G- z=QV{;ELK-U_i>+CEae-f$H@047O8P!C15yb)Z~_g6rYY7DcX1}V}RIzI1ZgThsf=T zdD7nzD*;1fr{zU2ui@s3Z%=UA^x0z2$mRN8;@xPHUkz_4poW?>&*sw9xNN$|(W zgvJ_SL-n(6oWp}d?`e^1iXIgmBxd&Wjc{PhoaTJoa)>!uWps7R1LlmO=vke_+!NPN_l%Y75Q~FG%9jntol8r<5;K!+u2G*fEixz082>n8zHH<^ z&KX&sYTe!CSR<3ta`p@~;5UjoD7;tm&6|04+4;-2-@P3$)7WDa8gIcE;^d>ikspX% z5UNJgzTmg^%;wF{bBP)K{JnY)4AH&9hC#KQ&h4K9d|GGkWhR%Y5%;?A4R~(_l_qQ? zWX)O{QDS)U^3u?xrq1DJXjFnR#K^li1oo<9%w6)cT<*zR!GV5BWCaUV5OeX~8C7NEizn^AjCU^qVun+(vAFcwt>YTtkRfmg&~OP$a(hf=7PKJ;i|Y zc2Y;J@l@F#K;tPeB$f-0!LkYZ=30Vv z7^l9~a_qi6aqS@LnilYYp>S5%5YZVucQ>@Je{^S_X3ugh;+KYRqya-@p|J7xkIJXr zx!Z%4awKYVLoL*xF$4@Lva&$kWtzR=dO4+rNvC z6)K#F?WT^-T8!$FXO38=Gs@#4c~&3h)v8@gc~)Q8)Bwkr{IYQ@Evt0sA*a0FM{)Rc z%f&`u6pBKFJTC%!m9cy4aGl-IT<^0pL-no=DnLU98mhuZTy|n%yvrE<$n4#6Jl#g( zNxVPE0%>4J~HFUZC z$ zS@YV6t0vzt2Zl_s@EE!_JCa&#*Mw&rvNC=6(nJaxw$LaOHd;6_nt6S3?~EcEGPiD2 zY2h1|>8Zd-JSS{)*)QyhN=j{2O;ag(ReY5EmrPW{=Ug^2I=Hz1_)4PW?=Yi9CAiyn(HBt3k)pA1_lNU3;^W03Wfjx literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..a9288a9 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Sep 14 21:43:34 EDT 2021 +gradle.version=7.1 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..c541e0d640a1a9450b0805cc303663c90600d1f3 GIT binary patch literal 18983 zcmeI%Z%7ky9LMoL7C!on1&-^Q4+C}aOfro7AQK11SLw$AWB?`R?h;h zh@cD{m2f0#3Kk+r50oiLzTi_OmoJ#e@Zdm^7pmcsJpq( zJa{SJ$T<>6{S5at<$}XxIT=sg$$i7!UTZt86jFb}U4PNWlF8f{U)lKxCazFQq2}|nFD{Bihr + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ada054a --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..2c0497f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b449710 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..93e4b17 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..c8397c9 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..20d613f --- /dev/null +++ b/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'java' + id 'application' + id 'com.github.johnrengelman.shadow' version '5.2.0' +} + +mainClassName = 'tech.nevets.nevetsbot.Bot' + +group 'tech.nevets.nevetsbot' +version '0.0.1' +def jdaVer = '4.3.0_324' + +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_11 + +repositories { + mavenCentral() + maven { + url "https://m2.dv8tion.net/releases" + } + maven { + name 'duncte123-jfrog' + url 'https://duncte123.jfrog.io/artifactory/maven' + } + maven { + url 'https://jitpack.io' + } +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' + implementation("net.dv8tion:JDA:$jdaVer") + implementation group: 'org.yaml', name: 'snakeyaml', version: '1.27' + implementation group: 'me.duncte123', name: 'botCommons', version: '2.3.8' + implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.4' + implementation 'me.carleslc.Simple-YAML:Simple-Yaml:1.7.2' + implementation group: 'org.json', name: 'json', version: '20210307' +} + +compileJava.options.encoding = 'UTF-8' + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/build/resources/main/logback.xml b/build/resources/main/logback.xml new file mode 100644 index 0000000..e11467d --- /dev/null +++ b/build/resources/main/logback.xml @@ -0,0 +1,12 @@ + + + + + %d{HH:mm:ss.SSS} %boldCyan(%-34.-34thread) %red(%10.10X{jda.shard}) %boldGreen(%-15.-15logger{0}) %highlight(%-6level) %msg%n + + + + + + + \ No newline at end of file diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..8be33de259a85a0e3f70951c82316232235b49c8 GIT binary patch literal 36765 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..69a9715 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..744e882 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..10e89d9 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'nevetSBot' \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/Bot.java b/src/main/java/tech/nevets/nevetsbot/Bot.java new file mode 100644 index 0000000..e9714f7 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/Bot.java @@ -0,0 +1,38 @@ +package tech.nevets.nevetsbot; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.utils.cache.CacheFlag; +import org.simpleyaml.configuration.file.YamlFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.EnumSet; + +public class Bot { + public static JDA jda; + private static YamlFile config; + public static String prefix; + private static final Logger LOGGER = LoggerFactory.getLogger(Bot.class); + + public static void main(String[] args) throws Exception { + Config.loadConfig(); + String token = Config.getConfig().getString("bot.token"); + config = Config.getConfig(); + prefix = Config.getConfig().getString("bot.prefix"); + + jda = JDABuilder.createDefault(token) + .disableCache(EnumSet.of( + CacheFlag.CLIENT_STATUS, + CacheFlag.ACTIVITY, + CacheFlag.EMOTE + )) + .enableCache(CacheFlag.VOICE_STATE) + .addEventListeners(new Listener()) + .build(); + getActivity(); + } + + public static void getActivity() { + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/Config.java b/src/main/java/tech/nevets/nevetsbot/Config.java new file mode 100644 index 0000000..acd437b --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/Config.java @@ -0,0 +1,50 @@ +package tech.nevets.nevetsbot; + +import org.simpleyaml.configuration.file.YamlFile; + +import java.io.IOException; + +public class Config { + private static final YamlFile ymlFile = new YamlFile("config.yml"); + + public static void loadConfig() { + try { + if (!ymlFile.exists()) { + System.out.println("Configuration file has been created\n"); + ymlFile.createNewFile(true); + } else { + System.out.println("config.yml already exists, loading configuration file...\n"); + } + ymlFile.loadWithComments(); + } catch (final Exception e) { + e.printStackTrace(); + } + + ymlFile.addDefault("bot.prefix", "!"); + ymlFile.addDefault("bot.token", "BotToken122333444455555666666777777788888888999999999"); + ymlFile.addDefault("bot.activity", "playing"); + ymlFile.addDefault("bot.action", "with myself"); + ymlFile.addDefault("permission.staff-role-id", "000000000000000000"); + ymlFile.addDefault("permission.owner-id", "000000000000000000"); + ymlFile.addDefault("command.api.dadjoke", "https://icanhazdadjoke.com/"); + ymlFile.addDefault("command.api.cat.url", "https://api.thecatapi.com/v1/images/search"); + ymlFile.addDefault("command.api.cat.key", "00000000-0000-0000-0000-000000000000"); + ymlFile.addDefault("command.api.dog.url", "https://api.thedogapi.com/v1/images/search"); + ymlFile.addDefault("command.api.dog.key", "00000000-0000-0000-0000-000000000000"); + ymlFile.addDefault("command.api.fox.url", "https://randomfox.ca/floof/"); + ymlFile.addDefault("command.api.panda.url", "https://some-random-api.ml/img/panda"); + ymlFile.addDefault("verbose", false); + + + try { + ymlFile.save(); + } catch ( + IOException e) { + e.printStackTrace(); + } + } + + public static YamlFile getConfig() { + return ymlFile; + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/Listener.java b/src/main/java/tech/nevets/nevetsbot/Listener.java new file mode 100644 index 0000000..2fd9115 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/Listener.java @@ -0,0 +1,36 @@ +package tech.nevets.nevetsbot; + +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.ReadyEvent; +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import tech.nevets.nevetsbot.commands.CommandManager; + +import javax.annotation.Nonnull; + +public class Listener extends ListenerAdapter { + private static final Logger LOGGER = LoggerFactory.getLogger(Listener.class); + private final CommandManager manager = new CommandManager(); + + @Override + public void onReady(@Nonnull ReadyEvent event) { + LOGGER.info("{} is ready", event.getJDA().getSelfUser().getAsTag()); + } + + @Override + public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) { + User user = event.getAuthor(); + + if (user.isBot() || event.isWebhookMessage()) { + return; + } + + String raw = event.getMessage().getContentRaw(); + + if (raw.startsWith(Bot.prefix)) { + manager.handle(event); + } + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/commands/CommandContext.java b/src/main/java/tech/nevets/nevetsbot/commands/CommandContext.java new file mode 100644 index 0000000..f0b90b3 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/CommandContext.java @@ -0,0 +1,31 @@ +package tech.nevets.nevetsbot.commands; + +import me.duncte123.botcommons.commands.ICommandContext; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; + +import java.util.List; + +public class CommandContext implements ICommandContext { + private final GuildMessageReceivedEvent event; + private final List args; + + public CommandContext(GuildMessageReceivedEvent event, List args) { + this.event = event; + this.args = args; + } + + @Override + public Guild getGuild() { + return null; + } + + @Override + public GuildMessageReceivedEvent getEvent() { + return this.event; + } + + public List getArgs() { + return this.args; + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/commands/CommandManager.java b/src/main/java/tech/nevets/nevetsbot/commands/CommandManager.java new file mode 100644 index 0000000..c9c4f96 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/CommandManager.java @@ -0,0 +1,84 @@ +package tech.nevets.nevetsbot.commands; + +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.admin.KickCmd; +import tech.nevets.nevetsbot.commands.admin.PingCmd; +import tech.nevets.nevetsbot.commands.games.CoinFlipCmd; +import tech.nevets.nevetsbot.commands.games.DadJokeCmd; +import tech.nevets.nevetsbot.commands.games.DiceCmd; +import tech.nevets.nevetsbot.commands.music.JoinCmd; +import tech.nevets.nevetsbot.commands.pics.CatCmd; +import tech.nevets.nevetsbot.commands.pics.DogCmd; +import tech.nevets.nevetsbot.commands.pics.FoxCmd; +import tech.nevets.nevetsbot.commands.pics.PandaCmd; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +public class CommandManager { + protected final List commands = new ArrayList<>(); + + public CommandManager() { + //Add to this list in alphabetical order + addCommand(new CatCmd()); + addCommand(new CoinFlipCmd()); + addCommand(new DadJokeCmd()); + addCommand(new DiceCmd()); + addCommand(new DogCmd()); + addCommand(new FoxCmd()); + addCommand(new HelpCmd(this)); + addCommand(new JoinCmd()); + addCommand(new KickCmd()); + addCommand(new PandaCmd()); + addCommand(new PingCmd()); + } + + private void addCommand(ICommand cmd) { + boolean nameFound = this.commands.stream().anyMatch((it) -> it.getName().equalsIgnoreCase(cmd.getName())); + + if (nameFound) { + throw new IllegalArgumentException("A command with this name is already present"); + } + + commands.add(cmd); + } + + public List getCommands() { + return commands; + } + + @Nullable + public ICommand getCommand(String search) { + String searchLower = search.toLowerCase(); + + for (ICommand cmd : this.commands) { + if (cmd.getName().equals(searchLower) || cmd.getAliases().contains(searchLower)) { + return cmd; + } + } + + return null; + } + + public void handle(GuildMessageReceivedEvent event) { + String[] split = event.getMessage().getContentRaw() + .replaceFirst("(?i)" + Pattern.quote(Bot.prefix), "") + .split("\\s+"); + + String invoke = split[0].toLowerCase(); + ICommand cmd = this.getCommand(invoke); + + if (cmd !=null) { + event.getChannel().sendTyping().queue(); + List args = Arrays.asList(split).subList(1, split.length); + + CommandContext ctx = new CommandContext(event, args); + + cmd.handle(ctx); + } + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/commands/HelpCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/HelpCmd.java new file mode 100644 index 0000000..37f7310 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/HelpCmd.java @@ -0,0 +1,65 @@ +package tech.nevets.nevetsbot.commands; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.TextChannel; +import tech.nevets.nevetsbot.Bot; + +import java.util.List; + +public class HelpCmd implements ICommand { + + private final CommandManager manager; + + public HelpCmd(CommandManager manager) { + this.manager = manager; + } + + @Override + public void handle(CommandContext ctx) { + List args = ctx.getArgs(); + TextChannel channel = ctx.getChannel(); + + if (args.isEmpty()) { + StringBuilder builder = new StringBuilder(); + + EmbedBuilder eb = new EmbedBuilder(); + + eb.setTitle("List of Commands"); + + manager.getCommands().stream().map(ICommand::getName).forEach( + (it) -> builder.append('`').append(Bot.prefix).append(it).append("`\n") + ); + + eb.addField("", builder.toString(), false); + channel.sendMessageEmbeds(eb.build()).queue(); + + return; + } + + String search = args.get(0); + ICommand command = manager.getCommand(search); + + if (command == null) { + channel.sendMessage("Nothing found for " + search); + return; + } + + channel.sendMessage(command.getHelp()).queue(); + } + + @Override + public String getName() { + return "help"; + } + + @Override + public String getHelp() { + return "Shows the list of bot commands\n" + + "Usage: `" + Bot.prefix + "help [command]`"; + } + + @Override + public List getAliases() { + return List.of("commands", "cmds", "commandlist"); + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/ICommand.java b/src/main/java/tech/nevets/nevetsbot/commands/ICommand.java new file mode 100644 index 0000000..4130818 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/ICommand.java @@ -0,0 +1,16 @@ +package tech.nevets.nevetsbot.commands; + +import java.util.List; + +public interface ICommand { + void handle(CommandContext ctx); + + String getName(); + + String getHelp(); + + default List getAliases() { + return List.of(); + } + +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/commands/admin/KickCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/admin/KickCmd.java new file mode 100644 index 0000000..991db2f --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/admin/KickCmd.java @@ -0,0 +1,61 @@ +package tech.nevets.nevetsbot.commands.admin; + +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.TextChannel; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; + +import java.util.List; + +public class KickCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + final TextChannel channel = ctx.getChannel(); + final Message message = ctx.getMessage(); + final Member member = ctx.getMember(); + final List args = ctx.getArgs(); + + if (args.size() < 2 || message.getMentionedMembers().isEmpty()) { + channel.sendMessage("Missing arguments").queue(); + return; + } + + final Member target = message.getMentionedMembers().get(0); + + if (!member.canInteract(target) || !member.hasPermission(Permission.KICK_MEMBERS)) { + channel.sendMessage("You do not have permission to kick members").queue(); + return; + } + + final Member selfMember = ctx.getSelfMember(); + + if (!selfMember.canInteract(target) || !selfMember.hasPermission(Permission.KICK_MEMBERS)) { + channel.sendMessage("You do not have permission to kick members").queue(); + return; + } + + final String reason = String.join(" ", args.subList(1, args.size())); + + ctx.getGuild() + .kick(target, reason) + .reason(reason) + .queue( + (__) -> channel.sendMessage("User successfully kicked").queue(), + (error) -> channel.sendMessageFormat("Could not kick %s", error.getMessage()).queue() + ); + } + + @Override + public String getName() { + return "kick"; + } + + @Override + public String getHelp() { + return "Kick a member from the server \n" + + "Usage: `" + Bot.prefix + " kick <@user> "; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/admin/PingCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/admin/PingCmd.java new file mode 100644 index 0000000..a6f454f --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/admin/PingCmd.java @@ -0,0 +1,27 @@ +package tech.nevets.nevetsbot.commands.admin; + +import net.dv8tion.jda.api.JDA; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; + +public class PingCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + JDA jda = ctx.getJDA(); + + jda.getRestPing().queue((ping) -> ctx.getChannel().sendMessageFormat("Rest API Ping: %sms\nWebSocket Ping: %sms", ping, jda.getGatewayPing()).queue()); + + } + + @Override + public String getHelp() { + return "Shows the current ping from the bot to the Discord servers" + + "Usage: `" + Bot.prefix + "ping`"; + } + + @Override + public String getName() { + return "ping"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/games/CoinFlipCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/games/CoinFlipCmd.java new file mode 100644 index 0000000..478eadf --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/games/CoinFlipCmd.java @@ -0,0 +1,41 @@ +package tech.nevets.nevetsbot.commands.games; + +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; + +import java.util.List; +import java.util.Random; + +public class CoinFlipCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + Random r = new Random(); + int max = 2; + + int i = r.nextInt(max); + if (i == 0) { + ctx.getChannel().sendTyping().queue(); + ctx.getChannel().sendMessage("The coin landed on **heads**").queue(); + } else { + ctx.getChannel().sendTyping().queue(); + ctx.getChannel().sendMessage("The coin landed on **tails**").queue(); + } + } + + @Override + public String getName() { + return "coinflip"; + } + + @Override + public String getHelp() { + return "Returns a heads or tails value" + + "Usage: `" + Bot.prefix + "coinflip`"; + } + + @Override + public List getAliases() { + return List.of("coin", "flip"); + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/games/DadJokeCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/games/DadJokeCmd.java new file mode 100644 index 0000000..d829d26 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/games/DadJokeCmd.java @@ -0,0 +1,35 @@ +package tech.nevets.nevetsbot.commands.games; + +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; +import tech.nevets.nevetsbot.util.httprequests.DadJoke; + +import java.io.IOException; +import java.util.List; + +public class DadJokeCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + try { DadJoke.getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } + + ctx.getChannel().sendTyping().queue(); + ctx.getChannel().sendMessage(DadJoke.joke).queue(); + } + + @Override + public String getName() { + return "dadjoke"; + } + + @Override + public String getHelp() { + return "Sends a dad joke :P\n" + + "Usage: `" + Bot.prefix + "dadjoke`"; + } + + @Override + public List getAliases() { + return List.of("joke"); + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/games/DiceCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/games/DiceCmd.java new file mode 100644 index 0000000..ff11760 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/games/DiceCmd.java @@ -0,0 +1,30 @@ +package tech.nevets.nevetsbot.commands.games; + +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; + +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class DiceCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + Random rand = ThreadLocalRandom.current(); + + int roll = rand.nextInt(6) + 1; + ctx.getChannel().sendTyping().queue(); + ctx.getChannel().sendMessage("Your roll: " + roll).queue(); + } + + @Override + public String getName() { + return "dice"; + } + + @Override + public String getHelp() { + return "Returns a value from 1-6" + + "Usage: `" + Bot.prefix + "dice`"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/music/JoinCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/music/JoinCmd.java new file mode 100644 index 0000000..880daee --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/music/JoinCmd.java @@ -0,0 +1,48 @@ +package tech.nevets.nevetsbot.commands.music; + +import net.dv8tion.jda.api.entities.GuildVoiceState; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.managers.AudioManager; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; + +public class JoinCmd implements ICommand { + + @Override + public void handle(CommandContext ctx) { + final TextChannel channel = ctx.getChannel(); + final Member self = ctx.getSelfMember(); + final GuildVoiceState selfVoiceState = self.getVoiceState(); + + if (selfVoiceState.inVoiceChannel()) { + channel.sendMessage("I am already in a voice channel").queue(); + return; + } + + final Member member = ctx.getMember(); + final GuildVoiceState memberVoiceState = member.getVoiceState(); + + if (!memberVoiceState.inVoiceChannel()) { + channel.sendMessage("You need to be in a voice channel to run this command").queue(); + return; + } + + final AudioManager audioManager = ctx.getGuild().getAudioManager(); + final VoiceChannel memberChannel = memberVoiceState.getChannel(); + + audioManager.openAudioConnection(memberChannel); + channel.sendMessageFormat("Connecting to `\uD83D\uDD0A %s`", memberChannel.getName()).queue(); + } + + @Override + public String getName() { + return "join"; + } + + @Override + public String getHelp() { + return "Makes the bot join your voice channel"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/pics/CatCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/pics/CatCmd.java new file mode 100644 index 0000000..6d9c32c --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/pics/CatCmd.java @@ -0,0 +1,32 @@ +package tech.nevets.nevetsbot.commands.pics; + +import net.dv8tion.jda.api.EmbedBuilder; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; +import tech.nevets.nevetsbot.util.httprequests.temp.CatRequest; + +import java.io.IOException; + +public class CatCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + try { CatRequest.getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } + EmbedBuilder eb = new EmbedBuilder(); + + ctx.getChannel().sendTyping().queue(); + eb.setImage(CatRequest.url); + ctx.getChannel().sendMessage(eb.build()).queue(); + } + + @Override + public String getName() { + return "cat"; + } + + @Override + public String getHelp() { + return "Sends a picture of a cat!\n" + + "Usage: `" + Bot.prefix + "cat`"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/pics/DogCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/pics/DogCmd.java new file mode 100644 index 0000000..d3b03a4 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/pics/DogCmd.java @@ -0,0 +1,32 @@ +package tech.nevets.nevetsbot.commands.pics; + +import net.dv8tion.jda.api.EmbedBuilder; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; +import tech.nevets.nevetsbot.util.httprequests.temp.DogRequest; + +import java.io.IOException; + +public class DogCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + try { DogRequest.getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } + EmbedBuilder eb = new EmbedBuilder(); + + ctx.getChannel().sendTyping().queue(); + eb.setImage(DogRequest.url); + ctx.getChannel().sendMessage(eb.build()).queue(); + } + + @Override + public String getName() { + return "dog"; + } + + @Override + public String getHelp() { + return "Sends a picture of a dog!\n" + + "Usage: `" + Bot.prefix + "dog`"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/pics/FoxCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/pics/FoxCmd.java new file mode 100644 index 0000000..ec1198f --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/pics/FoxCmd.java @@ -0,0 +1,32 @@ +package tech.nevets.nevetsbot.commands.pics; + +import net.dv8tion.jda.api.EmbedBuilder; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; +import tech.nevets.nevetsbot.util.httprequests.temp.FoxRequest; + +import java.io.IOException; + +public class FoxCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + try { FoxRequest.getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } + EmbedBuilder eb = new EmbedBuilder(); + + ctx.getChannel().sendTyping().queue(); + eb.setImage(FoxRequest.url); + ctx.getChannel().sendMessage(eb.build()).queue(); + } + + @Override + public String getName() { + return "fox"; + } + + @Override + public String getHelp() { + return "Sends a picture of a fox!\n" + + "Usage: `" + Bot.prefix + "fox`"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/commands/pics/PandaCmd.java b/src/main/java/tech/nevets/nevetsbot/commands/pics/PandaCmd.java new file mode 100644 index 0000000..c7c5f6b --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/commands/pics/PandaCmd.java @@ -0,0 +1,32 @@ +package tech.nevets.nevetsbot.commands.pics; + +import net.dv8tion.jda.api.EmbedBuilder; +import tech.nevets.nevetsbot.Bot; +import tech.nevets.nevetsbot.commands.CommandContext; +import tech.nevets.nevetsbot.commands.ICommand; +import tech.nevets.nevetsbot.util.httprequests.temp.PandaRequest; + +import java.io.IOException; + +public class PandaCmd implements ICommand { + @Override + public void handle(CommandContext ctx) { + try { PandaRequest.getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } + EmbedBuilder eb = new EmbedBuilder(); + + ctx.getChannel().sendTyping().queue(); + eb.setImage(PandaRequest.url); + ctx.getChannel().sendMessageEmbeds(eb.build()).queue(); + } + + @Override + public String getName() { + return "panda"; + } + + @Override + public String getHelp() { + return "Sends a picture of a panda!\n" + + "Usage: `" + Bot.prefix + "panda`"; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/util/httprequests/DadJoke.java b/src/main/java/tech/nevets/nevetsbot/util/httprequests/DadJoke.java new file mode 100644 index 0000000..4088be2 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/util/httprequests/DadJoke.java @@ -0,0 +1,25 @@ +package tech.nevets.nevetsbot.util.httprequests; + +import tech.nevets.nevetsbot.Config; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class DadJoke { + public static String joke; + + public static void getHttpConnection() throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("accept", "text/plain") + .uri(URI.create(Config.getConfig().getString("command.api.dadjoke"))) + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + joke = response.body(); + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/CatRequest.java b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/CatRequest.java new file mode 100644 index 0000000..4f97bb1 --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/CatRequest.java @@ -0,0 +1,40 @@ +package tech.nevets.nevetsbot.util.httprequests.temp; + +import org.json.JSONArray; +import org.json.JSONObject; +import tech.nevets.nevetsbot.Config; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class CatRequest { + public static String url; + + public static void getHttpConnection() throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("accept", "application/json") + .header("api_key", Config.getConfig().getString("command.api.cat.key")) + .uri(URI.create(Config.getConfig().getString("command.api.cat.url"))) + .build(); + client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(CatRequest::parse) + .join(); + } + + public static String parse(String response) { + JSONArray ja = new JSONArray(response); + + for (int i = 0; i < ja.length(); i++) { + JSONObject jo = ja.getJSONObject(i); + url = jo.getString("url"); + } + + return null; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/DogRequest.java b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/DogRequest.java new file mode 100644 index 0000000..0c8859c --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/DogRequest.java @@ -0,0 +1,40 @@ +package tech.nevets.nevetsbot.util.httprequests.temp; + +import org.json.JSONArray; +import org.json.JSONObject; +import tech.nevets.nevetsbot.Config; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class DogRequest { + public static String url; + + public static void getHttpConnection() throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("accept", "application/json") + .header("api_key", Config.getConfig().getString("command.api.dog.key")) + .uri(URI.create(Config.getConfig().getString("command.api.dog.url"))) + .build(); + client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(DogRequest::parse) + .join(); + } + + public static String parse(String response) { + JSONArray ja = new JSONArray(response); + + for (int i = 0; i < ja.length(); i++) { + JSONObject jo = ja.getJSONObject(i); + url = jo.getString("url"); + } + + return null; + } +} diff --git a/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/FoxRequest.java b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/FoxRequest.java new file mode 100644 index 0000000..0e3d35f --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/FoxRequest.java @@ -0,0 +1,40 @@ +package tech.nevets.nevetsbot.util.httprequests.temp; + +import org.json.JSONArray; +import org.json.JSONObject; +import tech.nevets.nevetsbot.Config; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class FoxRequest { + public static String url; + + public static void getHttpConnection() throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("accept", "application/json") + .uri(URI.create(Config.getConfig().getString("command.api.fox.url"))) + .build(); + client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(FoxRequest::parse) + .join(); + } + + public static String parse(String response) { + String mod = "[ " + response + " ]"; + JSONArray ja = new JSONArray(mod); + + for (int i = 0; i < ja.length(); i++) { + JSONObject jo = ja.getJSONObject(i); + url = jo.getString("image"); + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/PandaRequest.java b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/PandaRequest.java new file mode 100644 index 0000000..3657bfc --- /dev/null +++ b/src/main/java/tech/nevets/nevetsbot/util/httprequests/temp/PandaRequest.java @@ -0,0 +1,40 @@ +package tech.nevets.nevetsbot.util.httprequests.temp; + +import org.json.JSONArray; +import org.json.JSONObject; +import tech.nevets.nevetsbot.Config; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class PandaRequest { + public static String url; + + public static void getHttpConnection() throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("accept", "application/json") + .uri(URI.create(Config.getConfig().getString("command.api.panda.url"))) + .build(); + client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenApply(PandaRequest::parse) + .join(); + } + + public static String parse(String response) { + String mod = "[ " + response + " ]"; + JSONArray ja = new JSONArray(mod); + + for (int i = 0; i < ja.length(); i++) { + JSONObject jo = ja.getJSONObject(i); + url = jo.getString("link"); + } + + return null; + } +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..89730d5 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,12 @@ + + + + + %d{HH:mm:ss.SSS} %boldCyan(%-34.-34thread) %red(%10.10X{jda.shard}) %boldGreen(%-15.-15logger{0}) %highlight(%-6level) %msg%n + + + + + + + \ No newline at end of file