From a240300fd608318538efcb12ffed5a0d75048418 Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Mon, 19 Jul 2021 23:13:46 -0400 Subject: [PATCH] Added the basic bot with some commands --- .../6.7/executionHistory/executionHistory.bin | Bin 0 -> 82980 bytes .gradle/6.7/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/6.7/fileHashes/fileHashes.bin | Bin 0 -> 20247 bytes .../6.7/fileHashes/resourceHashesCache.bin | Bin 0 -> 18531 bytes .gradle/6.7/gc.properties | 0 .gradle/6.7/javaCompile/classAnalysis.bin | Bin 0 -> 418789 bytes .gradle/6.7/javaCompile/taskHistory.bin | Bin 0 -> 20584 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18983 bytes .gradle/checksums/md5-checksums.bin | Bin 0 -> 18597 bytes .gradle/checksums/sha1-checksums.bin | Bin 0 -> 18929 bytes .gradle/configuration-cache/gc.properties | 0 .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 3 + .idea/.name | 1 + .idea/compiler.xml | 6 + .idea/gradle.xml | 17 ++ .idea/jarRepositories.xml | 25 +++ .idea/misc.xml | 7 + .idea/modules/SugarcaneWikiFAQ.iml | 2 + .idea/uiDesigner.xml | 124 ++++++++++++ .idea/vcs.xml | 6 + WebAPI/index.html | 10 + WebAPI/no.html | 10 + build.gradle | 33 ++++ .../bin/SugarcaneWikiFAQ | 172 ++++++++++++++++ .../bin/SugarcaneWikiFAQ.bat | 84 ++++++++ build/scriptsShadow/SugarcaneWikiFAQ | 172 ++++++++++++++++ build/scriptsShadow/SugarcaneWikiFAQ.bat | 84 ++++++++ .../compileJava/source-classes-mapping.txt | 18 ++ build/tmp/shadowJar/MANIFEST.MF | 2 + config.yml | 2 + gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ run/config.yml | 2 + run/start.cmd | 4 + settings.gradle | 2 + .../java/org/sugarcanemc/wikifaqbot/Bot.java | 41 ++++ .../wikifaqbot/commands/CoinCmd.java | 39 ++++ .../wikifaqbot/commands/DiceCmd.java | 32 +++ .../wikifaqbot/commands/InfoCmd.java | 32 +++ .../wikifaqbot/commands/PingCmd.java | 28 +++ .../sugarcanemc/wikifaqbot/config/Config.java | 22 +++ .../wikifaqbot/config/ConfigHandler.java | 59 ++++++ .../wikifaqbot/config/ConfigUtils.java | 36 ++++ .../sugarcanemc/wikifaqbot/webapi/WebAPI.java | 77 ++++++++ 47 files changed, 1433 insertions(+) create mode 100644 .gradle/6.7/executionHistory/executionHistory.bin create mode 100644 .gradle/6.7/fileChanges/last-build.bin create mode 100644 .gradle/6.7/fileHashes/fileHashes.bin create mode 100644 .gradle/6.7/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/6.7/gc.properties create mode 100644 .gradle/6.7/javaCompile/classAnalysis.bin create mode 100644 .gradle/6.7/javaCompile/taskHistory.bin create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/checksums/md5-checksums.bin create mode 100644 .gradle/checksums/sha1-checksums.bin create mode 100644 .gradle/configuration-cache/gc.properties 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/modules/SugarcaneWikiFAQ.iml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 WebAPI/index.html create mode 100644 WebAPI/no.html create mode 100644 build.gradle create mode 100644 build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ create mode 100644 build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ.bat create mode 100644 build/scriptsShadow/SugarcaneWikiFAQ create mode 100644 build/scriptsShadow/SugarcaneWikiFAQ.bat create mode 100644 build/tmp/compileJava/source-classes-mapping.txt create mode 100644 build/tmp/shadowJar/MANIFEST.MF create mode 100644 config.yml create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 run/config.yml create mode 100644 run/start.cmd create mode 100644 settings.gradle create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/Bot.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/commands/CoinCmd.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/commands/DiceCmd.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/commands/InfoCmd.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/commands/PingCmd.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/config/Config.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigHandler.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigUtils.java create mode 100644 src/main/java/org/sugarcanemc/wikifaqbot/webapi/WebAPI.java diff --git a/.gradle/6.7/executionHistory/executionHistory.bin b/.gradle/6.7/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e18ae7cdbddfa366b0f8e2c33e738e085bcb130 GIT binary patch literal 82980 zcmeHQ3w#q**3SbF1b2rO1y@87L|9CknIw}05h%2kXF*y7F>9H}op#zZ2{TE`L%#(< zlEbI<>rlcCWxBd&!0)2RRH)US72Xf!RKR)3#(L8EE)GyFDaG!sA4XdDm0Z%5Sc zO!Yea7bAcXzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{KfDyn5U<5D%7=hZ1zyMJ0 zMpeOP_XRBie=N~xOpV}B-O1Tq-}~=3bJEn);>@u9VDsPoSzRCA`)2UCw!xC{@#Fi> zKlz7Fp6}G_vmXr~*9|#-cHYx<>Z->leiS}#;%*^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{K zfDyn5U<5D%7y*m`MgSv#5x@vw1TX>^0gM1f03(1Ahz9|)MpLgbd>Sa9QrVx+`g|U# zL_j_vzbG&Qp?t4YGOU16WoiAI)gCF|m@hHB3mF-&X!J31k!&oH7_S#e#)0a0UIyYk z65~TWac04cGg*INUn)3wvv5b&!M?g{mY{i0o7dGZy7(MU61~2>)_IcOoyWO6vR^`E z>+mlsk0dEXT38d!SZRliv6vi!gAuGIvz@2SR)!}&TX6E0Q&)aE@z}4kJr5uL#$SIj zBXI>{0Ci<#RR7g@TH3lF<10`upZ;L~^o-t_c>{7X`{#A<+b1(DOSwQlH3U!^FUmf7 zy7E^NS-(&8xRX&=If0c_I6Jz+oC1cj(mDQOO}S#Z!@a2fy13e$5v9ITY;4ya+0&w{ z7$CXy8w-3suiPOmO-52c z{m-6W4LXeJn6c-|+N&ylRTsxpHNKFMvP2iszN3v#WoM|bgj!$-KU*M2Pwc-lW9uX0^u)GNyLX%Q1y4V|%JS~2 z4Ex`;$rGMLQ88*xl7jkB1%V$)%&?&h@RH+n{G{$|aPAN|^Ri^hFnY!xsW z+zK8I!T^I^ni+$c0|Ji{Y_@wje%FjL?-tR*2Tlr=r(Ko!YWODQ?8c7L{p-KXYoBZ!VPMwLdS8b!B&B(*kWR?t1` zfmT&eer_eo_wARPGebfyxNQLxRNM>28)@~=yF@mvB5DScku;hNj0+TIB;AVsOuY9?d?#Rht~a)z3JUAQ7XUx;VML8khe9(yHEwqi|%>pu6X~fvW6l&ZHP{9fALk_r@C$(oC9DH2oJgs1(4erS_nEh zhATj_GdNx$*+4l3SSG=@k#s79VIlId5{#CzlX1H}zTgxhJ4qVqBApz`(6rUcAr_?2 zc0`+zg`+GyWfrV9v&jsrdbGm`4m97|TU>BU9> zy4V98K}W7s zf&nC`if@^F@5m0VvYPCbOYS4214DH?lYp-10gT`eX(XZRI&A=(oieeM$!aoDJOfV^ zPnvB4EtpA)tgM z-5lbb9T}xdHcol?VJNUsc8k?PS{ZZ>YxG_s3M(CUI8*F$ z%5J6z1%Hu7%H}j%9Xt)20yc}?#F}gjZFBG(Z7~aWO5i|KmNc0V;;oT#pd4jWZaVQm z=8@%v^}S#BT|Ibmhcz$#xFZq8+{kC-19s(karVqehbIOe)jY~!cTzT*w6ZKolZ@4F zXW>0{W4GDNq&cn$lX≥LGB- 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 C@p-ub literal 0 HcmV?d00001 diff --git a/.gradle/6.7/fileHashes/resourceHashesCache.bin b/.gradle/6.7/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..e78576abc0995d043d235c9288661789d3e293d6 GIT binary patch literal 18531 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 literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..85c5ae0 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Mon Jul 19 19:31:14 EDT 2021 +gradle.version=6.7 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..e533c41ea22acb70b81a2056c2229ad5d4d4ea8f GIT binary patch literal 18983 zcmeI%Z%7ky9LMo%2KlFHiql&T1Iq~ik>*fIDNAA}go%V8Aw^6~l>F1MkX4|9T94Ks zA}o_0lz$+w2a1HC#t=1K4Iu`K48a63#XsO4XX_e~A?YAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0{@G^P5DKFm6s8d zG`>Yxy&#-FE-zy2m!H+O77xTJmrc3+|3T;VGtF;5EM-wI;@-7wi+-9>v!!(D823*< z+J)Nr{$84I2))%I}5bApFM}Ipa%nzrcXnzm)V8f=p;rlH+%_njX zzxbq2WA7#(=_7Y>Jo##JiRPy=pC7>8(7!QuMQ3|Q`!sVu+h!?_*WUd_^E&S5VsBKR z9`^G59qy@{vuh6(m`5f++^7i@l$deZ8tK6*}mqwekfiCI=+#h$D)5{#0 z3)Bbq`jY;AqdVg(^*QeREeM)d$~AmK00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX?}-vlnm7lP#Ti0|}$gdQkz_$S4` eoz-_8rug^F>Ye@DM}3!nJ0IpQ^^CggKFhsMaZ@7*f>`1N7QlAeNd6T&@a&_`NPtEg1F0OKZsNCZd0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_Kd z|1FR#Z!bYUjrLPFaB}g~S+#U#j5)THn0sb=$Ceu<$*E=4&*esO@aU1RNq=k^hSc{E z{njcS-m`_T9a^o|7B9E1$-&*Y1#e}RYp62Izs+%$X3H?Vsojd2xgQ(4pC5g1O4IEW z+@@S^cgw%bzAwMIua^IQnBy$XmchEM-HNU#nXZ`VUT8fkk1(ygteeZE6rj+iJ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/gc.properties b/.gradle/configuration-cache/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..6759da8 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +SugarcaneWikiFAQ \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..61a9130 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..95c73e6 --- /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..38aedfd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..38167d7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules/SugarcaneWikiFAQ.iml b/.idea/modules/SugarcaneWikiFAQ.iml new file mode 100644 index 0000000..abeecc0 --- /dev/null +++ b/.idea/modules/SugarcaneWikiFAQ.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/WebAPI/index.html b/WebAPI/index.html new file mode 100644 index 0000000..23b2645 --- /dev/null +++ b/WebAPI/index.html @@ -0,0 +1,10 @@ + + + + + + + +

