init
This commit is contained in:
commit
74e45a1548
39 changed files with 4092 additions and 0 deletions
122
.gitignore
vendored
Normal file
122
.gitignore
vendored
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
# ---> Gradle
|
||||||
|
.gradle
|
||||||
|
/build/
|
||||||
|
|
||||||
|
# Ignore Gradle GUI config
|
||||||
|
gradle-app.setting
|
||||||
|
|
||||||
|
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
||||||
|
!gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Cache of project
|
||||||
|
.gradletasknamecache
|
||||||
|
|
||||||
|
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
|
||||||
|
# gradle/wrapper/gradle-wrapper.properties
|
||||||
|
|
||||||
|
# ---> JetBrains
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff:
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/dictionaries
|
||||||
|
|
||||||
|
# Sensitive or high-churn files:
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.xml
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
|
||||||
|
# Gradle:
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Mongo Explorer plugin:
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
## File-based project format:
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
## Plugin-specific files:
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# ---> Eclipse
|
||||||
|
|
||||||
|
.metadata
|
||||||
|
bin/
|
||||||
|
tmp/
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
local.properties
|
||||||
|
.settings/
|
||||||
|
.loadpath
|
||||||
|
.recommenders
|
||||||
|
|
||||||
|
# Eclipse Core
|
||||||
|
.project
|
||||||
|
|
||||||
|
# External tool builders
|
||||||
|
.externalToolBuilders/
|
||||||
|
|
||||||
|
# Locally stored "Eclipse launch configurations"
|
||||||
|
*.launch
|
||||||
|
|
||||||
|
# PyDev specific (Python IDE for Eclipse)
|
||||||
|
*.pydevproject
|
||||||
|
|
||||||
|
# CDT-specific (C/C++ Development Tooling)
|
||||||
|
.cproject
|
||||||
|
|
||||||
|
# JDT-specific (Eclipse Java Development Tools)
|
||||||
|
.classpath
|
||||||
|
|
||||||
|
# Java annotation processor (APT)
|
||||||
|
.factorypath
|
||||||
|
|
||||||
|
# PDT-specific (PHP Development Tools)
|
||||||
|
.buildpath
|
||||||
|
|
||||||
|
# sbteclipse plugin
|
||||||
|
.target
|
||||||
|
|
||||||
|
# Tern plugin
|
||||||
|
.tern-project
|
||||||
|
|
||||||
|
# TeXlipse plugin
|
||||||
|
.texlipse
|
||||||
|
|
||||||
|
# STS (Spring Tool Suite)
|
||||||
|
.springBeans
|
||||||
|
|
||||||
|
# Code Recommenders
|
||||||
|
.recommenders/
|
||||||
|
|
||||||
|
# Scala IDE specific (Scala & Java development for Eclipse)
|
||||||
|
.cache-main
|
||||||
|
.scala_dependencies
|
||||||
|
.worksheet
|
||||||
|
|
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/../../../../../../../:\Ansgar\Random\TMP_Desctop\MissingIdentifier-master\MissingIdentifier\.idea/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
6
.idea/compiler.xml
Normal file
6
.idea/compiler.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<bytecodeTargetLevel target="1.8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
20
.idea/jarRepositories.xml
Normal file
20
.idea/jarRepositories.xml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Maven Central repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jboss.community" />
|
||||||
|
<option name="name" value="JBoss Community repository" />
|
||||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="BintrayJCenter" />
|
||||||
|
<option name="name" value="BintrayJCenter" />
|
||||||
|
<option name="url" value="https://jcenter.bintray.com/" />
|
||||||
|
</remote-repository>
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/misc.xml
Normal file
8
.idea/misc.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="adopt-openj9-1.8" project-jdk-type="JavaSDK" />
|
||||||
|
</project>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
29
README.md
Normal file
29
README.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
**MISSINGIDENTIFIER a Utility Discord Bot**
|
||||||
|
|
||||||
|
This is a Utility Discord providing some helpfull and some not so helpfull features.
|
||||||
|
It uses the [JDA](https://github.com/DV8FromTheWorld/JDA) wrapper.
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
* ANNOY Members without a role will get messaged once a day with a custom text
|
||||||
|
* FOLD Shows some statistics for a given [Folding@Home](https://foldingathome.org/) team
|
||||||
|
* SHUFFLEROLE A given role gets a new color one a while
|
||||||
|
* LOBBY Temporary voicechannels
|
||||||
|
* QUOTE Save quotes and show random quotes
|
||||||
|
* RANDOMRESPONSE Response if text contains a trigger word
|
||||||
|
* AUTOSELECT Give members roles by reacting
|
||||||
|
* DICE Role a dice
|
||||||
|
* PRUGE Delete Messages
|
||||||
|
* LOVECALC Calculate chances between two members
|
||||||
|
* WELCOME Welcome new members with a custom text
|
||||||
|
* STATS Show some Serverstats
|
||||||
|
* ONLINEHIGHLIGHT Gives User a given Role if they are playing one of a given set of games
|
||||||
|
* SECRETCHANNEL Add Users to Secretchat if they mention given keywords
|
||||||
|
* VOICELOBBY Moves Users joining a given Voicechannel to a temporary VoiceChannel
|
||||||
|
|
||||||
|
**INVITE**
|
||||||
|
[CLICK](https://discordapp.com/oauth2/authorize?client_id=550770123946983440&scope=bot&permissions=285961296)
|
||||||
|
|
||||||
|
note: on default only the Guildowner is able to use the bot! he have to set a Admin/Modrole, so others can configurate the bot! `!admin setmodrole @role`
|
||||||
|
|
||||||
|
**COMMANDS**
|
||||||
|
Please use `!help` to get a full command list
|
55
build.gradle
Normal file
55
build.gradle
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
id 'application'
|
||||||
|
}
|
||||||
|
|
||||||
|
group 'BOT'
|
||||||
|
|
||||||
|
version '10.1'
|
||||||
|
|
||||||
|
def jdaVersion = '4.2.0_225'
|
||||||
|
def jdautilitiesVersion = '2.1.5'
|
||||||
|
def jsonsimpleVersion = '1.1.1'
|
||||||
|
def jodatimeVersion = '2.10.6'
|
||||||
|
def jdbcVersion = '8.0.19'
|
||||||
|
def self4JVersion = '1.7.30'
|
||||||
|
def log4jVersion = '2.13.3'
|
||||||
|
def JSON = '4.12.0'
|
||||||
|
|
||||||
|
mainClassName = 'MissingIDent'
|
||||||
|
sourceCompatibility = 1.8
|
||||||
|
compileJava.options.encoding = 'UTF-8'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile "net.dv8tion:JDA:$jdaVersion"
|
||||||
|
// compile "com.jagrosh:jda-utilities:$jdautilitiesVersion"
|
||||||
|
compile group: 'com.googlecode.json-simple', name: 'json-simple', version: jsonsimpleVersion
|
||||||
|
compile group: 'joda-time', name: 'joda-time', version: jodatimeVersion
|
||||||
|
// compile group: 'mysql', name: 'mysql-connector-java', version: jdbcVersion
|
||||||
|
compile group: 'org.slf4j', name: 'slf4j-api', version: self4JVersion
|
||||||
|
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: self4JVersion
|
||||||
|
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4jVersion
|
||||||
|
compile group: 'com.cedarsoftware', name: 'json-io', version: JSON
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a single Jar with all dependencies
|
||||||
|
task fatJar(type: Jar) {
|
||||||
|
manifest {
|
||||||
|
attributes 'BOT': 'MissingIDent',
|
||||||
|
'Implementation-Version': version,
|
||||||
|
'Main-Class': mainClassName
|
||||||
|
}
|
||||||
|
|
||||||
|
baseName = project.name + '-all'
|
||||||
|
from {
|
||||||
|
configurations
|
||||||
|
.compile
|
||||||
|
.findAll { !it.name.endsWith('pom') }
|
||||||
|
.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
|
}
|
||||||
|
with jar
|
||||||
|
}
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#Sun Feb 02 15:13:48 CET 2020
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-all.zip
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
172
gradlew
vendored
Normal file
172
gradlew
vendored
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## 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=""
|
||||||
|
|
||||||
|
# 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, 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 "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$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" "$@"
|
84
gradlew.bat
vendored
Normal file
84
gradlew.bat
vendored
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
@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 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=
|
||||||
|
|
||||||
|
@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%\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 %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
: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
|
2
settings.gradle
Normal file
2
settings.gradle
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
rootProject.name = 'MissingIdentifier'
|
||||||
|
|
218
src/main/java/Controll/Admin.java
Normal file
218
src/main/java/Controll/Admin.java
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
package Controll;
|
||||||
|
|
||||||
|
import Modules.Module;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class Admin extends SuperModule {
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Admin.class);
|
||||||
|
public static final String command = "admin";
|
||||||
|
|
||||||
|
public Admin(GuildController guildController) {
|
||||||
|
super(command, guildController, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (Object o : getGuildController().getModuleConfig().keySet()) {
|
||||||
|
sb.append("`").append((String) o).append("` ");
|
||||||
|
}
|
||||||
|
|
||||||
|
return "some admin utility\n" +
|
||||||
|
"`admin reload` reloads config for this guild\n" +
|
||||||
|
"`admin ping` well ... pong i guess\n" +
|
||||||
|
"`admin settings` show current settings of all modules\n" +
|
||||||
|
"`admin setprefix PREFIX` sets new prefix to control bot\n" +
|
||||||
|
"`admin setmodrole @MODROLE` sets new modrole\n" +
|
||||||
|
"`admin MODULE ON/OFF` turn modules on or off\n MODULE s are: " + sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
if (!(genericEvent instanceof GenericGuildEvent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GenericGuildEvent event = (GenericGuildEvent) genericEvent;
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(command + "triggered");
|
||||||
|
|
||||||
|
if (checkForAdmin(thisEvent.getMember())) {
|
||||||
|
logger.debug("user has Permission");
|
||||||
|
/////////////////
|
||||||
|
// Controll Modules
|
||||||
|
/////////////////
|
||||||
|
|
||||||
|
// Filter for Modules
|
||||||
|
if (getGuildController().getModuleConfig().containsKey(thisEvent.getMessage().getContentRaw().split(" ")[1])) {
|
||||||
|
|
||||||
|
// Filter for state to switch to
|
||||||
|
if (thisEvent.getMessage().getContentRaw().split(" ")[2].matches("(?i:(on|true))")) {
|
||||||
|
|
||||||
|
JSONObject newValue = (JSONObject) getGuildController().getModuleConfig().get(thisEvent.getMessage().getContentRaw().split(" ")[1]);
|
||||||
|
newValue.replace(thisEvent.getMessage().getContentRaw().split(" ")[1], "true");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("okay!").queue();
|
||||||
|
|
||||||
|
getGuildController().editModuleConfig(thisEvent.getMessage().getContentRaw().split(" ")[1], newValue);
|
||||||
|
getGuildController().reload(event.getJDA());
|
||||||
|
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().split(" ")[2].matches("(?i:(off|false))")) {
|
||||||
|
JSONObject newValue = (JSONObject) getGuildController().getModuleConfig().get(thisEvent.getMessage().getContentRaw().split(" ")[1]);
|
||||||
|
newValue.replace(thisEvent.getMessage().getContentRaw().split(" ")[1], "false");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("okay!").queue();
|
||||||
|
|
||||||
|
getGuildController().editModuleConfig(thisEvent.getMessage().getContentRaw().split(" ")[1], newValue);
|
||||||
|
getGuildController().removeModule(thisEvent.getMessage().getContentRaw().split(" ")[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!thisEvent.getMember().getRoles().contains(event.getGuild().getRoleById(getGuildController().getMOD_ROLE()))
|
||||||
|
&& !thisEvent.getMember().isOwner()) {
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Sorry bru! your not allowed to do so.").queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// GUILD RELOAD
|
||||||
|
/////////////////
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "reload")) {
|
||||||
|
logger.debug("admin reload in: " + event.getGuild().getId());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Okay!").queue();
|
||||||
|
getGuildController().reload(thisEvent.getJDA());
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// PING
|
||||||
|
/////////////////
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "ping")) {
|
||||||
|
logger.debug("admin ping in: " + event.getGuild().getId());
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
eb.setTitle("Ping stuff");
|
||||||
|
eb.addField("Gateway PING", event.getJDA().getGatewayPing() + " ms", true);
|
||||||
|
eb.addField("JDA PING", event.getJDA().getRestPing().complete() + " ms", true);
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// BOT UPDATE
|
||||||
|
/////////////////
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "update")) {
|
||||||
|
logger.debug("admin update in: " + event.getGuild().getId());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("wish me luck that i won't mess up!").queue();
|
||||||
|
//IO.Bash.runBash("sudo sh /home/pi/MissingIdent/update.sh &");
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// SET PREFIX
|
||||||
|
//////////////////
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "setprefix")) {
|
||||||
|
logger.debug("admin setprefix in: " + event.getGuild().getId());
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getContentRaw().replaceAll("(?is:" + getGuildController().getPREFIX() + command + " setprefix )", "").contains(" ")
|
||||||
|
|| thisEvent.getMessage().getContentRaw().replaceAll("(?is:" + getGuildController().getPREFIX() + command + " setprefix )", "").length() < 1) {
|
||||||
|
thisEvent.getChannel().sendMessage("That's no valid Prefix!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGuildController().editPrefix(thisEvent.getMessage().getContentRaw().replaceAll("(?is:" + getGuildController().getPREFIX() + command + " setprefix )", ""));
|
||||||
|
thisEvent.getChannel().sendMessage("Prefix set to: `" + thisEvent.getMessage().getContentRaw().replaceAll("(?is:" + getGuildController().getPREFIX() + command + " setprefix )", "") + "`").queue();
|
||||||
|
|
||||||
|
getGuildController().reload(event.getJDA());
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// SET MODROLE
|
||||||
|
/////////////////
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + command + " setmodrole .*)")) {
|
||||||
|
logger.debug("admin setmodrole in: " + event.getGuild().getId());
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getMentionedRoles().size() == 1) {
|
||||||
|
|
||||||
|
getGuildController().editModRole(thisEvent.getMessage().getMentionedRoles().get(0).getIdLong());
|
||||||
|
thisEvent.getChannel().sendMessage("Modrole set to: " + thisEvent.getMessage().getMentionedRoles().get(0).getAsMention()).queue();
|
||||||
|
|
||||||
|
getGuildController().reload(event.getJDA());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("Please mention exact one Role!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// SHOW SETTINGS
|
||||||
|
/////////////////
|
||||||
|
} else if(checkForCommand(thisEvent.getMessage().getContentRaw(), command, "settings")) {
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
|
// allways start with admin module:
|
||||||
|
eb.addField(this.getCommand(), this.showSettings(), true);
|
||||||
|
|
||||||
|
for (Module module : getGuildController().getModuleList()){
|
||||||
|
if (module.getCommand().equalsIgnoreCase(command) || module.showSettings() == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
eb.addField(module.getCommand(), module.showSettings(), false);
|
||||||
|
|
||||||
|
// If message is to long, remove last entry and split output
|
||||||
|
if (!eb.isValidLength()) {
|
||||||
|
MessageEmbed.Field field = eb.getFields().remove(eb.getFields().size() - 1);
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
|
||||||
|
eb = new EmbedBuilder();
|
||||||
|
eb.addField(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
|
||||||
|
} else if(thisEvent.getAuthor().getIdLong() == 269085883322335232L){
|
||||||
|
|
||||||
|
/*
|
||||||
|
Hardcoded Part to remove Bot From Guild
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(checkForCommand(thisEvent.getMessage().getContentRaw(), command,"removeGuild")){
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Leaving " + thisEvent.getJDA().getGuildById(thisEvent.getMessage().getContentRaw().replaceAll("^.* .* ", "")).getName()).queue();
|
||||||
|
|
||||||
|
thisEvent.getJDA().getGuildById(Long.parseLong(thisEvent.getMessage().getContentRaw().replaceAll("^.* .* ", ""))).leave().queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("I am afraid, you are not allowed todo that!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "PREFIX: `" + getGuildController().getPREFIX().substring(2, getGuildController().getPREFIX().length()-2) + "`\n" +
|
||||||
|
"MOD-ROLE: `" + ((getGuildController().getJda().getRoleById(getGuildController().getMOD_ROLE()) == null) ? "none" : getGuildController().getJda().getRoleById(getGuildController().getMOD_ROLE()).getName())+ "`";
|
||||||
|
}
|
||||||
|
}
|
173
src/main/java/Controll/Controller.java
Normal file
173
src/main/java/Controll/Controller.java
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
package Controll;
|
||||||
|
|
||||||
|
import IO.JSON;
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.ReadyEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.voice.GenericGuildVoiceEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.GenericUserEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.UserActivityEndEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.UserActivityStartEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.update.UserUpdateActivityOrderEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author https://www.Hiajen.de
|
||||||
|
*/
|
||||||
|
public class Controller extends ListenerAdapter {
|
||||||
|
|
||||||
|
//public static final String CHECKEMOJI = "\u2714";
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Controller.class);
|
||||||
|
|
||||||
|
private final String GUILD_CONFIG_FILE = "GuildConfigs.json";
|
||||||
|
|
||||||
|
public static JSONObject conf;
|
||||||
|
//public static MySQL mySQL;
|
||||||
|
|
||||||
|
private ArrayList<GuildController> guilds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Initializes Attributes
|
||||||
|
* @param conf bot config
|
||||||
|
*/
|
||||||
|
public Controller(JSONObject conf){
|
||||||
|
Controller.conf = conf;
|
||||||
|
|
||||||
|
logger.info("start init MySQL connection");
|
||||||
|
//mySQL = new MySQL(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads All Guilds
|
||||||
|
*/
|
||||||
|
public void reload(JDA jda){
|
||||||
|
|
||||||
|
logger.info("reload Controller");
|
||||||
|
guilds = new ArrayList<GuildController>();
|
||||||
|
|
||||||
|
JSONArray getGuilds = JSON.loadJson(GUILD_CONFIG_FILE);
|
||||||
|
|
||||||
|
for (Object o : getGuilds){
|
||||||
|
guilds.add(new GuildController((JSONObject) o, this, jda));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates Guild config in Database and reloads Guild
|
||||||
|
* @param guildID
|
||||||
|
* @param newValue
|
||||||
|
*/
|
||||||
|
public void editGuildConfig(long guildID, JSONObject newValue){
|
||||||
|
|
||||||
|
JSONArray guilds = JSON.loadJson(GUILD_CONFIG_FILE);
|
||||||
|
|
||||||
|
for (Object o : guilds){
|
||||||
|
JSONObject guild = (JSONObject) o;
|
||||||
|
|
||||||
|
if (Long.parseLong(guild.get("GUILD_ID").toString()) == guildID){
|
||||||
|
guilds.remove(o);
|
||||||
|
guilds.add(newValue);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JSON.saveJson(guilds, GUILD_CONFIG_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// LISTENER
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGenericEvent(@NotNull GenericEvent event){
|
||||||
|
|
||||||
|
if (event instanceof GuildJoinEvent)
|
||||||
|
onGuildJoin((GuildJoinEvent) event);
|
||||||
|
else if (event instanceof GuildLeaveEvent)
|
||||||
|
onGuildLeave((GuildLeaveEvent) event);
|
||||||
|
else if (event instanceof GenericGuildEvent) {
|
||||||
|
guilds.forEach(x -> {
|
||||||
|
if (x.getGUILD_ID() == ((GenericGuildEvent) event).getGuild().getIdLong())
|
||||||
|
x.execute(event);
|
||||||
|
});
|
||||||
|
} else if (event instanceof GenericUserEvent){
|
||||||
|
if (event instanceof UserActivityStartEvent){
|
||||||
|
guilds.forEach(x -> {
|
||||||
|
if (x.getGUILD_ID() == ((UserActivityStartEvent)event).getGuild().getIdLong())
|
||||||
|
x.execute(event);
|
||||||
|
});
|
||||||
|
} else if (event instanceof UserActivityEndEvent){
|
||||||
|
guilds.forEach(x -> {
|
||||||
|
if (x.getGUILD_ID() == ((UserActivityEndEvent)event).getGuild().getIdLong())
|
||||||
|
x.execute(event);
|
||||||
|
});
|
||||||
|
} else if(event instanceof UserUpdateActivityOrderEvent){
|
||||||
|
guilds.forEach(x -> {
|
||||||
|
if (x.getGUILD_ID() == ((UserUpdateActivityOrderEvent)event).getGuild().getIdLong())
|
||||||
|
x.execute(event);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReady(ReadyEvent event){
|
||||||
|
logger.debug("JDA is ready");
|
||||||
|
reload(event.getJDA());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onGuildJoin(@NotNull GuildJoinEvent event){
|
||||||
|
//Check if guild exists
|
||||||
|
for (GuildController guildController : guilds){
|
||||||
|
if (guildController.getGUILD_ID() == event.getGuild().getIdLong())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JSONObject newGuild = new JSONObject();
|
||||||
|
newGuild.put("GUILD_ID", event.getGuild().getIdLong());
|
||||||
|
|
||||||
|
JSONObject newGuildConfig = new JSONObject();
|
||||||
|
newGuildConfig.put("PREFIX", "!");
|
||||||
|
newGuildConfig.put("MODROLE", 123);
|
||||||
|
newGuild.put("config", newGuildConfig);
|
||||||
|
newGuild.put("moduleConfig", new JSONObject());
|
||||||
|
|
||||||
|
JSONArray guilds = JSON.loadJson(GUILD_CONFIG_FILE);
|
||||||
|
guilds.add(newGuild);
|
||||||
|
JSON.saveJson(guilds, GUILD_CONFIG_FILE);
|
||||||
|
|
||||||
|
this.guilds.add(new GuildController(newGuild, this, event.getJDA()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onGuildLeave(@NotNull GuildLeaveEvent event){
|
||||||
|
|
||||||
|
JSONArray guilds = JSON.loadJson(GUILD_CONFIG_FILE);
|
||||||
|
|
||||||
|
for (Object o : guilds){
|
||||||
|
JSONObject guild = (JSONObject) o;
|
||||||
|
|
||||||
|
if (Long.parseLong(guild.get("GUILD_ID").toString()) == event.getGuild().getIdLong()){
|
||||||
|
guilds.remove(o);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JSON.saveJson(guilds, GUILD_CONFIG_FILE);
|
||||||
|
}
|
||||||
|
}
|
209
src/main/java/Controll/GuildController.java
Normal file
209
src/main/java/Controll/GuildController.java
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
package Controll;
|
||||||
|
|
||||||
|
import Modules.*;
|
||||||
|
import Modules.Module;
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.react.GenericGuildMessageReactionEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.GenericUserEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.update.GenericUserPresenceEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GuildController {
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(GuildController.class);
|
||||||
|
|
||||||
|
private ArrayList<Module> modules;
|
||||||
|
|
||||||
|
private String PREFIX;
|
||||||
|
private long GUILD_ID;
|
||||||
|
private long MOD_ROLE;
|
||||||
|
|
||||||
|
private Controller controller;
|
||||||
|
private JSONObject moduleConf;
|
||||||
|
private JDA jda;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init Guild and load settings
|
||||||
|
*/
|
||||||
|
public GuildController(JSONObject config, Controller controller, JDA jda) {
|
||||||
|
|
||||||
|
//safe config
|
||||||
|
this.controller = controller;
|
||||||
|
this.jda = jda;
|
||||||
|
|
||||||
|
GUILD_ID = Long.parseLong(config.get("GUILD_ID").toString());
|
||||||
|
|
||||||
|
JSONObject guildConfig = (JSONObject) config.get("config");
|
||||||
|
PREFIX = "\\Q" + guildConfig.get("PREFIX").toString() + "\\E";
|
||||||
|
MOD_ROLE = Long.parseLong(guildConfig.get("MODROLE").toString());
|
||||||
|
|
||||||
|
moduleConf = (JSONObject) config.get("moduleConfig");
|
||||||
|
loadModules();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* on Update try to execute init modules
|
||||||
|
* @param event update event
|
||||||
|
*/
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent && ((GuildMessageReceivedEvent)event).getAuthor().isBot())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event instanceof GenericGuildMessageReactionEvent && ((GenericGuildMessageReactionEvent)event).getUser().isBot())
|
||||||
|
return;
|
||||||
|
|
||||||
|
modules.forEach(mod -> mod.execute(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getGUILD_ID(){
|
||||||
|
return GUILD_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPREFIX(){
|
||||||
|
return PREFIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMOD_ROLE() {
|
||||||
|
return MOD_ROLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void reload (JDA jda){
|
||||||
|
|
||||||
|
logger.info("reload guild: " + GUILD_ID);
|
||||||
|
|
||||||
|
this.jda = jda;
|
||||||
|
|
||||||
|
loadModules();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadModules() {
|
||||||
|
|
||||||
|
logger.info("load guild modules of:" + GUILD_ID);
|
||||||
|
|
||||||
|
//Init Modules
|
||||||
|
modules = new ArrayList<Module>();
|
||||||
|
|
||||||
|
if (checkForActivate(AutoSelect.COMMAND))
|
||||||
|
modules.add(new AutoSelect(this, (JSONObject) moduleConf.get(AutoSelect.COMMAND)));
|
||||||
|
|
||||||
|
if (checkForActivate(LoveCalc.command))
|
||||||
|
modules.add(new LoveCalc(this));
|
||||||
|
|
||||||
|
if (checkForActivate(Purge.COMMAND))
|
||||||
|
modules.add(new Purge(this));
|
||||||
|
|
||||||
|
|
||||||
|
if (checkForActivate(Quote.command))
|
||||||
|
modules.add(new Quote(this));
|
||||||
|
|
||||||
|
if (checkForActivate(RandomResponde.command))
|
||||||
|
modules.add(new RandomResponde(this, (JSONObject)moduleConf.get(RandomResponde.command)));
|
||||||
|
|
||||||
|
if (checkForActivate(Dice.COMMAND))
|
||||||
|
modules.add(new Dice(this));
|
||||||
|
|
||||||
|
if (checkForActivate(Welcome.command))
|
||||||
|
modules.add(new Welcome(this, (JSONObject)moduleConf.get(Welcome.command)));
|
||||||
|
|
||||||
|
if (checkForActivate(Shuffle.command))
|
||||||
|
modules.add(new Shuffle(this, (JSONObject) moduleConf.get(Shuffle.command)));
|
||||||
|
|
||||||
|
if (checkForActivate(Annoy.COMMAND))
|
||||||
|
modules.add(new Annoy(this, (JSONObject) moduleConf.get(Annoy.COMMAND)));
|
||||||
|
|
||||||
|
if (checkForActivate(VoiceLobby.command))
|
||||||
|
modules.add(new VoiceLobby(this, (JSONObject)moduleConf.get(VoiceLobby.command)));
|
||||||
|
|
||||||
|
if (checkForActivate(Fold.COMMAND))
|
||||||
|
modules.add(new Fold(this));
|
||||||
|
|
||||||
|
if (checkForActivate(Stats.COMMAND))
|
||||||
|
modules.add(new Stats(this, (JSONObject)moduleConf.get(Stats.COMMAND)));
|
||||||
|
|
||||||
|
if (checkForActivate(OnlineHighlight.command))
|
||||||
|
modules.add(new OnlineHighlight(this, (JSONObject)moduleConf.get(OnlineHighlight.command)));
|
||||||
|
|
||||||
|
if (checkForActivate(SecretChannel.COMMAND))
|
||||||
|
modules.add(new SecretChannel(this, (JSONObject)moduleConf.get(SecretChannel.COMMAND)));
|
||||||
|
|
||||||
|
modules.add(new Admin(this));
|
||||||
|
modules.add(new Help(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkForActivate(String moduleName){
|
||||||
|
if (moduleConf.containsKey(moduleName)){
|
||||||
|
logger.info("activate " + moduleName + " in " +getGUILD_ID());
|
||||||
|
return ((JSONObject) moduleConf.get(moduleName)).get(moduleName).equals("true");
|
||||||
|
} else {
|
||||||
|
logger.info("init entry for " + moduleName);
|
||||||
|
moduleConf.put(moduleName, new JSONObject());
|
||||||
|
((JSONObject)moduleConf.get(moduleName)).put(moduleName,"false");
|
||||||
|
editGuildConfig();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONObject getModuleConfig(){
|
||||||
|
return moduleConf;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editModuleConfig(String module, JSONObject newModuleConfig){
|
||||||
|
moduleConf.replace(module, newModuleConfig);
|
||||||
|
editGuildConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editGuildConfig(){
|
||||||
|
JSONObject newGuild = new JSONObject();
|
||||||
|
newGuild.put("GUILD_ID", GUILD_ID);
|
||||||
|
|
||||||
|
JSONObject newGuildConfig = new JSONObject();
|
||||||
|
newGuildConfig.put("PREFIX", PREFIX.substring(2, PREFIX.length()-2));
|
||||||
|
newGuildConfig.put("MODROLE", MOD_ROLE);
|
||||||
|
newGuild.put("config", newGuildConfig);
|
||||||
|
newGuild.put("moduleConfig", moduleConf);
|
||||||
|
|
||||||
|
editGuildConfig(newGuild);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editGuildConfig(JSONObject config){
|
||||||
|
controller.editGuildConfig(GUILD_ID, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeModule(String command){
|
||||||
|
for (Module m : modules){
|
||||||
|
if (m.getCommand().equals(command)){
|
||||||
|
modules.remove(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editPrefix(String prefix){
|
||||||
|
PREFIX = prefix;
|
||||||
|
this.editGuildConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editModRole(Long modrole){
|
||||||
|
MOD_ROLE = modrole;
|
||||||
|
editGuildConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JDA getJda() {
|
||||||
|
return jda;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<Module> getModuleList(){
|
||||||
|
return modules;
|
||||||
|
}
|
||||||
|
}
|
63
src/main/java/Controll/Help.java
Normal file
63
src/main/java/Controll/Help.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
package Controll;
|
||||||
|
|
||||||
|
import Modules.Module;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class Help extends SuperModule {
|
||||||
|
|
||||||
|
public final Logger logger = LoggerFactory.getLogger(Help.class);
|
||||||
|
public static final String command = "help";
|
||||||
|
|
||||||
|
public Help( GuildController guildController){
|
||||||
|
super(command, guildController, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "shows this message";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
if (!(genericEvent instanceof GenericGuildEvent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GenericGuildEvent event = (GenericGuildEvent) genericEvent;
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(command + "triggered");
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder()
|
||||||
|
.setAuthor("Hiajen#9880", "https://www.hiajen.de")
|
||||||
|
.setTitle("BOT by Hiajen#9880");
|
||||||
|
|
||||||
|
for (Module x : getGuildController().getModuleList()){
|
||||||
|
eb.addField(x.getCommand(), x.getDescription(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
121
src/main/java/Controll/SuperModule.java
Normal file
121
src/main/java/Controll/SuperModule.java
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
package Controll;
|
||||||
|
|
||||||
|
import Modules.Module;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public abstract class SuperModule implements Module {
|
||||||
|
|
||||||
|
private GuildController guildController;
|
||||||
|
private JSONObject config;
|
||||||
|
private final String command;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construcker of a Module
|
||||||
|
* @param guildController Guild where Module is used, each guild get its own Module
|
||||||
|
* @param config name of command (this command will be called)
|
||||||
|
*/
|
||||||
|
public SuperModule(String command, GuildController guildController, JSONObject config){
|
||||||
|
this.command = command;
|
||||||
|
this.guildController = guildController;
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SuperModule(String command, GuildController guildController){
|
||||||
|
this.command = command;
|
||||||
|
this.guildController = guildController;
|
||||||
|
this.config = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns Guild where Module is aktive
|
||||||
|
* @return GuildController
|
||||||
|
*/
|
||||||
|
public GuildController getGuildController() {
|
||||||
|
return guildController;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if Given Member is allowed to use Highlevel Commands
|
||||||
|
* @param member User to check
|
||||||
|
* @return true if user as permissions
|
||||||
|
*/
|
||||||
|
public boolean checkForAdmin(Member member){
|
||||||
|
return member.getRoles().contains(guildController.getJda().getGuildById(guildController.getGUILD_ID()).getRoleById(guildController.getMOD_ROLE())) || member.isOwner();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if Message is a valid command speakin to the module
|
||||||
|
* @param message Incomming message
|
||||||
|
* @return true if message is command
|
||||||
|
*/
|
||||||
|
public boolean isCommand(Message message){
|
||||||
|
return message.getContentRaw().matches("(?is:^" + getGuildController().getPREFIX() + command + ".*)");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you want to check if called command is followed by a subcommand use this.
|
||||||
|
* As Example "!admin help" the subcommand would be help.
|
||||||
|
* @param input Message or Text Input
|
||||||
|
* @param subCommand Command to look for
|
||||||
|
* @return true if subcommand is found
|
||||||
|
*/
|
||||||
|
public boolean checkForCommand(String input, String subCommand){
|
||||||
|
return input.matches("(?is:^" + guildController.getPREFIX() + command + " " + subCommand + ".*)");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If your Module dont have a specific command may use this funktion to check for commands anyways
|
||||||
|
* @param input Message or Text Input
|
||||||
|
* @param command Command to look for
|
||||||
|
* @param subCommand SubCommand to look for
|
||||||
|
* @return true if Command is found
|
||||||
|
*/
|
||||||
|
public boolean checkForCommand(String input, String command, String subCommand){
|
||||||
|
return input.matches("(?is:^" + guildController.getPREFIX() + command + "[ ]?" + subCommand + ".*)");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If your command Contains Parameter use this command to extract them
|
||||||
|
* "!foo -baa ipsum" would return ipsum if you look for "baa"
|
||||||
|
* @param input Message or Text Input
|
||||||
|
* @param parameter Name of parameter
|
||||||
|
* @return Value of Parameter
|
||||||
|
*/
|
||||||
|
public String getParameter(String input, String parameter){
|
||||||
|
|
||||||
|
//search for parameter with data
|
||||||
|
Matcher m = Pattern.compile("(?is: -"+ parameter + " [^-]+)").matcher(input);
|
||||||
|
if (m.find()){
|
||||||
|
return m.group(0).replaceFirst("(?is: -" + parameter + " )", "").replaceAll("( )*$", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
//search for flag
|
||||||
|
m = Pattern.compile("(?is: -"+ parameter + ")").matcher(input);
|
||||||
|
if (m.find())
|
||||||
|
return "";
|
||||||
|
|
||||||
|
//return null if not found
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JSONObject getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setConfig(JSONObject config) {
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void safeConfig(JSONObject newConfig){
|
||||||
|
guildController.editModuleConfig(command, newConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void safeConfig(){
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
}
|
22
src/main/java/IO/Bash.java
Normal file
22
src/main/java/IO/Bash.java
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package IO;
|
||||||
|
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class Bash {
|
||||||
|
|
||||||
|
public static void runBash(String command){
|
||||||
|
|
||||||
|
LoggerFactory.getLogger(Bash.class).debug("run bash command: " + command);
|
||||||
|
|
||||||
|
String[] cmd = new String[]{"/bin/sh", command};
|
||||||
|
try {
|
||||||
|
Runtime.getRuntime().exec(cmd);
|
||||||
|
} catch (IOException e){
|
||||||
|
LoggerFactory.getLogger(Bash.class).error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
46
src/main/java/IO/JSON.java
Normal file
46
src/main/java/IO/JSON.java
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package IO;
|
||||||
|
|
||||||
|
import com.cedarsoftware.util.io.JsonWriter;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
/*******************************************************************************************************************
|
||||||
|
* Author: Ansgar [Hiajen]
|
||||||
|
* Usage: Load and Write given JSON data to static location
|
||||||
|
* Credits: t.me/Wursteintopf
|
||||||
|
* state: Done
|
||||||
|
*******************************************************************************************************************/
|
||||||
|
|
||||||
|
public class JSON {
|
||||||
|
|
||||||
|
private static final String PATH = "";
|
||||||
|
|
||||||
|
public static JSONArray loadJson(String filename){
|
||||||
|
|
||||||
|
LoggerFactory.getLogger(JSON.class).info("Open JSON: " + filename);
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONParser parser = new JSONParser();
|
||||||
|
return (JSONArray) parser.parse(new BufferedReader(new FileReader(PATH + filename)));
|
||||||
|
} catch (Exception e) {
|
||||||
|
LoggerFactory.getLogger(JSON.class).error(e.getMessage());
|
||||||
|
return new JSONArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveJson(JSONArray json, String filename){
|
||||||
|
|
||||||
|
LoggerFactory.getLogger(JSON.class).info("Save JSON: " + filename);
|
||||||
|
|
||||||
|
try (BufferedWriter file = new BufferedWriter(new FileWriter(PATH + filename))) {
|
||||||
|
file.write(JsonWriter.formatJson(json.toJSONString()));
|
||||||
|
file.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
LoggerFactory.getLogger(JSON.class).error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
src/main/java/IO/LoadProperties.java
Normal file
39
src/main/java/IO/LoadProperties.java
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
package IO;
|
||||||
|
|
||||||
|
/****************************************************LIBARIES***********************************************************/
|
||||||
|
//Java LIB
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/*******************************************************************************************************************
|
||||||
|
* Author: Ansgar [Hiajen]
|
||||||
|
* reverence: https://crunchify.com/java-properties-file-how-to-read-config-properties-values-in-java/
|
||||||
|
* Usage: Gibt Properties aus angegebenem Datei namen zurück
|
||||||
|
* state: done
|
||||||
|
*******************************************************************************************************************/
|
||||||
|
public class LoadProperties {
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(LoadProperties.class);
|
||||||
|
|
||||||
|
public Properties loadProperties(String propFileName){
|
||||||
|
logger.info("Load Properties: " + propFileName);
|
||||||
|
Properties prop = new Properties();
|
||||||
|
|
||||||
|
try (InputStream is = getClass().getClassLoader().getResourceAsStream(propFileName)){
|
||||||
|
prop.load(is);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return prop;
|
||||||
|
}
|
||||||
|
}
|
204
src/main/java/IO/MySQL.java
Normal file
204
src/main/java/IO/MySQL.java
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
package IO;
|
||||||
|
|
||||||
|
import org.joda.time.Period;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
public class MySQL {
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(MySQL.class);
|
||||||
|
|
||||||
|
//////////////////////Variablen//////////////////////////
|
||||||
|
private Connection conn;
|
||||||
|
private Statement stmt;
|
||||||
|
private ResultSet something;
|
||||||
|
private String driverName = "com.mysql.cj.jdbc.Driver";
|
||||||
|
private JSONObject config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates connection to Database
|
||||||
|
*
|
||||||
|
* Inspired by https://www.vogella.com/tutorials/MySQLJava/article.html
|
||||||
|
*
|
||||||
|
* @param config Bot config for data
|
||||||
|
*/
|
||||||
|
public MySQL(JSONObject config) {
|
||||||
|
this.config = config;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//load driver / config driver
|
||||||
|
logger.debug("Lade DB Treiber");
|
||||||
|
Class driver_class = Class.forName(driverName);
|
||||||
|
Driver dbdriver = (Driver) driver_class.newInstance();
|
||||||
|
DriverManager.registerDriver(dbdriver);
|
||||||
|
|
||||||
|
try {
|
||||||
|
logger.debug("Create connection to Database");
|
||||||
|
//Create connection
|
||||||
|
conn = DriverManager.getConnection("jdbc:" + config.get("SQLServerUrl") + config.get("SQLDBNname") + config.get("SQLDBparameter"), (String) config.get("SQLDBUser"), (String) config.get("SQLDBPassword"));
|
||||||
|
} catch (SQLException e) {
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetS selfchek going
|
||||||
|
Timer timer = new Timer();
|
||||||
|
timer.scheduleAtFixedRate(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
stmt = conn.createStatement();
|
||||||
|
|
||||||
|
//SQL Command
|
||||||
|
something = stmt.executeQuery("SELECT 1 FROM Guild;");
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error("Database is down! Reconnect!");
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
1000L, 1000*60*15L);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare, execute a SQL query and returns result
|
||||||
|
*
|
||||||
|
* @param pInput SQL Query as String
|
||||||
|
* @return ResultSet Result of query as ResultSet
|
||||||
|
*/
|
||||||
|
public ResultSet mySQLDataQuery(String pInput){
|
||||||
|
logger.debug("execute SQLQuerry: " + pInput);
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Create statement
|
||||||
|
stmt = conn.createStatement();
|
||||||
|
|
||||||
|
//SQL Command
|
||||||
|
something = stmt.executeQuery(pInput);
|
||||||
|
} catch (SQLNonTransientConnectionException ex) {
|
||||||
|
logger.error(ex.getMessage());
|
||||||
|
|
||||||
|
//Something happend reload connection
|
||||||
|
reload();
|
||||||
|
//redo querry
|
||||||
|
//return mySQLDataQuery(pInput);
|
||||||
|
|
||||||
|
} catch (SQLException e){
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
return something;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare, execute a SQLUpdate query and returns result
|
||||||
|
* checks for simple SQL injection
|
||||||
|
*
|
||||||
|
* @param pInput SQL Query Blueprint as String
|
||||||
|
* @param pParameter Data for Blueprint
|
||||||
|
* @return key ID of created data INDEX
|
||||||
|
*/
|
||||||
|
public int mySQLDataUpdate(String pInput, String[] pParameter){
|
||||||
|
logger.debug("execute SQLUpdate:" + pInput);
|
||||||
|
int key = -1;
|
||||||
|
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
|
||||||
|
//set Blueprint
|
||||||
|
stmt = conn.prepareStatement(pInput);
|
||||||
|
|
||||||
|
// Replace Wildcards with Data
|
||||||
|
for(int i = 0; i < pParameter.length; i++){
|
||||||
|
|
||||||
|
stmt.setString(i+1, pParameter[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//logger.debug("Execute update");
|
||||||
|
stmt.executeUpdate();
|
||||||
|
conn.commit();
|
||||||
|
|
||||||
|
//get generated INDEX IDs
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
Statement stmt2 = null;
|
||||||
|
stmt2 = conn.createStatement();
|
||||||
|
ResultSet tmp = stmt2.executeQuery("SELECT LAST_INSERT_ID();");
|
||||||
|
|
||||||
|
if(tmp.next()){
|
||||||
|
key = Integer.parseInt(tmp.getString(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLNonTransientConnectionException ex) {
|
||||||
|
logger.error(ex.getMessage());
|
||||||
|
//Something happend reload connection
|
||||||
|
reload();
|
||||||
|
//redo querry
|
||||||
|
//return mySQLDataUpdate(pInput, pParameter);
|
||||||
|
|
||||||
|
} catch (SQLException e ) {
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closes current connection and reload it
|
||||||
|
*/
|
||||||
|
private void reload(){
|
||||||
|
cleanUp();
|
||||||
|
|
||||||
|
try {
|
||||||
|
//load driver / config driver
|
||||||
|
logger.debug("Lade DB Treiber");
|
||||||
|
Class driver_class = Class.forName(driverName);
|
||||||
|
Driver dbdriver = (Driver) driver_class.newInstance();
|
||||||
|
DriverManager.registerDriver(dbdriver);
|
||||||
|
|
||||||
|
try {
|
||||||
|
logger.debug("Create connection to Database");
|
||||||
|
//Create connection
|
||||||
|
conn = DriverManager.getConnection("jdbc:" + config.get("SQLServerUrl") + config.get("SQLDBNname") + config.get("SQLDBparameter"), (String) config.get("SQLDBUser"), (String) config.get("SQLDBPassword"));
|
||||||
|
} catch (SQLException e) {
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
logger.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inspired by https://www.vogella.com/tutorials/MySQLJava/article.html
|
||||||
|
*
|
||||||
|
* CleanUp of SQL connection
|
||||||
|
*/
|
||||||
|
public void cleanUp(){
|
||||||
|
logger.debug("Close database connection");
|
||||||
|
try {
|
||||||
|
if (something != null)
|
||||||
|
something.close();
|
||||||
|
|
||||||
|
if (stmt != null)
|
||||||
|
stmt.close();
|
||||||
|
|
||||||
|
conn.setAutoCommit(true);
|
||||||
|
|
||||||
|
if (conn != null)
|
||||||
|
conn.close();
|
||||||
|
|
||||||
|
something = null;
|
||||||
|
stmt = null;
|
||||||
|
conn = null;
|
||||||
|
} catch(SQLException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
57
src/main/java/MissingIDent.java
Normal file
57
src/main/java/MissingIDent.java
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import Controll.Controller;
|
||||||
|
import net.dv8tion.jda.api.AccountType;
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.Activity;
|
||||||
|
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||||
|
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||||
|
import net.dv8tion.jda.api.utils.cache.CacheFlag;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author https://www.Hiajen.de
|
||||||
|
*/
|
||||||
|
public class MissingIDent {
|
||||||
|
/***************************************
|
||||||
|
* Usage: Main Function Initialise lissener and Core
|
||||||
|
* state: progress
|
||||||
|
* @author Ansgar [Hiajen]
|
||||||
|
* @param args
|
||||||
|
***************************************/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(MissingIDent.class);
|
||||||
|
|
||||||
|
logger.info("Bot Started");
|
||||||
|
|
||||||
|
JSONArray configArr = IO.JSON.loadJson("config.json");
|
||||||
|
logger.info("Config Loaded");
|
||||||
|
|
||||||
|
JSONObject config = (JSONObject) configArr.get(0);
|
||||||
|
|
||||||
|
logger.info("start init JDA");
|
||||||
|
|
||||||
|
JDA api = JDABuilder
|
||||||
|
.createDefault(config.get("TOCKEN").toString())
|
||||||
|
.enableIntents(GatewayIntent.GUILD_PRESENCES)
|
||||||
|
.setMemberCachePolicy(MemberCachePolicy.ONLINE)
|
||||||
|
.enableCache(CacheFlag.ACTIVITY)
|
||||||
|
.addEventListeners(new Controller(config))
|
||||||
|
.setActivity(Activity.watching("Binaries"))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
CONFIG FILE:
|
||||||
|
* SQLServerUrl
|
||||||
|
* SQLDBNname
|
||||||
|
* SQLDBparameter
|
||||||
|
* SQLDBUser
|
||||||
|
* SQLDBPassword
|
||||||
|
* TOCKEN
|
||||||
|
|
||||||
|
*/
|
116
src/main/java/Modules/Annoy.java
Normal file
116
src/main/java/Modules/Annoy.java
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
public class Annoy extends SuperModule{
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public static final String COMMAND = "annoy";
|
||||||
|
|
||||||
|
public Annoy(GuildController guildController, JSONObject config){
|
||||||
|
super(COMMAND, guildController, config);
|
||||||
|
|
||||||
|
if (!config.containsKey("message")){
|
||||||
|
getConfig().put("message", "Hay, could you may self assign a role in $GUILD ?");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
this.message = getConfig().get("message").toString();
|
||||||
|
keepPoking();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return Annoy.COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "annoy lazy people until they pick some roles :b\n" +
|
||||||
|
"`annoy setText` set Text people get annoyed with" +
|
||||||
|
"`$GUILD` and `$USER` gets replaced";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
if (!(genericEvent instanceof GenericGuildEvent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GenericGuildEvent event = (GenericGuildEvent) genericEvent;
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (checkForCommand(thisEvent.getMessage().getContentRaw(), "setText")){
|
||||||
|
if (checkForAdmin(thisEvent.getMember())){
|
||||||
|
getConfig().replace("message",
|
||||||
|
thisEvent.getMessage().getContentRaw().replaceAll("(?is:^" + getGuildController().getPREFIX() + COMMAND + " setText )", ""));
|
||||||
|
safeConfig(getConfig());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Set Annoy text to: `" +
|
||||||
|
thisEvent.getMessage().getContentRaw().replaceAll("(?is:^" + getGuildController().getPREFIX() + COMMAND + " setText )", "")
|
||||||
|
+ "`").queue();
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("I am afraid, you are not allowed todo that!").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "MESSAGE: `" + message + "`";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void keepPoking(){
|
||||||
|
|
||||||
|
TimerTask repeatedTask = new TimerTask() {
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.setTime(new Date());
|
||||||
|
int hour = cal.get(Calendar.HOUR_OF_DAY);
|
||||||
|
int minutes = cal.get(Calendar.MINUTE);
|
||||||
|
|
||||||
|
if(hour == 9 && minutes >= 30)
|
||||||
|
|
||||||
|
for(Member m : getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getMembers()){
|
||||||
|
if(m.getRoles().isEmpty()){
|
||||||
|
m.getUser().openPrivateChannel().queue(
|
||||||
|
privateChannel -> privateChannel.sendMessage(
|
||||||
|
new EmbedBuilder().setDescription(
|
||||||
|
message
|
||||||
|
.replaceAll("\\$GUILD", getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getName())
|
||||||
|
.replaceAll("\\$USER", m.getEffectiveName())
|
||||||
|
).setTimestamp(new Date().toInstant()).setImage(
|
||||||
|
getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getIconUrl()
|
||||||
|
).build()).queue()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Timer timer = new Timer("AnnoyTimer");
|
||||||
|
long delay = 1000L;
|
||||||
|
long period = 1000L * 60L * 30L;
|
||||||
|
timer.scheduleAtFixedRate(repeatedTask, delay, period);
|
||||||
|
}
|
||||||
|
}
|
428
src/main/java/Modules/AutoSelect.java
Normal file
428
src/main/java/Modules/AutoSelect.java
Normal file
|
@ -0,0 +1,428 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
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.MessageReaction;
|
||||||
|
import net.dv8tion.jda.api.entities.PermissionOverride;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class AutoSelect extends SuperModule {
|
||||||
|
|
||||||
|
private static final String WAITING_FOR_REACTION_ROLE= "Okay! Please React to a Message you want to bind the Role to!";
|
||||||
|
private static final String WAITING_FOR_REACTION_TEXTCHANNEL = "Okay! Please React to a Message you want to bind the TextChannel to!";
|
||||||
|
private static final String WAITING_FOR_REACTION_CATEGORY= "Okay! Please React to a Message you want to bind the Category to!";
|
||||||
|
private static final String WAITING_FOR_REACTION_VOICECHANNEL = "Okay! Please React to a Message you want to bind the VoiceChannel to!";
|
||||||
|
private static final String WAITING_FOR_REACTION_REMOVE = "Okay, please react/unreact to a activ Connection to remove it!!";
|
||||||
|
private static final String ERROR_NO_VALID_INPUT_ID = "That is not a valid Category ID or VoiceChannel ID!";
|
||||||
|
private static final String ERROR_NO_VALID_INPUT_GENERAL = "That is not a valid input! \n Please mention exact one Role / TextChannel / CategoryID / VoiceChannelID";
|
||||||
|
private static final String ERROR_ALREADY_EXISTS = "Connection already exists! Abort.";
|
||||||
|
private static final String CONFIRM_DELETE = "Connection deleted!";
|
||||||
|
private static final String CONFIRM_ADDED= "Connection Added!";
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(AutoSelect.class);
|
||||||
|
public static final String COMMAND = "AutoSelect";
|
||||||
|
|
||||||
|
private HashMap<Long, TmpData> awatingReactionFrom;
|
||||||
|
|
||||||
|
public AutoSelect(GuildController guildController, JSONObject config){
|
||||||
|
super(COMMAND, guildController, config);
|
||||||
|
|
||||||
|
awatingReactionFrom = new HashMap<Long, TmpData>();
|
||||||
|
|
||||||
|
if (!config.containsKey("connections")){
|
||||||
|
config.put("connections", new JSONArray());
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription(){
|
||||||
|
return "Setup Roles/Channels/Categories Members can self assign.\nFor Channels/Categories bot assigns View, Read, write, connect, speak rights. Rest have to be managed by your self.\n" +
|
||||||
|
"`AutoSelect new <@ROLE | #TEXTCHANNEL | CATEGORYID | VOICECHANNELID>` add a connection" +
|
||||||
|
"`AutoSelect remove` remove a connection";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// On DELETE
|
||||||
|
//////////////////
|
||||||
|
if (event instanceof GuildMessageDeleteEvent){
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
GuildMessageDeleteEvent thisEvent = (GuildMessageDeleteEvent) event;
|
||||||
|
|
||||||
|
JSONArray connections = (JSONArray)getConfig().get("connections");
|
||||||
|
|
||||||
|
for (Object o : connections){ // Go through every entry
|
||||||
|
JSONObject connection = (JSONObject) o;
|
||||||
|
|
||||||
|
if (connection.get("messageID").toString().equals(thisEvent.getMessageId())){
|
||||||
|
|
||||||
|
logger.info("Delete Connection:" + connection.get("targetID") + " | " + connection.get("messageID") + " | " + connection.get("reactionEmote"));
|
||||||
|
connections.remove(o);
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// On MESSAGE
|
||||||
|
//////////////////
|
||||||
|
} else if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
if (checkForAdmin(thisEvent.getMember())){
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Init New Connection
|
||||||
|
//////////////////
|
||||||
|
if (checkForCommand(thisEvent.getMessage().getContentRaw(), "new")){
|
||||||
|
if (thisEvent.getMessage().getMentionedRoles().size() == 1){ // Process for roles
|
||||||
|
|
||||||
|
addWaitState(thisEvent.getMember().getIdLong(), // add to waitList
|
||||||
|
new TmpData(
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
WAITING_FOR_REACTION_ROLE).complete(),
|
||||||
|
thisEvent.getMessage().getMentionedRoles().get(0).getIdLong(),
|
||||||
|
"role"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} else if (thisEvent.getMessage().getMentionedChannels().size() == 1) { // Process for Channels
|
||||||
|
|
||||||
|
addWaitState(thisEvent.getMember().getIdLong(), // add to waitList
|
||||||
|
new TmpData(
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
WAITING_FOR_REACTION_TEXTCHANNEL).complete(),
|
||||||
|
thisEvent.getMessage().getMentionedChannels().get(0).getIdLong(),
|
||||||
|
"text-channel"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().matches("(?is:.*[0-9]+$)")) { // Process for Category
|
||||||
|
|
||||||
|
Matcher m = Pattern.compile("[0-9]+$").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
|
||||||
|
if (m.find()){ // Just to make sure, lol
|
||||||
|
if (thisEvent.getGuild().getCategoryById(m.group(0)) != null){ // check if found ID is a Category ID
|
||||||
|
addWaitState(thisEvent.getMember().getIdLong(), // add to waitList
|
||||||
|
new TmpData(
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
WAITING_FOR_REACTION_CATEGORY).complete(),
|
||||||
|
Long.parseLong(m.group(0)),
|
||||||
|
"category"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else if (thisEvent.getGuild().getVoiceChannelById(m.group(0)) != null) { // check if found ID is a VoiceChannel ID
|
||||||
|
addWaitState(thisEvent.getMember().getIdLong(), // add to waitList
|
||||||
|
new TmpData(
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
WAITING_FOR_REACTION_VOICECHANNEL).complete(),
|
||||||
|
Long.parseLong(m.group(0)),
|
||||||
|
"voice-channel"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else { // If ID is not a Category ID send error
|
||||||
|
thisEvent.getChannel().sendMessage(ERROR_NO_VALID_INPUT_ID).queue(msg -> msg.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage(ERROR_NO_VALID_INPUT_GENERAL).queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Init remove Connection
|
||||||
|
//////////////////
|
||||||
|
} if (checkForCommand(thisEvent.getMessage().getContentRaw(), "remove")){
|
||||||
|
// Setup wait state
|
||||||
|
|
||||||
|
addWaitState(thisEvent.getMember().getIdLong(),
|
||||||
|
new TmpData(
|
||||||
|
thisEvent.getChannel().sendMessage(WAITING_FOR_REACTION_REMOVE).complete()
|
||||||
|
,0
|
||||||
|
,"delete")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else
|
||||||
|
//delete for no spam
|
||||||
|
thisEvent.getMessage().delete().queue();
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// On REACTION ADD
|
||||||
|
//////////////////
|
||||||
|
} else if (event instanceof GuildMessageReactionAddEvent) {
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
GuildMessageReactionAddEvent thisEvent = (GuildMessageReactionAddEvent)event;
|
||||||
|
|
||||||
|
if (awatingReactionFrom.containsKey(thisEvent.getUserIdLong())){ // check if reaction is by user we wait for
|
||||||
|
|
||||||
|
if (awatingReactionFrom.get(thisEvent.getUserIdLong()).targetType.equalsIgnoreCase("delete")){ // check if we have to delete
|
||||||
|
|
||||||
|
// REMOVE CONNECTION
|
||||||
|
removeConnection(thisEvent.getMessageId(), thisEvent.getReactionEmote(), thisEvent.getChannel().getIdLong());
|
||||||
|
|
||||||
|
awatingReactionFrom.get(thisEvent.getUserIdLong()).message.editMessage(CONFIRM_DELETE).queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
awatingReactionFrom.remove(thisEvent.getUserIdLong());
|
||||||
|
} else {
|
||||||
|
// ADD CONNECTION
|
||||||
|
JSONObject newConnection = new JSONObject();
|
||||||
|
newConnection.put("targetID", awatingReactionFrom.get(thisEvent.getUserIdLong()).targetID);
|
||||||
|
newConnection.put("messageID", thisEvent.getMessageIdLong());
|
||||||
|
newConnection.put("reactionEmote", thisEvent.getReactionEmote().getName());
|
||||||
|
newConnection.put("targetType", awatingReactionFrom.get(thisEvent.getUserIdLong()).targetType);
|
||||||
|
|
||||||
|
//Check if reaction already connected to a role
|
||||||
|
JSONArray connections = (JSONArray)getConfig().get("connections");
|
||||||
|
|
||||||
|
for (Object o : connections){
|
||||||
|
JSONObject connection = (JSONObject) o;
|
||||||
|
|
||||||
|
if (connection.get("messageID").toString().equals(thisEvent.getMessageId())
|
||||||
|
&& connection.get("reactionEmote").toString().equals(thisEvent.getReactionEmote().getName())){
|
||||||
|
|
||||||
|
awatingReactionFrom.get(thisEvent.getUserIdLong()).message.editMessage(ERROR_ALREADY_EXISTS).complete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Create Connection:" + newConnection.get("targetID") + " | " + newConnection.get("messageID") + " | " + newConnection.get("reactionEmote"));
|
||||||
|
|
||||||
|
connections.add(newConnection);
|
||||||
|
|
||||||
|
awatingReactionFrom.remove(thisEvent.getUserIdLong()).message.editMessage(CONFIRM_ADDED).queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
//switch for emojo or Emote
|
||||||
|
if (thisEvent.getReactionEmote().isEmoji())
|
||||||
|
thisEvent.getChannel().addReactionById(thisEvent.getMessageIdLong(), thisEvent.getReactionEmote().getName()).queue();
|
||||||
|
else
|
||||||
|
thisEvent.getChannel().addReactionById(thisEvent.getMessageIdLong(), thisEvent.getReactionEmote().getEmote()).queue();
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// CHECK IF CONNECTED REACTION AND ADD
|
||||||
|
|
||||||
|
JSONArray connections = (JSONArray)getConfig().get("connections");
|
||||||
|
|
||||||
|
for (Object o : connections){
|
||||||
|
JSONObject connection = (JSONObject) o;
|
||||||
|
|
||||||
|
if (connection.get("messageID").toString().equals(thisEvent.getMessageId())
|
||||||
|
&& connection.get("reactionEmote").toString().equals(thisEvent.getReactionEmote().getName())){
|
||||||
|
|
||||||
|
PermissionOverride po; // Permission Override Object to avoid conflicting scopes
|
||||||
|
|
||||||
|
switch (connection.get("targetType").toString()){
|
||||||
|
case "role":
|
||||||
|
thisEvent.getGuild().addRoleToMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(connection.get("targetID").toString())).queue();
|
||||||
|
break;
|
||||||
|
case "text-channel":
|
||||||
|
|
||||||
|
thisEvent.getGuild().getTextChannelById(connection.get("targetID").toString()).upsertPermissionOverride(thisEvent.getMember()).complete()
|
||||||
|
.getManager().setAllow(Permission.MESSAGE_WRITE,
|
||||||
|
Permission.MESSAGE_READ,
|
||||||
|
Permission.VIEW_CHANNEL).queue();
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "voice-channel":
|
||||||
|
|
||||||
|
thisEvent.getGuild().getVoiceChannelById(connection.get("targetID").toString()).upsertPermissionOverride(thisEvent.getMember()).complete()
|
||||||
|
.getManager().setAllow(Permission.VOICE_CONNECT,
|
||||||
|
Permission.VIEW_CHANNEL,
|
||||||
|
Permission.VOICE_SPEAK).queue();
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "category":
|
||||||
|
|
||||||
|
thisEvent.getGuild().getCategoryById(connection.get("targetID").toString()).upsertPermissionOverride(thisEvent.getMember()).complete()
|
||||||
|
.getManager().setAllow(Permission.VOICE_CONNECT,
|
||||||
|
Permission.VIEW_CHANNEL,
|
||||||
|
Permission.VOICE_SPEAK,
|
||||||
|
Permission.MESSAGE_READ,
|
||||||
|
Permission.MESSAGE_WRITE).queue();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
logger.info("ADDED target " + connection.get("targetID") + " to User" + thisEvent.getMember().getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// On REACTION REMOVE
|
||||||
|
//////////////////
|
||||||
|
} else if (event instanceof GuildMessageReactionRemoveEvent){
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
GuildMessageReactionRemoveEvent thisEvent = (GuildMessageReactionRemoveEvent) event;
|
||||||
|
|
||||||
|
if (awatingReactionFrom.containsKey(thisEvent.getUserIdLong())){
|
||||||
|
if (awatingReactionFrom.get(thisEvent.getUserIdLong()).targetType.equalsIgnoreCase("delete")){
|
||||||
|
|
||||||
|
// REMOVE CONNECTION
|
||||||
|
removeConnection(thisEvent.getMessageId(), thisEvent.getReactionEmote(), thisEvent.getChannel().getIdLong());
|
||||||
|
|
||||||
|
awatingReactionFrom.remove(thisEvent.getUserIdLong()).message.editMessage(CONFIRM_DELETE).queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// CHECK IF CONNECTED REACTION AND REMOVE
|
||||||
|
JSONArray connections = (JSONArray)getConfig().get("connections");
|
||||||
|
|
||||||
|
for (Object o : connections){
|
||||||
|
JSONObject connection = (JSONObject) o;
|
||||||
|
|
||||||
|
if (connection.get("messageID").toString().equals(thisEvent.getMessageId())
|
||||||
|
&& connection.get("reactionEmote").toString().equals(thisEvent.getReactionEmote().getName())){
|
||||||
|
|
||||||
|
PermissionOverride po; // Permission Override Object to avoid conflicting scopes
|
||||||
|
Member member = thisEvent.retrieveMember().complete();
|
||||||
|
|
||||||
|
switch (connection.get("targetType").toString()){
|
||||||
|
case "role":
|
||||||
|
|
||||||
|
if (thisEvent.getGuild().getRoleById(connection.get("targetID").toString()) != null) {
|
||||||
|
thisEvent.getGuild().removeRoleFromMember(member, thisEvent.getGuild().getRoleById(connection.get("targetID").toString())).queue();
|
||||||
|
} else { // REMOVE DEPRECATED CONNECTION
|
||||||
|
((JSONArray)getConfig().get("connections")).remove(o);
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "text-channel":
|
||||||
|
if (thisEvent.getGuild().getTextChannelById(connection.get("targetID").toString()) != null) {
|
||||||
|
thisEvent.getGuild().getTextChannelById(connection.get("targetID").toString()).getPermissionOverride(member).delete().queue();
|
||||||
|
} else { // REMOVE DEPRECATED CONNECTION
|
||||||
|
((JSONArray)getConfig().get("connections")).remove(o);
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "voice-channel":
|
||||||
|
|
||||||
|
if (thisEvent.getGuild().getVoiceChannelById(connection.get("targetID").toString()) != null) {
|
||||||
|
thisEvent.getGuild().getVoiceChannelById(connection.get("targetID").toString()).getPermissionOverride(member).delete().queue();
|
||||||
|
} else { // REMOVE DEPRECATED CONNECTION
|
||||||
|
((JSONArray)getConfig().get("connections")).remove(o);
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "category":
|
||||||
|
|
||||||
|
if (thisEvent.getGuild().getCategoryById(connection.get("targetID").toString()) != null) {
|
||||||
|
thisEvent.getGuild().getCategoryById(connection.get("targetID").toString()).getPermissionOverride(member).delete().queue();
|
||||||
|
} else { // REMOVE DEPRECATED CONNECTION
|
||||||
|
((JSONArray)getConfig().get("connections")).remove(o);
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("REMOVED target " + connection.get("targetID") + " to User" + member.getUser().getId());
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeConnection(String messageId, MessageReaction.ReactionEmote reactionEmote, long channelID) {
|
||||||
|
|
||||||
|
JSONArray connections = (JSONArray)getConfig().get("connections");
|
||||||
|
|
||||||
|
for (Object o : connections) {
|
||||||
|
JSONObject connection = (JSONObject) o;
|
||||||
|
try {
|
||||||
|
if (reactionEmote.isEmoji()) {
|
||||||
|
reactionEmote.getJDA().getGuildById(getGuildController().getGUILD_ID()).getTextChannelById(channelID).clearReactionsById(messageId, reactionEmote.getName());
|
||||||
|
} else {
|
||||||
|
reactionEmote.getJDA().getGuildById(getGuildController().getGUILD_ID()).getTextChannelById(channelID).clearReactionsById(messageId, reactionEmote.getEmote());
|
||||||
|
}
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection.get("messageID").toString().equalsIgnoreCase(messageId)
|
||||||
|
&& connection.get("reactionEmote").toString().equals(reactionEmote.getName())) {
|
||||||
|
|
||||||
|
logger.info("Delete Connection:" + connection.get("targetID") + " | " + connection.get("messageID") + " | " + connection.get("reactionEmote"));
|
||||||
|
|
||||||
|
connections.remove(o);
|
||||||
|
safeConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "NUMBER OF CONNECTIONS: `" + ((JSONArray)getConfig().get("connections")).size() + "`";
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TmpData{
|
||||||
|
public Message message;
|
||||||
|
public long targetID;
|
||||||
|
public String reactionEmote;
|
||||||
|
public String targetType;
|
||||||
|
|
||||||
|
public TmpData(Message message, long targetID, String targetType){
|
||||||
|
this.message = message;
|
||||||
|
this.targetID = targetID;
|
||||||
|
this.targetType = targetType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addWaitState(long userID, TmpData tmpData){
|
||||||
|
|
||||||
|
// Setup wait state
|
||||||
|
awatingReactionFrom.put(userID, tmpData);
|
||||||
|
|
||||||
|
// Setup timer to remove waitstate
|
||||||
|
new Timer().schedule(new TimerTask(){
|
||||||
|
public void run(){
|
||||||
|
awatingReactionFrom.remove(userID).message.editMessage("TimeOut!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
}, TimeUnit.SECONDS.toMillis(60));
|
||||||
|
}
|
||||||
|
}
|
156
src/main/java/Modules/Dice.java
Normal file
156
src/main/java/Modules/Dice.java
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class Dice extends SuperModule {
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Dice.class);
|
||||||
|
public static final String COMMAND = "dice";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construcker of a Module
|
||||||
|
*
|
||||||
|
* @param guildController Guild where Module is used, each guild get its own Module
|
||||||
|
*/
|
||||||
|
public Dice(GuildController guildController) {
|
||||||
|
super(COMMAND, guildController);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Dice uhm some bits\n" +
|
||||||
|
"`-n NUMBER` number of repeats\n" +
|
||||||
|
"`-r NUMBER` range of digits";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
int numberOfTimes = 1;
|
||||||
|
int range = 6;
|
||||||
|
|
||||||
|
Matcher m = Pattern.compile("(?is:-n [0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
if (m.find()) {
|
||||||
|
numberOfTimes = Integer.parseInt(m.group(0).replaceAll("^...", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
m = Pattern.compile("(?is:-r [0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
if (m.find()) {
|
||||||
|
range = Integer.parseInt(m.group(0).replaceAll("^...", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
SecureRandom r = new SecureRandom();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Your dices:\n");
|
||||||
|
|
||||||
|
if (range <= 6) {
|
||||||
|
if (numberOfTimes < 10) {
|
||||||
|
for (int i = 0; i < numberOfTimes; i++) {
|
||||||
|
switch (r.nextInt(range + 1)) {
|
||||||
|
case 1:
|
||||||
|
sb.append(" . \n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sb.append(" :\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sb.append(" :.\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sb.append(" ::\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sb.append(" :.:\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sb.append(" :::\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int[] counter = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||||
|
for (int i = 0; i < numberOfTimes; i++) {
|
||||||
|
int rand = r.nextInt(range + 1);
|
||||||
|
if (rand > 0)
|
||||||
|
counter[rand]++;
|
||||||
|
else
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i <= range; i++) {
|
||||||
|
switch (i) {
|
||||||
|
case 1:
|
||||||
|
sb.append(counter[i]).append("x - .\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sb.append(counter[i]).append("x - :\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sb.append(counter[i]).append("x - :.\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sb.append(counter[i]).append("x - ::\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sb.append(counter[i]).append("x - :.:\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sb.append(counter[i]).append("x - :::\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int[] counter = new int[range+1];
|
||||||
|
|
||||||
|
Arrays.fill(counter, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < numberOfTimes; i++){
|
||||||
|
int rand = r.nextInt(range+1);
|
||||||
|
if (rand > 0)
|
||||||
|
counter[rand]++;
|
||||||
|
else
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int num = 1; num <= range; num++){
|
||||||
|
sb.append(counter[num]).append("x ").append(num).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(sb.toString()).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
251
src/main/java/Modules/Fold.java
Normal file
251
src/main/java/Modules/Fold.java
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import javax.net.ssl.X509TrustManager;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class Fold extends SuperModule{
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Fold.class);
|
||||||
|
public static final String COMMAND = "fold";
|
||||||
|
|
||||||
|
private static final int BYTE_LIMIT = 16 * 1024;
|
||||||
|
private static final int MAX_MESSAGE_LIMIT = 10;
|
||||||
|
|
||||||
|
private static final String teamSummary = "https://apps.foldingathome.org/daily_team_summary.txt",
|
||||||
|
userSummary = "https://apps.foldingathome.org/daily_user_summary.txt";
|
||||||
|
|
||||||
|
private String teamFile = "/home/bots/MissingIdentifier/MissingIdent/team_summary.txt",
|
||||||
|
userFile = "/home/bots/MissingIdentifier/MissingIdent/user_summary.txt";
|
||||||
|
|
||||||
|
public Fold(GuildController guildController){
|
||||||
|
super(COMMAND, guildController, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return Fold.COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Get statistics for a team that partakes in https://foldingathome.org\n`fold -t TEAMNAME` teamname to be filtered\n`fold -u update` update statistics";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
if (!(genericEvent instanceof GuildMessageReceivedEvent)) return;
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent event = (GuildMessageReceivedEvent) genericEvent;
|
||||||
|
|
||||||
|
if (!isCommand(event.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug("Fold command triggered");
|
||||||
|
|
||||||
|
//VARS
|
||||||
|
Pattern teamPattern, userPattern;
|
||||||
|
Message msg = event.getChannel().sendMessage("Got it!").complete();
|
||||||
|
String teamInfo = null;
|
||||||
|
|
||||||
|
// Update Locale Files if parameter "u" is given
|
||||||
|
if (getParameter(event.getMessage().getContentRaw(), "u") != null)
|
||||||
|
msg = update(event, msg);
|
||||||
|
|
||||||
|
// Generate Pattern to look for decide if looking for ID or Name of Team fall back is null and will cause an error
|
||||||
|
if (getParameter(event.getMessage().getContentRaw(), "t") != null) {
|
||||||
|
String input = getParameter(event.getMessage().getContentRaw(), "t");
|
||||||
|
logger.info("looking for team: " + input);
|
||||||
|
teamPattern = Pattern.compile("(?m)^[0-9]+\\t" + input + "\\t[0-9]+\\t[0-9]+$");
|
||||||
|
} else if (getParameter(event.getMessage().getContentRaw(), "id") != null) {
|
||||||
|
String input = getParameter(event.getMessage().getContentRaw(), "id");
|
||||||
|
logger.info("looking for team: " + input);
|
||||||
|
teamPattern = Pattern.compile("(?m)^" + input + "\\t[^\\t]*\\t[0-9]+\\t[0-9]+$");
|
||||||
|
} else
|
||||||
|
return; // TODO error handling
|
||||||
|
|
||||||
|
|
||||||
|
//LOOK for Team
|
||||||
|
try (BufferedReader teamReader = Files.newBufferedReader(Paths.get(teamFile))) {
|
||||||
|
|
||||||
|
teamInfo = teamReader.readLine();
|
||||||
|
while (teamInfo != null) {
|
||||||
|
Matcher teamMatcher = teamPattern.matcher(teamInfo);
|
||||||
|
if (teamMatcher.find()) {
|
||||||
|
// Send quick info
|
||||||
|
msg = msg.editMessage(teamMatcher.group()).complete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
teamInfo = teamReader.readLine();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (teamInfo == null) {
|
||||||
|
msg.editMessage("No team with this Identifier found!").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for users
|
||||||
|
try (BufferedReader userReader = Files.newBufferedReader(Paths.get(userFile))) {
|
||||||
|
|
||||||
|
// Like skringbuilder only for embeded messages
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
|
// Add Team info
|
||||||
|
eb.setTitle(teamInfo.split("\t")[1] + " [ " + teamInfo.split("\t")[0] + " ]"); // Team Name
|
||||||
|
eb.setDescription("Work Units done:\t" + teamInfo.split("\t")[3] + "\n" +
|
||||||
|
"Total Score:\t\t" + teamInfo.split("\t")[2]); // WUs and Score
|
||||||
|
eb.setTimestamp(new DateTime().toDate().toInstant());
|
||||||
|
|
||||||
|
userPattern = Pattern.compile("(?m)^[0-9a-zA-Z_]+\\t[0-9]+\\t[0-9]+\\t" + teamInfo.split("\t")[0] + "$");
|
||||||
|
String userInfo = userReader.readLine();
|
||||||
|
|
||||||
|
long userPosition = 0;
|
||||||
|
int messageCount = 0;
|
||||||
|
msg = msg.editMessage(teamInfo + "\n\nread 0 lines").complete();
|
||||||
|
|
||||||
|
while (userInfo != null) {
|
||||||
|
userPosition++;
|
||||||
|
Matcher userMatcher = userPattern.matcher(userInfo);
|
||||||
|
if (userMatcher.find()) {
|
||||||
|
eb.addField(userInfo.split("\t")[0], "Work Units:\t" + userInfo.split("\t")[2] + "\n" +
|
||||||
|
"Score:\t\t" + userInfo.split("\t")[1], true);
|
||||||
|
|
||||||
|
//msg = msg.editMessage(teamInfo + "\n\nread " + userPosition + " lines").complete();
|
||||||
|
// IF mesage is to long, rmeove last entry and split output
|
||||||
|
if (!eb.isValidLength()){
|
||||||
|
eb.getFields().remove(eb.getFields().size()-1);
|
||||||
|
msg.getChannel().sendMessage(eb.build()).complete();
|
||||||
|
|
||||||
|
eb = new EmbedBuilder();
|
||||||
|
messageCount++;
|
||||||
|
|
||||||
|
if(messageCount > MAX_MESSAGE_LIMIT){
|
||||||
|
msg.getChannel().sendMessage("To many entries! aborted to prevent spam!").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
eb.addField(userInfo.split("\t")[0], "Work Units:\t" + userInfo.split("\t")[2] + "\n" +
|
||||||
|
"Score:\t\t" + userInfo.split("\t")[1], true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userPosition % 250000 == 0)
|
||||||
|
msg = msg.editMessage(teamInfo + "\n\nread " + userPosition + " lines").complete();
|
||||||
|
|
||||||
|
userInfo = userReader.readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Send final result
|
||||||
|
msg.getChannel().sendMessage(eb.build()).complete();
|
||||||
|
msg.delete().queue();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Message update(GuildMessageReceivedEvent event, Message msg) {
|
||||||
|
if(!checkForAdmin(event.getMember()))
|
||||||
|
{
|
||||||
|
// if the user that calls this function is not admin, here should be an interval check that interrupts if the files have recently been updated to mitigate abuse.
|
||||||
|
// admins should of course be able to call this any time.
|
||||||
|
// the date of the current files can be read from the first line of each file and needs to be parsed.
|
||||||
|
return msg; // if it's not done by an admin, just cancel out
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Get new Statistic from Server");
|
||||||
|
|
||||||
|
TrustManager[] trustAllCerts = new TrustManager[]{
|
||||||
|
new X509TrustManager() {
|
||||||
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public void checkClientTrusted(
|
||||||
|
java.security.cert.X509Certificate[] certs, String authType) {
|
||||||
|
}
|
||||||
|
public void checkServerTrusted(
|
||||||
|
java.security.cert.X509Certificate[] certs, String authType) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Activate the new trust manager
|
||||||
|
try {
|
||||||
|
SSLContext sc = SSLContext.getInstance("SSL");
|
||||||
|
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
||||||
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
byte buffer[] = new byte[BYTE_LIMIT];
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
try(
|
||||||
|
BufferedOutputStream teamOutput = new BufferedOutputStream(new FileOutputStream(teamFile, false));
|
||||||
|
BufferedInputStream teamInput = new BufferedInputStream(new URL(teamSummary).openStream())
|
||||||
|
) {
|
||||||
|
long i = 0;
|
||||||
|
while((bytesRead = teamInput.read(buffer, 0, BYTE_LIMIT)) != -1){
|
||||||
|
teamOutput.write(buffer, 0, bytesRead);
|
||||||
|
|
||||||
|
i+=bytesRead;
|
||||||
|
|
||||||
|
if (i % 50000 <= 200)
|
||||||
|
msg = msg.editMessage("Updating Teamstats, processed " + i + " Bytes").complete();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
teamOutput.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
try(
|
||||||
|
BufferedOutputStream userOutput = new BufferedOutputStream(new FileOutputStream(userFile, false));
|
||||||
|
BufferedInputStream userInput = new BufferedInputStream(new URL(userSummary).openStream())
|
||||||
|
){
|
||||||
|
long i = 0;
|
||||||
|
while((bytesRead = userInput.read(buffer, 0, BYTE_LIMIT)) != -1){
|
||||||
|
userOutput.write(buffer, 0, bytesRead);
|
||||||
|
|
||||||
|
i+=bytesRead;
|
||||||
|
|
||||||
|
if (i % 50000 <= 200)
|
||||||
|
msg = msg.editMessage("Updating Userstats, processed " + i + " Bytes").complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
userOutput.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return msg.editMessage("done!").complete();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
69
src/main/java/Modules/LoveCalc.java
Normal file
69
src/main/java/Modules/LoveCalc.java
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
|
||||||
|
public class LoveCalc extends SuperModule{
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(LoveCalc.class);
|
||||||
|
public static final String command = "lovecalc";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construcker of a Module
|
||||||
|
*
|
||||||
|
* @param guildController Guild where Module is used, each guild get its own Module
|
||||||
|
*/
|
||||||
|
public LoveCalc(GuildController guildController) {
|
||||||
|
super(command, guildController);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Mention two users and Amour will tell you his probability to hit those two with his arrows";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(command + "triggered");
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
|
int love = (int)((thisEvent.getMessage().getMentionedUsers().get(0).getIdLong() + thisEvent.getMessage().getMentionedUsers().get(1).getIdLong()) % 100);
|
||||||
|
System.out.println("Do Lovecalc! love is: " + love);
|
||||||
|
|
||||||
|
eb.setAuthor("Amour");
|
||||||
|
eb.setColor(new Color((100-love)/100f,(love)/100f,0));
|
||||||
|
eb.setTitle("chance that Amours arrows will hit " + thisEvent.getMessage().getMentionedUsers().get(0).getName()
|
||||||
|
+ " and " + thisEvent.getMessage().getMentionedUsers().get(1).getName() + ":" );
|
||||||
|
eb.setDescription(love + "%");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
31
src/main/java/Modules/Module.java
Normal file
31
src/main/java/Modules/Module.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
|
||||||
|
public interface Module {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* name of the command
|
||||||
|
* @return command
|
||||||
|
*/
|
||||||
|
String getCommand();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text shown in the Help message
|
||||||
|
* @return Description
|
||||||
|
*/
|
||||||
|
String getDescription();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recives Guild Updates
|
||||||
|
* @param genericEvent Guild Updates
|
||||||
|
*/
|
||||||
|
void execute(GenericEvent genericEvent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current settings of the module
|
||||||
|
* When no settings are needed return NULL
|
||||||
|
* @return current settings
|
||||||
|
*/
|
||||||
|
String showSettings();
|
||||||
|
}
|
186
src/main/java/Modules/OnlineHighlight.java
Normal file
186
src/main/java/Modules/OnlineHighlight.java
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.UserActivityEndEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.UserActivityStartEvent;
|
||||||
|
import net.dv8tion.jda.api.events.user.update.UserUpdateActivityOrderEvent;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class OnlineHighlight extends SuperModule {
|
||||||
|
|
||||||
|
public static final String command = "OnlineHighlight";
|
||||||
|
private Set<String> watchGame;
|
||||||
|
private String watchRole;
|
||||||
|
|
||||||
|
public OnlineHighlight(GuildController guildController, JSONObject config){
|
||||||
|
|
||||||
|
super(command, guildController, config);
|
||||||
|
//long welcomeChannel, String welcomeMessage
|
||||||
|
|
||||||
|
if (!getConfig().containsKey("watchGame")){
|
||||||
|
getConfig().put("watchGame", new JSONArray());
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
if (!getConfig().containsKey("watchRole")){
|
||||||
|
getConfig().put("watchRole", "");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
//get welcome message
|
||||||
|
this.watchGame = new HashSet<>();
|
||||||
|
for (Object o: (JSONArray)config.get("watchGame")){
|
||||||
|
this.watchGame.add((String)o);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.watchRole = config.get("watchRole").toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Gives users who play a certain game a certain role\n" +
|
||||||
|
"`" + command + " addGame NAME` - to set game to look for\n" +
|
||||||
|
"`" + command + " setRole @ROLE` - to set role which users playing teh game will get";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if(event instanceof GuildMessageReceivedEvent){
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (checkForAdmin(thisEvent.getGuild().getMember(thisEvent.getAuthor())))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(checkForCommand(thisEvent.getMessage().getContentRaw(), "showGames")){
|
||||||
|
|
||||||
|
Set<String> act = new HashSet<>();
|
||||||
|
for (Member member : thisEvent.getGuild().getMembers()){
|
||||||
|
act.add(member.getActivities().get(0).getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Currently played games are:\n");
|
||||||
|
for (String s : act)
|
||||||
|
sb.append("`").append(s).append("`, ");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(sb.toString()).queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "addGame")){
|
||||||
|
JSONArray oldConf = (JSONArray) getConfig().remove("watchGame");
|
||||||
|
|
||||||
|
String newGame = thisEvent.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " addGame )","").toLowerCase();
|
||||||
|
|
||||||
|
if (watchGame.contains(newGame)){
|
||||||
|
thisEvent.getChannel().sendMessage("ERROR: Game already on the list! use `delGame` to remove it.").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldConf.add(newGame);
|
||||||
|
getConfig().put("watchGame", oldConf);
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
watchGame.add(newGame);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Watched Games are: ");
|
||||||
|
for (String s : watchGame)
|
||||||
|
sb.append("`").append(s).append("`, ");
|
||||||
|
|
||||||
|
sb.replace(sb.length()-2,sb.length(), "");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(sb.toString()).queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "delGame")){
|
||||||
|
JSONArray oldConf = (JSONArray) getConfig().remove("watchGame");
|
||||||
|
|
||||||
|
String delGame = thisEvent.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " delGame )","").toLowerCase();
|
||||||
|
|
||||||
|
if (!watchGame.contains(delGame)){
|
||||||
|
thisEvent.getChannel().sendMessage("ERROR: Game is not on the list!").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldConf.remove(delGame);
|
||||||
|
getConfig().put("watchGame", oldConf);
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
watchGame.remove(delGame);
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Game `" + delGame + "` got removed from list.").queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "setRole")){
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getMentionedRoles().size() != 1){
|
||||||
|
thisEvent.getChannel().sendMessage("No Role Mentioned, abort").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getConfig().remove("watchRole");
|
||||||
|
getConfig().put("watchRole", thisEvent.getMessage().getMentionedRoles().get(0).getIdLong());
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Set watchRole to: `" + thisEvent.getGuild().getRoleById(getConfig().get("watchRole").toString()).getName() + "`").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event instanceof UserActivityStartEvent){
|
||||||
|
UserActivityStartEvent thisEvent = (UserActivityStartEvent) event;
|
||||||
|
|
||||||
|
if(watchGame.contains(thisEvent.getNewActivity().getName().toLowerCase())){
|
||||||
|
thisEvent.getGuild().addRoleToMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
|
||||||
|
}
|
||||||
|
} else if (event instanceof UserActivityEndEvent){
|
||||||
|
UserActivityEndEvent thisEvent = (UserActivityEndEvent ) event;
|
||||||
|
|
||||||
|
if(watchGame.contains(thisEvent.getOldActivity().getName().toLowerCase())) {
|
||||||
|
thisEvent.getGuild().removeRoleFromMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event instanceof UserUpdateActivityOrderEvent){
|
||||||
|
UserUpdateActivityOrderEvent thisEvent = (UserUpdateActivityOrderEvent ) event;
|
||||||
|
if (watchGame.contains(thisEvent.getNewValue().get(0).getName().toLowerCase())){
|
||||||
|
//TODO
|
||||||
|
thisEvent.getGuild().addRoleToMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
|
||||||
|
} else {
|
||||||
|
if (thisEvent.getMember().getRoles().contains(thisEvent.getGuild().getRoleById(watchRole)))
|
||||||
|
thisEvent.getGuild().removeRoleFromMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("watchGame: ");
|
||||||
|
|
||||||
|
for (String s: watchGame)
|
||||||
|
sb.append("`").append(s).append("`, ");
|
||||||
|
|
||||||
|
sb.replace(sb.length()-2,sb.length(), "");
|
||||||
|
|
||||||
|
sb.append("\nwatchRole: ").append(getGuildController().getJda()
|
||||||
|
.getGuildById(getGuildController().getGUILD_ID())
|
||||||
|
.getRoleById(watchRole).getName());
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
98
src/main/java/Modules/Purge.java
Normal file
98
src/main/java/Modules/Purge.java
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class Purge extends SuperModule{
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Purge.class);
|
||||||
|
public static final String COMMAND = "purge";
|
||||||
|
|
||||||
|
public Purge(GuildController guildController){
|
||||||
|
super(COMMAND, guildController, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return Purge.COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Deletes Messages.\n`-n NUMBER` number of messages to delete\n`@USER` delete messages from user only.";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent event = null;
|
||||||
|
List<String> messageIds = null;
|
||||||
|
long counter = -1, limiter = -1;
|
||||||
|
messageIds = new ArrayList<String>();
|
||||||
|
|
||||||
|
// if this is a GuildMessageReceivedEvent, cast it, else return
|
||||||
|
if (!(genericEvent instanceof GuildMessageReceivedEvent)) return;
|
||||||
|
|
||||||
|
event = (GuildMessageReceivedEvent) genericEvent;
|
||||||
|
|
||||||
|
if (!isCommand(event.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(COMMAND + "triggered");
|
||||||
|
|
||||||
|
// if the author of the message has the mod privileges or is the owner continue, else return
|
||||||
|
if (!checkForAdmin(event.getMember())){
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("I am Sorry, you are not allowed to do that!\nMay ask "
|
||||||
|
+ event.getGuild().getRoleById(getGuildController().getMOD_ROLE()).getAsMention() + " to do that.").queue(
|
||||||
|
m -> m.delete().queueAfter(30, TimeUnit.SECONDS)
|
||||||
|
);
|
||||||
|
|
||||||
|
event.getMessage().delete().queueAfter(30, TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the message contains "purge[whitespace]-n[whitespace]messageCount", parse messageCount and delete that many messages
|
||||||
|
if (getParameter(event.getMessage().getContentRaw(), "n") != null) {
|
||||||
|
limiter = Integer.parseInt(getParameter(event.getMessage().getContentRaw(),"n"));
|
||||||
|
} else {
|
||||||
|
limiter = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if there was no messageCount to be parsed, limiter will run from -1 towards negative and never reach 0 (ignoring overflow), full purge
|
||||||
|
for (Message msg : event.getChannel().getIterableHistory()) {
|
||||||
|
|
||||||
|
if (!msg.isPinned() &&
|
||||||
|
(event.getMessage().getMentionedMembers().size() != 1
|
||||||
|
|| msg.getAuthor().getIdLong() == event.getMessage().getMentionedMembers().get(0).getIdLong())) {
|
||||||
|
messageIds.add(msg.getId());
|
||||||
|
counter++;
|
||||||
|
limiter--;
|
||||||
|
}
|
||||||
|
if (limiter < 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// purge all collected messages
|
||||||
|
event.getChannel().purgeMessagesById(messageIds);
|
||||||
|
|
||||||
|
event.getChannel().sendMessage(counter + " messages purged.").queue(message -> message.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
logger.debug(counter + " messages purged.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
187
src/main/java/Modules/Quote.java
Normal file
187
src/main/java/Modules/Quote.java
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import IO.JSON;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class Quote extends SuperModule{
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Quote.class);
|
||||||
|
public static final String command = "quote";
|
||||||
|
static final String QUOTE_LOCATION = "Quotes.json";
|
||||||
|
|
||||||
|
public Quote(GuildController guildController){
|
||||||
|
super(command, guildController);
|
||||||
|
|
||||||
|
if(JSON.loadJson(QUOTE_LOCATION) == null){
|
||||||
|
JSON.saveJson(new JSONArray(), QUOTE_LOCATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "`quote` shows random quote\n`quote id #NUMBER` show specific quote\n`quote new QUOTE - AUTHOR` adds new quote to the system";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug(command + "triggered");
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// ADD NEW QUOTE
|
||||||
|
///////////////////
|
||||||
|
if (thisEvent.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + command + " (new|add) .*)")) {
|
||||||
|
logger.debug("safe new Quote");
|
||||||
|
|
||||||
|
// Prep new Quote Object
|
||||||
|
JSONObject newQuote = new JSONObject();
|
||||||
|
newQuote.put("text", thisEvent.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " (new|add) )", "")
|
||||||
|
.replaceAll("(?is:-.*$)",""));
|
||||||
|
newQuote.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||||
|
if (thisEvent.getMessage().getContentRaw().contains("-"))
|
||||||
|
newQuote.put("author", thisEvent.getMessage().getContentRaw().replaceAll("(?is:[^-]*- )", ""));
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray arr = JSON.loadJson(QUOTE_LOCATION);
|
||||||
|
boolean exists = false;
|
||||||
|
|
||||||
|
// go through all Guilds
|
||||||
|
for (Object o: arr){
|
||||||
|
|
||||||
|
//Filter for the right guild
|
||||||
|
JSONObject guilds = (JSONObject) o;
|
||||||
|
if (guilds.get("guildID").equals(getGuildController().getGUILD_ID())){
|
||||||
|
|
||||||
|
arr.remove(o); // Remove old object
|
||||||
|
JSONArray guildQuotes = (JSONArray) guilds.get("quotes"); // get old Quotes
|
||||||
|
|
||||||
|
guildQuotes.add(newQuote); // add new Quote
|
||||||
|
|
||||||
|
JSONObject editedGuild = new JSONObject(); // safe guild
|
||||||
|
editedGuild.put("guildID", getGuildController().getGUILD_ID());
|
||||||
|
editedGuild.put("quotes", guildQuotes);
|
||||||
|
arr.add(editedGuild);
|
||||||
|
|
||||||
|
exists = true; // set flag
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exists){ // if flag not set create new Guild
|
||||||
|
JSONObject newGuild = new JSONObject();
|
||||||
|
newGuild.put("guildID", getGuildController().getGUILD_ID());
|
||||||
|
|
||||||
|
JSONArray newQuotes = new JSONArray();
|
||||||
|
newQuotes.add(newQuote);
|
||||||
|
|
||||||
|
newGuild.put("quotes", newQuotes);
|
||||||
|
arr.add(newGuild);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Safe data
|
||||||
|
JSON.saveJson(arr, QUOTE_LOCATION);
|
||||||
|
|
||||||
|
|
||||||
|
thisEvent.getMessage().delete().queue();
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// PICK QUOTE BY ID
|
||||||
|
///////////////////
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + command + " id #[0-9]+.*)")){
|
||||||
|
logger.debug("pick Quote by ID");
|
||||||
|
|
||||||
|
//STUB
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// RandomPick
|
||||||
|
///////////////////
|
||||||
|
} else {
|
||||||
|
logger.debug("random quote pick");
|
||||||
|
|
||||||
|
JSONArray arr = JSON.loadJson(QUOTE_LOCATION);
|
||||||
|
|
||||||
|
for (Object o : arr){
|
||||||
|
JSONObject guild = (JSONObject) o;
|
||||||
|
|
||||||
|
if (guild.get("guildID").equals(getGuildController().getGUILD_ID())){
|
||||||
|
|
||||||
|
JSONArray quotes = (JSONArray) guild.get("quotes");
|
||||||
|
|
||||||
|
JSONObject quote = null;
|
||||||
|
int i = 0;
|
||||||
|
// Get Random Quote Object
|
||||||
|
do {
|
||||||
|
quote = (JSONObject) quotes.get(new Random().nextInt(quotes.size()));
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if (i > quotes.size())
|
||||||
|
return;
|
||||||
|
} while (quote == null);
|
||||||
|
|
||||||
|
// Build message
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
|
// get text
|
||||||
|
eb.setDescription(quote.get("text").toString());
|
||||||
|
|
||||||
|
// get Date
|
||||||
|
try {
|
||||||
|
eb.setTimestamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(quote.get("date").toString()).toInstant());
|
||||||
|
} catch (ParseException e){
|
||||||
|
logger.error(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
//get Author if exists
|
||||||
|
if (quote.containsKey("author")){
|
||||||
|
eb.setAuthor(quote.get("author").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Delete command
|
||||||
|
thisEvent.getMessage().delete().queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
JSONArray arr = JSON.loadJson(QUOTE_LOCATION);
|
||||||
|
for (Object o : arr) {
|
||||||
|
JSONObject guild = (JSONObject) o;
|
||||||
|
|
||||||
|
if (guild.get("guildID").equals(getGuildController().getGUILD_ID())) {
|
||||||
|
return "NUMBER OF QUOTES: `" + ((JSONArray) guild.get("quotes")).size() + "`";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "NUMBER OF QUOTES: `0`";
|
||||||
|
}
|
||||||
|
}
|
158
src/main/java/Modules/RandomResponde.java
Normal file
158
src/main/java/Modules/RandomResponde.java
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class RandomResponde extends SuperModule{
|
||||||
|
|
||||||
|
public static final String command = "RandomResponse";
|
||||||
|
|
||||||
|
public RandomResponde(GuildController guildController, JSONObject config) {
|
||||||
|
super(command, guildController, config);
|
||||||
|
|
||||||
|
if (!config.containsKey("triggers")){
|
||||||
|
getConfig().put("triggers", new JSONArray());
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "response to predefined keywords. git as example\n" +
|
||||||
|
"`RandomResponse add -t TRIGGER -r RESPONSE [-p FILTERPATTERN]` if -p is set trigger will replace $pattern with REGEX filtered trigger message. Good example for such a REGEX may be: `((?<=(?is:TRIGGER)) [^ ]+)` (Filters next word to trigger)\n" +
|
||||||
|
"`RandomResponse remove TRIGGER` remove a trigger";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent)event;
|
||||||
|
|
||||||
|
if (isCommand(thisEvent.getMessage())){
|
||||||
|
// add new trigger
|
||||||
|
if (checkForCommand(thisEvent.getMessage().getContentRaw(), "add")){
|
||||||
|
|
||||||
|
JSONArray triggers = (JSONArray) getConfig().get("triggers");
|
||||||
|
|
||||||
|
// Check for obligatory parameter:
|
||||||
|
if(getParameter(thisEvent.getMessage().getContentRaw(), "t").length() < 1){
|
||||||
|
thisEvent.getChannel().sendMessage("You have to mention a trigger! use `-t TRIGGER`").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (getParameter(thisEvent.getMessage().getContentRaw(), "r").length() < 1){
|
||||||
|
thisEvent.getChannel().sendMessage("You have to mention a response! use `-r RESPONSE`").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if already exists
|
||||||
|
for (Object o : triggers){
|
||||||
|
if (((JSONObject)o).get("trigger").toString().equalsIgnoreCase(
|
||||||
|
getParameter(thisEvent.getMessage().getContentRaw(), "t")
|
||||||
|
)){
|
||||||
|
thisEvent.getChannel().sendMessage("Trigger already exists! aborted").queue(msg -> msg.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// new Object to add
|
||||||
|
JSONObject newTrigger = new JSONObject();
|
||||||
|
|
||||||
|
// add triiger / response
|
||||||
|
newTrigger.put("trigger", getParameter(thisEvent.getMessage().getContentRaw(), "t"));
|
||||||
|
newTrigger.put("response", getParameter(thisEvent.getMessage().getContentRaw(), "r"));
|
||||||
|
|
||||||
|
// may add replacement and pattern
|
||||||
|
if (getParameter(thisEvent.getMessage().getContentRaw(), "p").length() > 0){
|
||||||
|
// p param is given check if "$pattern" is given
|
||||||
|
if (newTrigger.get("response").toString().contains("$pattern")){ // Has valid pattern
|
||||||
|
newTrigger.put("pattern", getParameter(thisEvent.getMessage().getContentRaw(), "p"));
|
||||||
|
} else { // has no valid pattern
|
||||||
|
thisEvent.getChannel().sendMessage("You did not mentioned `$pattern` to apply the pattern").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add new Object and safe it
|
||||||
|
triggers.add(newTrigger);
|
||||||
|
getConfig().replace("triggers", triggers);
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Added trigger!").queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "remove")){
|
||||||
|
JSONArray triggers = (JSONArray) getConfig().get("triggers");
|
||||||
|
boolean deleted = false;
|
||||||
|
|
||||||
|
for (Object ob : triggers){
|
||||||
|
if(((JSONObject) ob).get("trigger").toString().equals(
|
||||||
|
thisEvent.getMessage().getContentRaw().replaceFirst(
|
||||||
|
"(?is:" + getGuildController().getPREFIX() + command + " " + "remove )", ""))){
|
||||||
|
triggers.remove(ob);
|
||||||
|
deleted = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deleted){
|
||||||
|
// safe it
|
||||||
|
getConfig().replace("triggers", triggers);
|
||||||
|
safeConfig(getConfig());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("deleted Trigger!").queue();
|
||||||
|
} else {
|
||||||
|
// if noth ing got deletet entry does not exist
|
||||||
|
thisEvent.getChannel().sendMessage("no such Trigger! aborted action.").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// go through all triggers and may responde
|
||||||
|
for (Object o : (JSONArray)getConfig().get("triggers")){
|
||||||
|
JSONObject trigger = (JSONObject) o;
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getContentRaw().matches("(?is:.*" + trigger.get("trigger").toString() + ".*)")){
|
||||||
|
|
||||||
|
String respnse = trigger.get("response").toString();
|
||||||
|
|
||||||
|
// get filter
|
||||||
|
if(trigger.containsKey("pattern")) {
|
||||||
|
Matcher m = Pattern.compile(trigger.get("pattern").toString()).matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
|
||||||
|
if(m.find())
|
||||||
|
respnse = respnse.replaceAll("\\$pattern", m.group(0));
|
||||||
|
else
|
||||||
|
respnse = respnse.replaceAll("\\$pattern", "NULL");
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(respnse).queue(msg -> msg.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "NUMBER OF TRIGGERS: `" + ((JSONArray) getConfig().get("triggers")).size() + "`";
|
||||||
|
}
|
||||||
|
}
|
232
src/main/java/Modules/SecretChannel.java
Normal file
232
src/main/java/Modules/SecretChannel.java
Normal file
|
@ -0,0 +1,232 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.Permission;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class SecretChannel extends SuperModule {
|
||||||
|
|
||||||
|
public static final String COMMAND = "SecretChannel";
|
||||||
|
|
||||||
|
private Map<Long, Long> userInChannel;
|
||||||
|
|
||||||
|
private Long hiddenChannel;
|
||||||
|
private int activeTime;
|
||||||
|
private boolean pingUser;
|
||||||
|
private Set<String> trigger;
|
||||||
|
|
||||||
|
public SecretChannel(GuildController guildController, JSONObject config){
|
||||||
|
super(COMMAND, guildController, config);
|
||||||
|
|
||||||
|
if (!config.containsKey("trigger")){
|
||||||
|
config.put("trigger", new JSONArray());
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.containsKey("hiddenChannel")){
|
||||||
|
config.put("hiddenChannel", "123");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.containsKey("pingUser")){
|
||||||
|
config.put("pingUser", "false");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.containsKey("activeTime")){
|
||||||
|
config.put("activeTime", "30");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger = new HashSet<>();
|
||||||
|
for ( Object o : (JSONArray)config.get("trigger")){
|
||||||
|
trigger.add(o.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
hiddenChannel = Long.parseLong(getConfig().get("hiddenChannel").toString());
|
||||||
|
|
||||||
|
activeTime = Integer.parseInt(getConfig().get("activeTime").toString());
|
||||||
|
|
||||||
|
pingUser = Boolean.parseBoolean(getConfig().get("pingUser").toString());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Add user (Temporarily) to a hidden channel if the user mentions a trigger\n" +
|
||||||
|
"`addTrigger WORD` add new Trigger\n" +
|
||||||
|
"`removeTrigger WORD` remove existing Trigger\n" +
|
||||||
|
"`setChannel #CHANNEL` set channel to be shown\n" +
|
||||||
|
"`setTime NUMBER` set time channel is shown in seconds\n" +
|
||||||
|
"`togglePing` set if user gets a ping";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
if (genericEvent instanceof GuildMessageReceivedEvent){
|
||||||
|
GuildMessageReceivedEvent event = (GuildMessageReceivedEvent)genericEvent;
|
||||||
|
|
||||||
|
if (checkForAdmin(event.getGuild().getMember(event.getAuthor()))) {
|
||||||
|
if (checkForCommand(event.getMessage().getContentRaw(), "addTrigger")) {
|
||||||
|
String newTrigger = event.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " addTrigger )", "");
|
||||||
|
|
||||||
|
if (trigger.size() == 0) {
|
||||||
|
trigger.add(newTrigger);
|
||||||
|
|
||||||
|
JSONArray arr = new JSONArray();
|
||||||
|
arr.add(newTrigger);
|
||||||
|
getConfig().put("trigger", arr);
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (trigger.contains(newTrigger)) {
|
||||||
|
event.getChannel().sendMessage("Error: Trigger already exists!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger.add(newTrigger);
|
||||||
|
|
||||||
|
JSONArray arr = ((JSONArray) getConfig().get("trigger"));
|
||||||
|
arr.add(newTrigger);
|
||||||
|
getConfig().remove("trigger");
|
||||||
|
getConfig().put("trigger", arr);
|
||||||
|
|
||||||
|
}
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("Added trigger `" + newTrigger + "`").queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(event.getMessage().getContentRaw(), "removeTrigger")) {
|
||||||
|
String delTrigger = event.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " removeTrigger )", "");
|
||||||
|
|
||||||
|
if (!trigger.contains(delTrigger)) {
|
||||||
|
event.getChannel().sendMessage("Error: Trigger does not exists!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger.remove(delTrigger);
|
||||||
|
|
||||||
|
((JSONArray) getConfig().remove("trigger")).add(delTrigger);
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("Removed trigger `" + delTrigger + "`").queue();
|
||||||
|
} else if (checkForCommand(event.getMessage().getContentRaw(), "setChannel")) {
|
||||||
|
|
||||||
|
if (event.getMessage().getMentionedChannels().size() != 1) {
|
||||||
|
event.getChannel().sendMessage("Error: Please mention a Textchannel!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hiddenChannel = event.getMessage().getMentionedChannels().get(0).getIdLong();
|
||||||
|
|
||||||
|
getConfig().remove("hiddenChannel");
|
||||||
|
getConfig().put("hiddenChannel", hiddenChannel);
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("Set Hiddenchannel to: `" + hiddenChannel + "` ("
|
||||||
|
+ event.getMessage().getMentionedChannels().get(0).getAsMention() + ")").queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(event.getMessage().getContentRaw(), "setTime")) {
|
||||||
|
|
||||||
|
if (!event.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + COMMAND + " setTime " + "[0-9]+)")) {
|
||||||
|
event.getChannel().sendMessage("Error: PLease enter a valid number!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int newTime = Integer.parseInt(event.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " setTime " + ")", ""));
|
||||||
|
|
||||||
|
activeTime = newTime;
|
||||||
|
|
||||||
|
getConfig().remove("activeTime");
|
||||||
|
getConfig().put("activeTime", newTime);
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("Set activeTime to: " + newTime).queue();
|
||||||
|
|
||||||
|
} else if (checkForCommand(event.getMessage().getContentRaw(), "togglePing")) {
|
||||||
|
|
||||||
|
pingUser = !pingUser;
|
||||||
|
|
||||||
|
getConfig().remove("pingUser");
|
||||||
|
getConfig().put("pingUser", pingUser);
|
||||||
|
|
||||||
|
safeConfig();
|
||||||
|
|
||||||
|
event.getChannel().sendMessage("Toggled pingUser to: " + pingUser).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trigger.size() > 0) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (String s : trigger)
|
||||||
|
sb.append("|").append(s);
|
||||||
|
|
||||||
|
sb.replace(0, 1, "");
|
||||||
|
|
||||||
|
if (event.getMessage().getContentRaw().matches("(?is:.*(" + sb.toString() + ").*)")) {
|
||||||
|
|
||||||
|
event.getGuild().getTextChannelById(hiddenChannel).upsertPermissionOverride(event.getMember()).complete()
|
||||||
|
.getManager().setAllow(
|
||||||
|
Permission.MESSAGE_READ,
|
||||||
|
Permission.VIEW_CHANNEL
|
||||||
|
).queue();
|
||||||
|
|
||||||
|
if (pingUser) {
|
||||||
|
event.getGuild().getTextChannelById(hiddenChannel)
|
||||||
|
.sendMessage(event.getAuthor().getAsMention()).queue(
|
||||||
|
m -> m.delete().queueAfter(activeTime > 0 ? activeTime : 60, TimeUnit.SECONDS));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activeTime > 0) {
|
||||||
|
new Timer().schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
event.getGuild().getTextChannelById(hiddenChannel).getPermissionOverride(event.getMember()).delete().queue();
|
||||||
|
}
|
||||||
|
}, TimeUnit.MILLISECONDS.convert(activeTime, TimeUnit.SECONDS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (String s : trigger)
|
||||||
|
sb.append("|").append("`").append(s).append("`");
|
||||||
|
|
||||||
|
sb.replace(0,1, "");
|
||||||
|
|
||||||
|
return "hidden channel: `" + hiddenChannel + "` (" + getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getTextChannelById(hiddenChannel).getAsMention() + ")\n" +
|
||||||
|
"activeTime: `" + activeTime + "`\n" +
|
||||||
|
"ping User: `" + pingUser + "` \n" +
|
||||||
|
"Trigger: " + sb.toString();
|
||||||
|
}
|
||||||
|
}
|
96
src/main/java/Modules/Shuffle.java
Normal file
96
src/main/java/Modules/Shuffle.java
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author https://www.Hiajen.de
|
||||||
|
*/
|
||||||
|
public class Shuffle extends SuperModule{
|
||||||
|
|
||||||
|
public static final String command = "shufflerole";
|
||||||
|
private static final String desc = "changes color of shufflerole randomly\n" +
|
||||||
|
"`shufflerole setRole @ROLE` Set role to shuffle";
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Shuffle.class);
|
||||||
|
|
||||||
|
private long role;
|
||||||
|
|
||||||
|
public Shuffle(GuildController guildController, JSONObject config){
|
||||||
|
|
||||||
|
super(command, guildController, config);
|
||||||
|
|
||||||
|
if (!config.containsKey("role")){
|
||||||
|
getConfig().put("role", "123");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
// JDA api, long role, long guild
|
||||||
|
this.role = Long.parseLong(getConfig().get("role").toString());
|
||||||
|
|
||||||
|
shuffleColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void shuffleColor(){
|
||||||
|
TimerTask repeatedTask = new TimerTask() {
|
||||||
|
public void run() {
|
||||||
|
//logger.debug("shuffle role color");
|
||||||
|
|
||||||
|
Random r = new Random();
|
||||||
|
getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getRoleById(role)
|
||||||
|
.getManager().setColor(new Color(r.nextFloat(),r.nextFloat(),r.nextFloat())).queue();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Timer timer = new Timer();
|
||||||
|
|
||||||
|
timer.schedule(repeatedTask, TimeUnit.SECONDS.toMillis(10), TimeUnit.SECONDS.toMillis(120));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (checkForCommand(thisEvent.getMessage().getContentRaw(), "setRole") && checkForAdmin(thisEvent.getMember())){
|
||||||
|
if (thisEvent.getMessage().getMentionedRoles().size() == 1){
|
||||||
|
getConfig().replace("role", thisEvent.getMessage().getMentionedRoles().get(0).getIdLong());
|
||||||
|
|
||||||
|
role = thisEvent.getMessage().getMentionedRoles().get(0).getIdLong();
|
||||||
|
thisEvent.getChannel().sendMessage("okay changed Role!").queue();
|
||||||
|
|
||||||
|
safeConfig(getConfig());
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("Please mention one Role!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "ROLE: `" + ((getGuildController().getJda().getRoleById(role) == null) ? "none" : getGuildController().getJda().getRoleById(role).getName()) + "`";
|
||||||
|
}
|
||||||
|
}
|
54
src/main/java/Modules/Stats.java
Normal file
54
src/main/java/Modules/Stats.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class Stats extends SuperModule {
|
||||||
|
|
||||||
|
public static final String COMMAND = "stats";
|
||||||
|
|
||||||
|
public Stats(GuildController guildController, JSONObject config) {
|
||||||
|
super(COMMAND, guildController, config);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Shows some statistics about this Guild";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent){
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent input = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (isCommand(input.getMessage())){
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder()
|
||||||
|
.setTitle("Current stats")
|
||||||
|
.addField("Usercount", input.getGuild().getMemberCount()+"", true)
|
||||||
|
.addField("Rolecount", input.getGuild().getRoles().size()+"", true)
|
||||||
|
.setImage(input.getGuild().getIconUrl());
|
||||||
|
|
||||||
|
input.getChannel().sendMessage(eb.build()).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
228
src/main/java/Modules/VoiceLobby.java
Normal file
228
src/main/java/Modules/VoiceLobby.java
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.entities.VoiceChannel;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceUpdateEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class VoiceLobby extends SuperModule {
|
||||||
|
|
||||||
|
public static final String command = "lobby";
|
||||||
|
private static final String description = "Create temporary channels.\n" +
|
||||||
|
"`lobby create -n NAME -l USERLIMIT` creates new temporary channel, without parameter default values will be used.\n" +
|
||||||
|
"`lobby limit USERLIMIT` set new user limit.\n" +
|
||||||
|
"`lobby name NAME` set new channel name.\n" +
|
||||||
|
"`lobby setLobbyChannel CATEGORY_ID` to set Category where lobbies will spawn. \n" +
|
||||||
|
"`lobby setLaunchpad VOICE_CHANNEL_ID` to set a Launchpad channel (user who join this channel will get moved in a new temporary channel)";
|
||||||
|
|
||||||
|
private long groupCategory;
|
||||||
|
private long launchpadChannel;
|
||||||
|
private HashSet<Long> tmpChannel = new HashSet<>();
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
|
public VoiceLobby(GuildController guildController, JSONObject config){
|
||||||
|
|
||||||
|
super(command, guildController, config);
|
||||||
|
|
||||||
|
if (!getConfig().containsKey("groupCategory")){
|
||||||
|
getConfig().put("groupCategory", "123");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
if(!getConfig().containsKey("LaunchpadChannel")){
|
||||||
|
getConfig().put("LaunchpadChannel", "123");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
//long groupCategory
|
||||||
|
this.groupCategory = Long.parseLong(getConfig().get("groupCategory").toString());
|
||||||
|
this.launchpadChannel = Long.parseLong(getConfig().get("LaunchpadChannel").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent genericEvent) {
|
||||||
|
|
||||||
|
if (!(genericEvent instanceof GenericGuildEvent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GenericGuildEvent event = (GenericGuildEvent) genericEvent;
|
||||||
|
|
||||||
|
if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
logger.debug("Lobby command triggered");
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
|
// CREATE TMP CHANNEL
|
||||||
|
////////////////////////
|
||||||
|
if (checkForCommand(thisEvent.getMessage().getContentRaw(), "create")) {
|
||||||
|
//check if user is in Voice Channel
|
||||||
|
if (thisEvent.getMember().getVoiceState().inVoiceChannel()) {
|
||||||
|
//Pattern
|
||||||
|
Matcher name = Pattern.compile("(?is:-n [^ ]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
Matcher limit = Pattern.compile("(?is:-l [0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
//TODO
|
||||||
|
Matcher privateChannel = Pattern.compile("(?is:-p)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
|
||||||
|
//Create Voice channel
|
||||||
|
VoiceChannel newChannel = event.getGuild().createVoiceChannel(name.find() ? name.group(0).replace("-n ", "").replaceAll(" $", "") : "TEMP")
|
||||||
|
.setParent(event.getGuild().getCategoryById(groupCategory))
|
||||||
|
.setUserlimit(limit.find() ? Integer.parseInt(limit.group(0).replace("-l ", "").replaceAll(" $", "")) : 3).complete();
|
||||||
|
|
||||||
|
// move User
|
||||||
|
event.getGuild().moveVoiceMember(((GuildMessageReceivedEvent) event).getMember(), newChannel).queue();
|
||||||
|
tmpChannel.add(newChannel.getIdLong());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("Please Join a Voice Channel first!").queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
////////////////////////
|
||||||
|
// Set Limit
|
||||||
|
////////////////////////
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + command + " limit [0-9]+)")) {
|
||||||
|
|
||||||
|
//check if user is in Voice Channel and a temp channel
|
||||||
|
if (thisEvent.getMember().getVoiceState().inVoiceChannel() && thisEvent.getMember().getVoiceState().getChannel().getParent().getIdLong() == groupCategory) {
|
||||||
|
|
||||||
|
//Set new Limit
|
||||||
|
thisEvent.getMember().getVoiceState().getChannel().getManager().setUserLimit(Integer.parseInt(
|
||||||
|
thisEvent.getMessage().getContentRaw().replaceAll(".* limit ", ""))
|
||||||
|
).queue();
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
"Set limit to " + thisEvent.getMessage().getContentRaw().replaceAll(".* limit ", ""))
|
||||||
|
.queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("You are not in a lobby channel!").queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
////////////////////////
|
||||||
|
// Set name
|
||||||
|
////////////////////////
|
||||||
|
} else if (thisEvent.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + command + " name [^ ]+)")) {
|
||||||
|
|
||||||
|
//check if user is in Voice Channel and a temp channel
|
||||||
|
if (thisEvent.getMember().getVoiceState().inVoiceChannel() && thisEvent.getMember().getVoiceState().getChannel().getParent().getIdLong() == groupCategory) {
|
||||||
|
|
||||||
|
//Set new Limit
|
||||||
|
thisEvent.getMember().getVoiceState().getChannel().getManager().setName(
|
||||||
|
thisEvent.getMessage().getContentRaw().replaceAll(".* name ", "")
|
||||||
|
).queue();
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage(
|
||||||
|
"Set name to " + thisEvent.getMessage().getContentRaw().replaceAll(".* name ", ""))
|
||||||
|
.queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("You are not in a lobby channel!").queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
}
|
||||||
|
////////////////////////
|
||||||
|
// Set Lobby Category
|
||||||
|
////////////////////////
|
||||||
|
} else if (checkForAdmin(thisEvent.getMember()) && checkForCommand(thisEvent.getMessage().getContentRaw(), "setLobbyChannel")) {
|
||||||
|
|
||||||
|
Matcher m = Pattern.compile("(?is:[0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
if (m.find() && thisEvent.getGuild().getCategoryById(m.group(0)) != null) {
|
||||||
|
getConfig().replace("groupCategory", m.group(0) + "");
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Set groupCategory to: " + m.group(0)).queue();
|
||||||
|
safeConfig(getConfig());
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("no valid Category!").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getMessage().delete().queue();
|
||||||
|
////////////////////////
|
||||||
|
// Set Launchpad
|
||||||
|
////////////////////////
|
||||||
|
} else if (checkForAdmin(thisEvent.getMember()) && checkForCommand(thisEvent.getMessage().getContentRaw(), "setLaunchpad")) {
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getContentRaw().matches("(?is:.*[0-9]+.*)")) { // check if a Voice channel could be given
|
||||||
|
Matcher m = Pattern.compile("(?is:[0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
|
||||||
|
if (m.find() && thisEvent.getGuild().getVoiceChannelById(m.group(0)) != null) {
|
||||||
|
getConfig().put("LaunchpadChannel", m.group(0));
|
||||||
|
safeConfig(getConfig());
|
||||||
|
|
||||||
|
this.launchpadChannel = Long.parseLong(getConfig().get("LaunchpadChannel").toString());
|
||||||
|
thisEvent.getChannel().sendMessage("Launchpad set to `" + m.group(0) + "` (" + thisEvent.getGuild().getVoiceChannelById(m.group(0)).getName() + ")").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Something went wrong, are you sure that you mentioned an VoicechannelID?").queue(e -> e.delete().queueAfter(1, TimeUnit.MINUTES));
|
||||||
|
|
||||||
|
}
|
||||||
|
} else if (event instanceof GuildVoiceUpdateEvent) {
|
||||||
|
GuildVoiceUpdateEvent thisEvent = (GuildVoiceUpdateEvent) event;
|
||||||
|
|
||||||
|
//check if user left a temp channel
|
||||||
|
if ((thisEvent.getChannelLeft() != null && thisEvent.getChannelLeft().getParent().getIdLong() == groupCategory)) {
|
||||||
|
//check if channel is now empty
|
||||||
|
if (thisEvent.getChannelLeft().getMembers().size() < 1 && tmpChannel.contains(thisEvent.getChannelLeft().getIdLong())) {
|
||||||
|
|
||||||
|
logger.debug("may remove channel: " + thisEvent.getChannelLeft().getId());
|
||||||
|
//wait for 30 seconds and check again
|
||||||
|
//then delete channel if still empty
|
||||||
|
new Timer().schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (thisEvent.getChannelLeft().getMembers().size() < 1) {
|
||||||
|
|
||||||
|
logger.debug("remove channel: " + thisEvent.getChannelLeft().getId());
|
||||||
|
thisEvent.getChannelLeft().delete().queue();
|
||||||
|
tmpChannel.remove(thisEvent.getChannelLeft().getIdLong());
|
||||||
|
} else {
|
||||||
|
logger.debug("dont remove channel: " + thisEvent.getChannelLeft().getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, TimeUnit.SECONDS.convert(30, TimeUnit.MILLISECONDS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((thisEvent.getChannelJoined() != null && thisEvent.getChannelJoined().getIdLong() == launchpadChannel)) {
|
||||||
|
logger.debug("Triggered Launchpad");
|
||||||
|
|
||||||
|
//Create Voice channel
|
||||||
|
VoiceChannel newChannel = event.getGuild().createVoiceChannel("Temp-Lobby", event.getGuild().getCategoryById(groupCategory))
|
||||||
|
.complete();
|
||||||
|
|
||||||
|
// move User
|
||||||
|
event.getGuild().moveVoiceMember(thisEvent.getEntity(), newChannel).queue();
|
||||||
|
tmpChannel.add(newChannel.getIdLong());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "LOBBYCHANNEL: `" + ((getGuildController().getJda().getCategoryById(groupCategory) == null) ? "none" : getGuildController().getJda().getCategoryById(groupCategory).getName()) + "`" +
|
||||||
|
"LaunchpadChannel: `"+ launchpadChannel + "`";
|
||||||
|
}
|
||||||
|
}
|
111
src/main/java/Modules/Welcome.java
Normal file
111
src/main/java/Modules/Welcome.java
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
package Modules;
|
||||||
|
|
||||||
|
import Controll.GuildController;
|
||||||
|
import Controll.SuperModule;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.GenericEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class Welcome extends SuperModule {
|
||||||
|
public static final String command = "welcome";
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(Welcome.class);
|
||||||
|
|
||||||
|
private String welcomeMessage;
|
||||||
|
private long welcomeChannel;
|
||||||
|
|
||||||
|
public Welcome(GuildController guildController, JSONObject config){
|
||||||
|
|
||||||
|
super(command, guildController, config);
|
||||||
|
//long welcomeChannel, String welcomeMessage
|
||||||
|
|
||||||
|
if (!getConfig().containsKey("welcomeMessage")){
|
||||||
|
getConfig().put("welcomeMessage", "Hi $USER");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
if (!getConfig().containsKey("welcomeChannel")){
|
||||||
|
getConfig().put("welcomeChannel", "123");
|
||||||
|
safeConfig(getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
//get welcome message
|
||||||
|
this.welcomeMessage = config.get("welcomeMessage").toString();
|
||||||
|
this.welcomeChannel = Long.parseLong(config.get("welcomeChannel").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Welcomes new Members\n" +
|
||||||
|
"`welcome SetWelcomeMessage MESSAGE` set Welcome message use `$USER` to mention the new user\n" +
|
||||||
|
"`welcome SetWelcomeChannel #CHANNEL` set Channel where new members are welcomed";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(GenericEvent event) {
|
||||||
|
|
||||||
|
///////////////////////////////////
|
||||||
|
// RESPONDE TO JOIN
|
||||||
|
///////////////////////////////////
|
||||||
|
if (event instanceof GuildMemberJoinEvent){
|
||||||
|
logger.debug("Welcome triggered");
|
||||||
|
|
||||||
|
GuildMemberJoinEvent thisEvent = (GuildMemberJoinEvent) event;
|
||||||
|
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
eb.setTitle("Welcome in " + thisEvent.getGuild().getName() + " !");
|
||||||
|
eb.setDescription(welcomeMessage.replaceAll("\\$USER", thisEvent.getUser().getName()));
|
||||||
|
|
||||||
|
thisEvent.getGuild().getTextChannelById(welcomeChannel).sendMessage(eb.build()).queue();
|
||||||
|
|
||||||
|
///////////////////////////////////
|
||||||
|
// SETUP
|
||||||
|
///////////////////////////////////
|
||||||
|
} else if (event instanceof GuildMessageReceivedEvent) {
|
||||||
|
|
||||||
|
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
|
||||||
|
|
||||||
|
if (!isCommand(thisEvent.getMessage()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!checkForAdmin(thisEvent.getMember())) {
|
||||||
|
//STUB
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "SetWelcomeMessage")) {
|
||||||
|
getConfig().remove("welcomeMessage");
|
||||||
|
getConfig().put("welcomeMessage", thisEvent.getMessage().getContentRaw()
|
||||||
|
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " SetWelcomeMessage )",""));
|
||||||
|
|
||||||
|
safeConfig(getConfig());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Set Welcomemessage to: `" + getConfig().get("welcomeMessage").toString() + "`").queue();
|
||||||
|
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "SetWelcomeChannel")) {
|
||||||
|
|
||||||
|
if (thisEvent.getMessage().getMentionedChannels().size() == 1){
|
||||||
|
getConfig().remove("welcomeChannel");
|
||||||
|
getConfig().put("welcomeChannel", thisEvent.getMessage().getMentionedChannels().get(0).getIdLong());
|
||||||
|
|
||||||
|
safeConfig(getConfig());
|
||||||
|
|
||||||
|
thisEvent.getChannel().sendMessage("Set Welcomechannel to: " +
|
||||||
|
thisEvent.getGuild().getGuildChannelById(Long.parseLong(getConfig().get("welcomeChannel").toString())).getName()).queue();
|
||||||
|
} else {
|
||||||
|
thisEvent.getChannel().sendMessage("please mention a specific channel!").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showSettings() {
|
||||||
|
return "WELCOME-CHANNEL: `" + ((getGuildController().getJda().getGuildChannelById(welcomeChannel) == null) ? "none" : getGuildController().getJda().getGuildChannelById(welcomeChannel).getName()) + "`\n" +
|
||||||
|
"WELCOME-MESSAGE: `" + welcomeMessage + "`";
|
||||||
|
}
|
||||||
|
}
|
21
src/main/resources/log4j.properties
Normal file
21
src/main/resources/log4j.properties
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Root logger option
|
||||||
|
log4j.rootLogger=TRACE, stdout, FILE
|
||||||
|
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.stdout.Target=System.out
|
||||||
|
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %-5p [%c] - %m%n
|
||||||
|
|
||||||
|
# Direct log messages to a log file
|
||||||
|
log4j.appender.FILE=org.apache.log4j.FileAppender
|
||||||
|
log4j.appender.FILE.File=MissingIdentifier.log
|
||||||
|
log4j.appender.FILE.MaxFileSize=50MB
|
||||||
|
log4j.appender.FILE.MaxBackupIndex=10
|
||||||
|
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
|
||||||
|
log4j.appender.FILE.ImmediateFlush=true
|
||||||
|
log4j.appender.FILE.Threshold=debug
|
||||||
|
log4j.appender.FILE.Append=true
|
||||||
|
|
||||||
|
# exclude JDA DEBUG
|
||||||
|
log4j.logger.net.dv8tion.jda=DEBUG, stdout
|
||||||
|
#log4j.additivity.net.dv8tion.jda=false
|
Loading…
Reference in a new issue