From a34d328b1cd2c007a18ce141ed793665cdc3f701 Mon Sep 17 00:00:00 2001 From: Project_IO Date: Sun, 1 Sep 2024 23:25:09 +0900 Subject: [PATCH] feat: first commit --- .gitignore | 42 ++++ build.gradle.kts | 66 +++++ gradle.properties | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 234 ++++++++++++++++++ gradlew.bat | 89 +++++++ settings.gradle.kts | 2 + src/main/java/net/projecttl/p/x32/Px32.java | 42 ++++ .../net/projecttl/p/x32/command/Ping.java | 31 +++ .../p/x32/handler/CommandHandler.java | 34 +++ .../net/projecttl/p/x32/handler/Ready.java | 15 ++ .../kotlin/net/projecttl/p/x32/Database.kt | 4 + .../net/projecttl/p/x32/handler/Command.kt | 9 + .../p/x32/service/ServiceProvider.kt | 4 + src/main/resources/log4j2.xml | 18 ++ 16 files changed, 598 insertions(+) create mode 100644 .gitignore create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 src/main/java/net/projecttl/p/x32/Px32.java create mode 100644 src/main/java/net/projecttl/p/x32/command/Ping.java create mode 100644 src/main/java/net/projecttl/p/x32/handler/CommandHandler.java create mode 100644 src/main/java/net/projecttl/p/x32/handler/Ready.java create mode 100644 src/main/kotlin/net/projecttl/p/x32/Database.kt create mode 100644 src/main/kotlin/net/projecttl/p/x32/handler/Command.kt create mode 100644 src/main/kotlin/net/projecttl/p/x32/service/ServiceProvider.kt create mode 100644 src/main/resources/log4j2.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..16e7a3f --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +.fleet/ +.kotlin/ + +### IntelliJ IDEA ### +.idea/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..eee73b6 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,66 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id("java") + kotlin("jvm") version "2.0.20" + id("com.gradleup.shadow") version "8.3.0" +} + +group = "net.wh64" +version = "1.0-SNAPSHOT" + +val log4j_version: String by project +val exposed_version: String by project + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } + + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(kotlin("stdlib")) + implementation(kotlin("reflect")) + implementation("net.dv8tion:JDA:5.1.0") + implementation("org.apache.logging.log4j:log4j-api:$log4j_version") + implementation("org.apache.logging.log4j:log4j-core:$log4j_version") + implementation("org.apache.logging.log4j:log4j-slf4j2-impl:$log4j_version") + implementation("org.jetbrains.exposed:exposed-core:$exposed_version") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version") + testImplementation(platform("org.junit:junit-bom:5.10.0")) + testImplementation("org.junit.jupiter:junit-jupiter") +} + +tasks { + test { + useJUnitPlatform() + } + + withType { + options.encoding = "UTF-8" + } + + withType { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + } + } + + shadowJar { + archiveBaseName.set(project.name) + archiveClassifier.set("") + archiveVersion.set("") + + manifest { + attributes["Main-Class"] = "net.projecttl.p.x32.Run" + } + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..7707aaf --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +log4j_version=2.23.1 +exposed_version=0.54.0 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..eb6c344 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "px32-bot" + diff --git a/src/main/java/net/projecttl/p/x32/Px32.java b/src/main/java/net/projecttl/p/x32/Px32.java new file mode 100644 index 0000000..9671229 --- /dev/null +++ b/src/main/java/net/projecttl/p/x32/Px32.java @@ -0,0 +1,42 @@ +package net.projecttl.p.x32; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.projecttl.p.x32.command.Ping; +import net.projecttl.p.x32.handler.Command; +import net.projecttl.p.x32.handler.CommandHandler; +import net.projecttl.p.x32.handler.Ready; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; + +public class Px32 { + public static final Logger log = LoggerFactory.getLogger(Px32.class); + private JDA jda; + private final ArrayList commands = new ArrayList<>(); + + private void register() { + commands.forEach(command -> { + jda.upsertCommand(command.getData()).queue(); + log.info("Registered command: {}", command); + }); + } + + public static void main(String[] args) { + Px32 core = new Px32(); + JDABuilder builder = JDABuilder.createDefault(System.getenv("BOT_TOKEN")); + + core.commands.add(new Ping()); + CommandHandler handler = new CommandHandler(core.commands); + + builder.addEventListeners( + handler, + new Ready() + ); + builder.setAutoReconnect(true); + + core.jda = builder.build(); + core.register(); + } +} diff --git a/src/main/java/net/projecttl/p/x32/command/Ping.java b/src/main/java/net/projecttl/p/x32/command/Ping.java new file mode 100644 index 0000000..51d7283 --- /dev/null +++ b/src/main/java/net/projecttl/p/x32/command/Ping.java @@ -0,0 +1,31 @@ +package net.projecttl.p.x32.command; + +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.dv8tion.jda.internal.interactions.CommandDataImpl; +import net.projecttl.p.x32.handler.Command; +import org.jetbrains.annotations.NotNull; + +import static java.lang.String.format; + +public class Ping implements Command { + @NotNull + @Override + public CommandData getData() { + return CommandData.fromData(new CommandDataImpl( + "ping", + "Discord API 레이턴시를 확인 합니다." + ).toData()); + } + + @Override + public void execute(SlashCommandInteractionEvent ev) { + long current = System.currentTimeMillis(); + ev.reply(":hourglass: Just wait a seconds...").queue(hook -> { + String content = format("**BOT**: %d**ms**\n", System.currentTimeMillis() - current) + + format("**API**: %d**ms**", ev.getJDA().getGatewayPing()); + + hook.editOriginal(content).queue(); + }); + } +} diff --git a/src/main/java/net/projecttl/p/x32/handler/CommandHandler.java b/src/main/java/net/projecttl/p/x32/handler/CommandHandler.java new file mode 100644 index 0000000..00ad55f --- /dev/null +++ b/src/main/java/net/projecttl/p/x32/handler/CommandHandler.java @@ -0,0 +1,34 @@ +package net.projecttl.p.x32.handler; + +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; +import net.projecttl.p.x32.Px32; + +import java.util.List; + +public class CommandHandler extends ListenerAdapter { + private final List commands; + + public CommandHandler(List commands) { + this.commands = commands; + } + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent ev) { + if (ev.getUser().isBot()) { + return; + } + + for (Command command : commands) { + if (!command.getData().getName().equals(ev.getName())) { + continue; + } + + command.execute(ev); + + Px32.log.info("user {} execute command: {}", ev.getUser().getId(), ev.getName()); + break; + } + } +} diff --git a/src/main/java/net/projecttl/p/x32/handler/Ready.java b/src/main/java/net/projecttl/p/x32/handler/Ready.java new file mode 100644 index 0000000..2d2cc2c --- /dev/null +++ b/src/main/java/net/projecttl/p/x32/handler/Ready.java @@ -0,0 +1,15 @@ +package net.projecttl.p.x32.handler; + +import net.dv8tion.jda.api.events.session.ReadyEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Ready extends ListenerAdapter { + private static final Logger log = LoggerFactory.getLogger(Ready.class); + + @Override + public void onReady(ReadyEvent ev) { + log.info("Logged in as {}", ev.getJDA().getSelfUser().getAsTag()); + } +} diff --git a/src/main/kotlin/net/projecttl/p/x32/Database.kt b/src/main/kotlin/net/projecttl/p/x32/Database.kt new file mode 100644 index 0000000..0094a73 --- /dev/null +++ b/src/main/kotlin/net/projecttl/p/x32/Database.kt @@ -0,0 +1,4 @@ +package net.projecttl.p.x32 + +class Database { +} \ No newline at end of file diff --git a/src/main/kotlin/net/projecttl/p/x32/handler/Command.kt b/src/main/kotlin/net/projecttl/p/x32/handler/Command.kt new file mode 100644 index 0000000..4e2bdbd --- /dev/null +++ b/src/main/kotlin/net/projecttl/p/x32/handler/Command.kt @@ -0,0 +1,9 @@ +package net.projecttl.p.x32.handler + +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent +import net.dv8tion.jda.api.interactions.commands.build.CommandData + +interface Command { + val data: CommandData + fun execute(ev: SlashCommandInteractionEvent) +} \ No newline at end of file diff --git a/src/main/kotlin/net/projecttl/p/x32/service/ServiceProvider.kt b/src/main/kotlin/net/projecttl/p/x32/service/ServiceProvider.kt new file mode 100644 index 0000000..9b8b851 --- /dev/null +++ b/src/main/kotlin/net/projecttl/p/x32/service/ServiceProvider.kt @@ -0,0 +1,4 @@ +package net.projecttl.p.x32.service + +interface ServiceProvider { +} \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..09794bf --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,18 @@ + + + + %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} %-1level - %msg%n + + + + + + + + + + + + + +