IntelliJ Base HTML Page

+ + \ No newline at end of file diff --git a/WebAPI/no.html b/WebAPI/no.html new file mode 100644 index 0000000..47ce858 --- /dev/null +++ b/WebAPI/no.html @@ -0,0 +1,10 @@ + + + + + Not Supported Method + + +

Error 405: Method Not Supported

+ + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..3b905d6 --- /dev/null +++ b/build.gradle @@ -0,0 +1,33 @@ +plugins { + id 'java' + id 'application' + id 'com.github.johnrengelman.shadow' version '5.2.0' +} + +mainClassName = 'org.sugarcanemc.wikifaqbot.Bot' + +group 'org.sugarcanemc.wikifaqbot' +version '0.1.0' +def jdaVer = '4.3.0_298' + +sourceCompatibility = targetCompatibility = 1.8 + +repositories { + mavenCentral() + maven { + url "https://m2.dv8tion.net/releases" + } +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + implementation("net.dv8tion:JDA:$jdaVer") + compile group: 'org.yaml', name: 'snakeyaml', version: '1.27' +} + +compileJava.options.encoding = 'UTF-8' + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ b/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ new file mode 100644 index 0000000..24a6be5 --- /dev/null +++ b/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ @@ -0,0 +1,172 @@ +#!/usr/bin/env bash + +############################################################################## +## +## SugarcaneWikiFAQ 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="SugarcaneWikiFAQ" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and SUGARCANE_WIKI_FAQ_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# 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 + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/lib/SugarcaneWikiFAQ-0.1.0-all.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, switch paths to Windows format before running java +if $cygwin ; 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=$((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" -jar "\"$CLASSPATH\"" "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ.bat b/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ.bat new file mode 100644 index 0000000..069aa35 --- /dev/null +++ b/build/install/SugarcaneWikiFAQ-shadow/bin/SugarcaneWikiFAQ.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem SugarcaneWikiFAQ 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 Add default JVM options here. You can also use JAVA_OPTS and SUGARCANE_WIKI_FAQ_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@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 init + +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 init + +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 + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\lib\SugarcaneWikiFAQ-0.1.0-all.jar + +@rem Execute SugarcaneWikiFAQ +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SUGARCANE_WIKI_FAQ_OPTS% -jar "%CLASSPATH%" %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable SUGARCANE_WIKI_FAQ_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%SUGARCANE_WIKI_FAQ_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega \ No newline at end of file diff --git a/build/scriptsShadow/SugarcaneWikiFAQ b/build/scriptsShadow/SugarcaneWikiFAQ new file mode 100644 index 0000000..24a6be5 --- /dev/null +++ b/build/scriptsShadow/SugarcaneWikiFAQ @@ -0,0 +1,172 @@ +#!/usr/bin/env bash + +############################################################################## +## +## SugarcaneWikiFAQ 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="SugarcaneWikiFAQ" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and SUGARCANE_WIKI_FAQ_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# 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 + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/lib/SugarcaneWikiFAQ-0.1.0-all.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, switch paths to Windows format before running java +if $cygwin ; 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=$((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" -jar "\"$CLASSPATH\"" "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/build/scriptsShadow/SugarcaneWikiFAQ.bat b/build/scriptsShadow/SugarcaneWikiFAQ.bat new file mode 100644 index 0000000..069aa35 --- /dev/null +++ b/build/scriptsShadow/SugarcaneWikiFAQ.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem SugarcaneWikiFAQ 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 Add default JVM options here. You can also use JAVA_OPTS and SUGARCANE_WIKI_FAQ_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@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 init + +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 init + +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 + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\lib\SugarcaneWikiFAQ-0.1.0-all.jar + +@rem Execute SugarcaneWikiFAQ +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SUGARCANE_WIKI_FAQ_OPTS% -jar "%CLASSPATH%" %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable SUGARCANE_WIKI_FAQ_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%SUGARCANE_WIKI_FAQ_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega \ No newline at end of file diff --git a/build/tmp/compileJava/source-classes-mapping.txt b/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..04083ba --- /dev/null +++ b/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,18 @@ +org/sugarcanemc/wikifaqbot/config/ConfigUtils.java + org.sugarcanemc.wikifaqbot.config.ConfigUtils +org/sugarcanemc/wikifaqbot/commands/InfoCmd.java + org.sugarcanemc.wikifaqbot.commands.InfoCmd +org/sugarcanemc/wikifaqbot/commands/DiceCmd.java + org.sugarcanemc.wikifaqbot.commands.DiceCmd +org/sugarcanemc/wikifaqbot/config/Config.java + org.sugarcanemc.wikifaqbot.config.Config +org/sugarcanemc/wikifaqbot/commands/PingCmd.java + org.sugarcanemc.wikifaqbot.commands.PingCmd +org/sugarcanemc/wikifaqbot/config/ConfigHandler.java + org.sugarcanemc.wikifaqbot.config.ConfigHandler +org/sugarcanemc/wikifaqbot/webapi/WebAPI.java + org.sugarcanemc.wikifaqbot.webapi.WebAPI +org/sugarcanemc/wikifaqbot/Bot.java + org.sugarcanemc.wikifaqbot.Bot +org/sugarcanemc/wikifaqbot/commands/CoinCmd.java + org.sugarcanemc.wikifaqbot.commands.CoinCmd diff --git a/build/tmp/shadowJar/MANIFEST.MF b/build/tmp/shadowJar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/shadowJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..4a0f378 --- /dev/null +++ b/config.yml @@ -0,0 +1,2 @@ +prefix: "$" +botToken: "ODY2ODE5NzQ2MDM2ODQyNTI2.YPYGzA.qz-ELkl_GOWZ7qbCJSNvimLPZyo" \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..be52383 --- /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-6.7-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /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 + ;; + 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/run/config.yml b/run/config.yml new file mode 100644 index 0000000..da95c0b --- /dev/null +++ b/run/config.yml @@ -0,0 +1,2 @@ +prefix: "!" +botToken: "ODY2ODE5NzQ2MDM2ODQyNTI2.YPYGzA.qz-ELkl_GOWZ7qbCJSNvimLPZyo" \ No newline at end of file diff --git a/run/start.cmd b/run/start.cmd new file mode 100644 index 0000000..2045a57 --- /dev/null +++ b/run/start.cmd @@ -0,0 +1,4 @@ +@echo off +title Sugarcane Bot +"C:\Program Files\Java\jre1.8.0_291\bin\java.exe" -Xmx2G -Xms2G -jar SugarcaneWikiFAQ-0.1.0.jar +pause \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..d000718 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'SugarcaneWikiFAQ' + diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/Bot.java b/src/main/java/org/sugarcanemc/wikifaqbot/Bot.java new file mode 100644 index 0000000..44199f3 --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/Bot.java @@ -0,0 +1,41 @@ +package org.sugarcanemc.wikifaqbot; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.entities.Activity; +import org.sugarcanemc.wikifaqbot.commands.CoinCmd; +import org.sugarcanemc.wikifaqbot.commands.DiceCmd; +import org.sugarcanemc.wikifaqbot.commands.InfoCmd; +import org.sugarcanemc.wikifaqbot.commands.PingCmd; +import org.sugarcanemc.wikifaqbot.config.Config; +import org.sugarcanemc.wikifaqbot.config.ConfigHandler; +import org.sugarcanemc.wikifaqbot.config.ConfigUtils; + +import java.io.File; + +public class Bot { + + public static void main(String[] args) throws Exception { + String configPath = ConfigHandler.configPath.toString(); + File file = new File(configPath); + + if (!file.exists()) { + ConfigUtils.createConfig(); + } + + ConfigHandler handler = ConfigHandler.getInstance(); + Config config = handler.getConfig(); + String prefix = config.getPrefix(); + String botToken = config.getBotToken(); + + JDA jda = JDABuilder.createDefault(botToken) + .setActivity(Activity.competing("being the very best")) + .addEventListeners(new InfoCmd()) + .addEventListeners(new PingCmd()) + .addEventListeners(new DiceCmd()) + .addEventListeners(new CoinCmd()) + .build(); + jda.awaitReady(); + System.out.println("Finished Building Bot!"); + } +} \ No newline at end of file diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/commands/CoinCmd.java b/src/main/java/org/sugarcanemc/wikifaqbot/commands/CoinCmd.java new file mode 100644 index 0000000..22427e9 --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/commands/CoinCmd.java @@ -0,0 +1,39 @@ +package org.sugarcanemc.wikifaqbot.commands; + +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.sugarcanemc.wikifaqbot.config.ConfigHandler; + +import java.io.FileNotFoundException; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class CoinCmd extends ListenerAdapter { + @Override + public void onMessageReceived(MessageReceivedEvent e) { + if (e.getAuthor().isBot()) return; + + Message message = e.getMessage(); + String content = message.getContentRaw(); + String prefix = null; + try { prefix = ConfigHandler.getInstance().getConfig().getPrefix(); } catch (FileNotFoundException fileNotFoundException) { fileNotFoundException.printStackTrace(); } + + if (content.equalsIgnoreCase(prefix + "coinflip")) { + Random rand = new Random(); + int upperbound = 2; + MessageChannel channel = e.getChannel(); + + int i = rand.nextInt(upperbound); + if (i == 0) { + channel.sendTyping().queue(); + channel.sendMessage("The coin landed on **heads**").queue(); + } else { + channel.sendTyping().queue(); + channel.sendMessage("The coin landed on **tails**").queue(); + } + System.out.println(i); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/commands/DiceCmd.java b/src/main/java/org/sugarcanemc/wikifaqbot/commands/DiceCmd.java new file mode 100644 index 0000000..2706db9 --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/commands/DiceCmd.java @@ -0,0 +1,32 @@ +package org.sugarcanemc.wikifaqbot.commands; + +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.sugarcanemc.wikifaqbot.config.ConfigHandler; + +import java.io.FileNotFoundException; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class DiceCmd extends ListenerAdapter { + @Override + public void onMessageReceived(MessageReceivedEvent e) { + if (e.getAuthor().isBot()) return; + + Message message = e.getMessage(); + String content = message.getContentRaw(); + String prefix = null; + try { prefix = ConfigHandler.getInstance().getConfig().getPrefix(); } catch (FileNotFoundException fileNotFoundException) { fileNotFoundException.printStackTrace(); } + + if (content.equalsIgnoreCase(prefix + "dice")) { + Random rand = ThreadLocalRandom.current(); + MessageChannel channel = e.getChannel(); + + int roll = rand.nextInt(6) + 1; + channel.sendTyping().queue(); + channel.sendMessage("Your roll: " + roll).queue(); + } + } +} diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/commands/InfoCmd.java b/src/main/java/org/sugarcanemc/wikifaqbot/commands/InfoCmd.java new file mode 100644 index 0000000..32f779d --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/commands/InfoCmd.java @@ -0,0 +1,32 @@ +package org.sugarcanemc.wikifaqbot.commands; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.sugarcanemc.wikifaqbot.config.ConfigHandler; + +import java.io.FileNotFoundException; + +public class InfoCmd extends ListenerAdapter { + + public void onMessageReceived(MessageReceivedEvent e) { + if (e.getAuthor().isBot()) return; + Message message = e.getMessage(); + String content = message.getContentRaw(); + String prefix = null; + try { prefix = ConfigHandler.getInstance().getConfig().getPrefix(); } catch (FileNotFoundException fileNotFoundException) { fileNotFoundException.printStackTrace();} + + if (content.equalsIgnoreCase(prefix + "info")) { + EmbedBuilder info = new EmbedBuilder(); + info.setTitle("📚・Information・📚"); + info.setDescription("Information about Sugarcane"); + info.addField("Creator", "nevetS-718", false); + info.setFooter("SugarcaneMC", "https://cdn.discordapp.com/icons/855918593497759754/a_978a67a83330554987cd7521f638fea8.gif?size=4096"); + info.setColor(0x73fc03); + + e.getChannel().sendTyping().queue(); + e.getChannel().sendMessage(info.build()).queue(); + } + } +} diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/commands/PingCmd.java b/src/main/java/org/sugarcanemc/wikifaqbot/commands/PingCmd.java new file mode 100644 index 0000000..fffed3b --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/commands/PingCmd.java @@ -0,0 +1,28 @@ +package org.sugarcanemc.wikifaqbot.commands; + +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.sugarcanemc.wikifaqbot.config.ConfigHandler; + +import java.io.FileNotFoundException; + +public class PingCmd extends ListenerAdapter { + + @Override + public void onMessageReceived(MessageReceivedEvent e) { + if (e.getAuthor().isBot()) return; + + Message message = e.getMessage(); + String content = message.getContentRaw(); + String prefix = null; + try { prefix = ConfigHandler.getInstance().getConfig().getPrefix(); } catch (FileNotFoundException fileNotFoundException) { fileNotFoundException.printStackTrace(); } + + if (content.equalsIgnoreCase(prefix + "ping")) { + MessageChannel channel = e.getChannel(); + channel.sendTyping().queue(); + channel.sendMessage("Pong!").queue(); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/config/Config.java b/src/main/java/org/sugarcanemc/wikifaqbot/config/Config.java new file mode 100644 index 0000000..a7f47f0 --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/config/Config.java @@ -0,0 +1,22 @@ +package org.sugarcanemc.wikifaqbot.config; + +public class Config { + private String prefix; + private String botToken; + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getBotToken() { + return botToken; + } + + public void setBotToken(String botToken) { + this.botToken = botToken; + } +} \ No newline at end of file diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigHandler.java b/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigHandler.java new file mode 100644 index 0000000..ed1c79b --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigHandler.java @@ -0,0 +1,59 @@ +package org.sugarcanemc.wikifaqbot.config; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.Constructor; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class ConfigHandler { + + public static final Path configPath = Paths.get("./config.yml"); + + private static ConfigHandler configHandler; + + Config config; + + public static ConfigHandler getInstance() throws FileNotFoundException { + return getInstance(configPath); + } + + public static ConfigHandler getInstance(Path configPath) throws FileNotFoundException { + if (configHandler == null) { + configHandler = new ConfigHandler(configPath); + } + return configHandler; + } + + private ConfigHandler(Path configPath) throws FileNotFoundException { + this.config = loadConfig(configPath); + } + + public Config loadConfig(Path configPath) throws FileNotFoundException { + Constructor constructor = new Constructor(Config.class); + Yaml yaml = new Yaml(constructor); + return yaml.load(new FileInputStream(configPath.toFile())); + } + + public void dumpConfig() throws IllegalArgumentException, IllegalAccessException, IOException { + dumpConfig(this.config, this.configPath); + } + + public void dumpConfig(Config config, Path configPath) throws IllegalArgumentException, IllegalAccessException, IOException { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setPrettyFlow(true); + Yaml yml = new Yaml(options); + yml.dump(config, new FileWriter(configPath.toFile())); + } + + public Config getConfig() { + return this.config; + } + +} \ No newline at end of file diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigUtils.java b/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigUtils.java new file mode 100644 index 0000000..00ec44f --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/config/ConfigUtils.java @@ -0,0 +1,36 @@ +package org.sugarcanemc.wikifaqbot.config; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +public class ConfigUtils { + + public static void createConfig() { + + System.out.println("Attemption to create file..."); + + try { + File config = new File("config.yml"); + + if (config.createNewFile()) { + System.out.println(config.getName() + " has been successfully created!"); + } else { + System.out.println(config.getName() + " already exists!"); + } + } catch (IOException e) { + System.out.println("An error has occurred"); + e.printStackTrace(); + } + + try { + FileWriter writer = new FileWriter("config.yml"); + writer.write("prefix: \"!\"\nbotToken: \"BOTTOKEN\"\nmode: \"default\""); + writer.close(); + System.out.println("Successfully wrote to config.yml"); + } catch (IOException e) { + System.out.println("An error occurred while writing to config.yml"); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/sugarcanemc/wikifaqbot/webapi/WebAPI.java b/src/main/java/org/sugarcanemc/wikifaqbot/webapi/WebAPI.java new file mode 100644 index 0000000..3c10609 --- /dev/null +++ b/src/main/java/org/sugarcanemc/wikifaqbot/webapi/WebAPI.java @@ -0,0 +1,77 @@ +package org.sugarcanemc.wikifaqbot.webapi; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.StringTokenizer; + + +public class WebAPI implements Runnable { + + static final File WEB_ROOT = new File("/WebAPI"); + static final String DEFAULT_File = "index.html"; + static final String FILE_NOT_FOUND = "404.html"; + static final String METHOD_NOT_SUPPORTED = "mns.html"; // (file not supported) + + // port + static final int PORT = 80; + // port + + static final boolean verbose = true; + + private Socket connect; + + public void webapi(Socket c) { + connect = c; + } + + public static void main(String[] args){ + try { + ServerSocket serverConnect = new ServerSocket(PORT); + System.out.println("[WebAPI] WebAPI Started on " + "IP" + PORT); + //TODO Make sys.out read IP + while(true) { + WebAPI server = new WebAPI(); + if (verbose) { + System.out.println("[WebAPI] Connection Open."); + } + + Thread thread = new Thread(server); + thread.start(); + + } + } catch (IOException e) { + System.err.println("[WebAPI] Server Connection error"); + e.printStackTrace(); + } + + } + + + @Override + public void run() { + BufferedReader in = null; PrintWriter out = null; BufferedOutputStream dataOut = null; + String fileRequested = null; + + try{ + in = new BufferedReader(new InputStreamReader(connect.getInputStream())); + out = new PrintWriter(connect.getOutputStream()); + dataOut = new BufferedOutputStream(connect.getOutputStream()); + String input = in.readLine(); + StringTokenizer parse = new StringTokenizer(input); + String method = parse.nextToken().toUpperCase(); + fileRequested = parse.nextToken().toLowerCase(); + if(!method.equals("GET") && !method.equals("HEAD")) { + if (verbose) { + System.out.println("501 Not Implemeted: " + method + "method."); + } + } + else{ + + } + } catch(IOException e){ + e.printStackTrace(); + } + + } +}