feat: added basic system, added some test commands, added TokenManager
This commit is contained in:
parent
f112019160
commit
359c3b5211
10 changed files with 280 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
/.idea/
|
/.idea/
|
||||||
/.gradle/
|
/.gradle/
|
||||||
|
/data/token.judd
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
plugins {
|
plugins {
|
||||||
id("java")
|
java
|
||||||
|
id("com.github.johnrengelman.shadow") version "7.1.2"
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "de.limited_dev"
|
group = "de.limited_dev"
|
||||||
version = "1.0.0"
|
version = "0.1.0-alpha"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -12,8 +13,40 @@ repositories {
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
|
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
|
||||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
|
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
|
||||||
|
implementation("net.dv8tion:JDA:5.0.0-alpha.20")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.getByName<Test>("test") {
|
tasks.getByName<Test>("test") {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<Jar> {
|
||||||
|
manifest {
|
||||||
|
attributes["Main-Class"] = "de.limited_dev.lil_judd.Main"
|
||||||
|
}
|
||||||
|
// To add all of the dependencies
|
||||||
|
from(sourceSets.main.get().output)
|
||||||
|
|
||||||
|
dependsOn(configurations.runtimeClasspath)
|
||||||
|
from({
|
||||||
|
configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
|
||||||
|
dependencies {
|
||||||
|
include(dependency("net.dv8tion:JDA:5.0.0-alpha.20"))
|
||||||
|
//include(dependency("com.sedmelluq:lavaplayer:1.3.77"))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<JavaCompile>{
|
||||||
|
options.encoding = "UTF-8"
|
||||||
|
}
|
||||||
|
|
||||||
|
java{
|
||||||
|
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = org.gradle.api.JavaVersion.VERSION_17
|
||||||
}
|
}
|
|
@ -1,7 +1,54 @@
|
||||||
package de.limited_dev.lil_judd;
|
package de.limited_dev.lil_judd;
|
||||||
|
|
||||||
public class Main {
|
import de.limited_dev.lil_judd.listeners.GuildStateListener;
|
||||||
public static void main(String[] args){
|
import de.limited_dev.lil_judd.listeners.ReadyListener;
|
||||||
|
import de.limited_dev.lil_judd.listeners.SlashCommandInteractionListener;
|
||||||
|
import de.limited_dev.lil_judd.util.Logger;
|
||||||
|
import de.limited_dev.lil_judd.util.managers.TokenManager;
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
|
import net.dv8tion.jda.api.OnlineStatus;
|
||||||
|
import net.dv8tion.jda.api.entities.Activity;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
private static JDA jda;
|
||||||
|
private static Logger lgr = new Logger();
|
||||||
|
private static final TokenManager tokenManager = TokenManager.getInstance();
|
||||||
|
private static long launchTime;
|
||||||
|
|
||||||
|
public static void main(String[] args){
|
||||||
|
lgr.info("li'l Judd is waking up ...");
|
||||||
|
|
||||||
|
launchTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
tokenManager.load();
|
||||||
|
|
||||||
|
jda = JDABuilder.createDefault(tokenManager.getToken())
|
||||||
|
.setActivity(Activity.watching("You"))
|
||||||
|
.setStatus(OnlineStatus.DO_NOT_DISTURB)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
jda.addEventListener(new ReadyListener());
|
||||||
|
jda.addEventListener(new SlashCommandInteractionListener());
|
||||||
|
jda.addEventListener(new GuildStateListener());
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
jda.awaitReady();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
lgr.info("Ready to take over the world");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JDA getJda() {
|
||||||
|
return jda;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Logger getLgr() {
|
||||||
|
return lgr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package de.limited_dev.lil_judd.listeners;
|
||||||
|
|
||||||
|
import de.limited_dev.lil_judd.Main;
|
||||||
|
import de.limited_dev.lil_judd.util.Logger;
|
||||||
|
import de.limited_dev.lil_judd.util.SlashCommandHelper;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
||||||
|
import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class GuildStateListener extends ListenerAdapter {
|
||||||
|
private Logger lgr = Main.getLgr();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGuildJoin(@NotNull GuildJoinEvent event) {
|
||||||
|
lgr.info("I have been added to a guild.");
|
||||||
|
Guild g = event.getGuild();
|
||||||
|
SlashCommandHelper.addSlashCommandsToGuild(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGuildLeave(@NotNull GuildLeaveEvent event) {
|
||||||
|
lgr.info("I have been removed from a guild.");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package de.limited_dev.lil_judd.listeners;
|
||||||
|
|
||||||
|
import de.limited_dev.lil_judd.Main;
|
||||||
|
import de.limited_dev.lil_judd.util.Logger;
|
||||||
|
import net.dv8tion.jda.api.events.ReadyEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ReadyListener extends ListenerAdapter {
|
||||||
|
private final Logger lgr = Main.getLgr();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReady(@NotNull ReadyEvent event) {
|
||||||
|
String usernameOfSelf = Main.getJda().getSelfUser().getName();
|
||||||
|
lgr.info("Logged into: " + usernameOfSelf);
|
||||||
|
lgr.info(usernameOfSelf + " is ready for Freddy");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package de.limited_dev.lil_judd.listeners;
|
||||||
|
|
||||||
|
import de.limited_dev.lil_judd.Main;
|
||||||
|
import de.limited_dev.lil_judd.util.EmbeddedMessageHelper;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class SlashCommandInteractionListener extends ListenerAdapter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
||||||
|
if(event.getName().equals("ping")){
|
||||||
|
event.reply("My connection to the home base takes **" + Main.getJda().getGatewayPing() + "ms**").queue();
|
||||||
|
}
|
||||||
|
else if(event.getName().equals("info")){
|
||||||
|
EmbeddedMessageHelper.sendSimpleOneLiner(event, Main.getJda().getSelfUser().getName(), "Bot information","I'm li'l Judd. I'm better then him, and you know it.", "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fvignette.wikia.nocookie.net%2Fsplatoon%2Fimages%2Fa%2Fa3%2FLittle_Judd_Animated.gif%2Frevision%2Flatest%3Fcb%3D20170605172120&f=1&nofb=1&ipt=f6197a3fdaf8bd6755347ba4e4c67a91320ff047969a9fa1ef4ee3bc88840ffe&ipo=images");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package de.limited_dev.lil_judd.util;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.api.events.Event;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class EmbeddedMessageHelper {
|
||||||
|
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss | dd/MM/yyyy");
|
||||||
|
|
||||||
|
public static void sendSimpleOneLiner(SlashCommandInteractionEvent event, String author, String title, String description, String thumbnailURL){
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
|
eb.setAuthor(author);
|
||||||
|
eb.setTitle(title);
|
||||||
|
eb.setColor(Color.ORANGE);
|
||||||
|
eb.setDescription(description);
|
||||||
|
eb.setThumbnail(thumbnailURL);
|
||||||
|
eb.setFooter(">" + dtf.format(now) + " - " + event.getUser().getName() + "#" + event.getUser().getDiscriminator());
|
||||||
|
event.replyEmbeds(eb.build()).queue();
|
||||||
|
}
|
||||||
|
}
|
20
src/main/java/de/limited_dev/lil_judd/util/Logger.java
Normal file
20
src/main/java/de/limited_dev/lil_judd/util/Logger.java
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package de.limited_dev.lil_judd.util;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class Logger {
|
||||||
|
private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yy/MM/dd HH:mm:ss");
|
||||||
|
public void info(String msg) {
|
||||||
|
StackTraceElement caller = Thread.currentThread().getStackTrace()[2];
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
try {
|
||||||
|
System.out.println("[" + Class.forName(caller.getClassName()).getSimpleName() + "." +
|
||||||
|
caller.getMethodName() + ":" + caller.getLineNumber() + "] [" + dtf.format(now) + "] <" + msg + ">");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// Ich kann nicht mehr
|
||||||
|
// [Klasse.Funktion] [T/M HH:MM] <NACHRICHT>
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package de.limited_dev.lil_judd.util;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||||
|
|
||||||
|
public class SlashCommandHelper {
|
||||||
|
|
||||||
|
public static void addSlashCommandsToGuild(Guild g){
|
||||||
|
g.updateCommands().addCommands(
|
||||||
|
Commands.slash("ping", "Pong! Display the Ping"),
|
||||||
|
Commands.slash("info", "Shows Info about me")
|
||||||
|
).queue();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
package de.limited_dev.lil_judd.util.managers;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class TokenManager {
|
||||||
|
|
||||||
|
private static TokenManager tokenManager;
|
||||||
|
private final String basePath = "./data/";
|
||||||
|
private final String filename = "token.judd";
|
||||||
|
private final String filePath = basePath + filename;
|
||||||
|
private String token;
|
||||||
|
|
||||||
|
public static TokenManager getInstance(){
|
||||||
|
if(tokenManager == null){
|
||||||
|
tokenManager = new TokenManager();
|
||||||
|
}
|
||||||
|
return tokenManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load(){
|
||||||
|
File dir = new File(basePath);
|
||||||
|
if(!dir.exists()){
|
||||||
|
save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
File configFile = new File(dir, filename);
|
||||||
|
if(!configFile.exists()){
|
||||||
|
save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
InputStream input = new FileInputStream(filePath);
|
||||||
|
Properties prop = new Properties();
|
||||||
|
|
||||||
|
prop.load(input);
|
||||||
|
token = prop.getProperty("token").equals("empty") ? null : prop.getProperty("token");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save(){
|
||||||
|
File dir = new File(basePath);
|
||||||
|
if(!dir.exists()){
|
||||||
|
dir.mkdirs();
|
||||||
|
}
|
||||||
|
File configFile = new File(dir, filename);
|
||||||
|
if(!configFile.exists()){
|
||||||
|
try{
|
||||||
|
configFile.createNewFile();
|
||||||
|
} catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
OutputStream output = new FileOutputStream(filePath);
|
||||||
|
Properties prop = new Properties();
|
||||||
|
|
||||||
|
prop.setProperty("token", "empty");
|
||||||
|
|
||||||
|
prop.store(output, null);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue