diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 9f0c5b2..8cc70bd 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 291e25c..63a79b3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -23,24 +23,25 @@ repositories {
maven {
url 'https://m2.dv8tion.net/releases'
}
+
+ maven {
+ url 'https://jitpack.io'
+ }
}
dependencies {
// This dependency is used by the application.//
- implementation 'com.google.guava:guava:28.0-jre'
+ implementation 'com.google.guava:guava:31.0.1-jre'
//implementation 'org.slf4j:slf4j-log4j12:2.0.0-alpha0'
implementation 'org.slf4j:slf4j-simple:2.0.0-alpha0'
- implementation 'net.lingala.zip4j:zip4j:2.5.2'
- implementation 'club.minnced:opus-java:1.0.4'
+ implementation 'net.lingala.zip4j:zip4j:2.9.1'
+ implementation 'club.minnced:opus-java:1.1.1'
- implementation 'ws.schild:jave-all-deps:2.7.3'
- implementation 'org.apache.commons:commons-lang3:3.0'
- implementation 'com.sedmelluq:lavaplayer:1.3.75'
- implementation 'net.dv8tion:JDA:4.2.1_253'
-
- // Use JUnit test framework
- testImplementation 'junit:junit:4.12'
+ implementation 'ws.schild:jave-all-deps:3.1.1'
+ implementation 'org.apache.commons:commons-lang3:3.12.0'
+ implementation 'com.sedmelluq:lavaplayer:1.3.78'
+ implementation 'com.github.DV8FromTheWorld:JDA:4.4.0'
}
application {
@@ -50,6 +51,6 @@ application {
jar {
manifest {
- attributes('Manifest-Version': '1.0', 'Main-Class': 'fr.Skydust.JdrBot.JdrBot');
+ attributes 'Main-Class': 'fr.Skydust.JdrBot.JdrBot'
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/Skydust/JdrBot/JdrBot.java b/src/main/java/fr/Skydust/JdrBot/JdrBot.java
index 550c1ae..b6e660b 100755
--- a/src/main/java/fr/Skydust/JdrBot/JdrBot.java
+++ b/src/main/java/fr/Skydust/JdrBot/JdrBot.java
@@ -2,7 +2,9 @@ package fr.Skydust.JdrBot;
import java.time.LocalDateTime;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Timer;
import javax.security.auth.login.LoginException;
import fr.Skydust.JdrBot.cmds.*;
@@ -11,6 +13,7 @@ import fr.Skydust.JdrBot.cmds.record.CancelRecord;
import fr.Skydust.JdrBot.cmds.record.Record;
import fr.Skydust.JdrBot.cmds.record.StopRecord;
import fr.Skydust.JdrBot.stock.Command;
+import fr.Skydust.JdrBot.utils.HeartbeatTask;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
@@ -26,14 +29,32 @@ public class JdrBot {
public static String startcmdchar = "!|:";
public static void main(String args[]) {
+ for (int i=0;i jukeboxSystems.put(e.getGuild().getIdLong(), new JukeboxSystem(msg)));
+ e.getChannel().sendMessage("Chargement...").queue(jukeboxSystem::load);
}
public static JukeboxSystem getGuildsJukebox(Guild guild) {
diff --git a/src/main/java/fr/Skydust/JdrBot/cmds/playmusic/StopMusic.java b/src/main/java/fr/Skydust/JdrBot/cmds/playmusic/StopMusic.java
index 77d3ed8..3a3662d 100755
--- a/src/main/java/fr/Skydust/JdrBot/cmds/playmusic/StopMusic.java
+++ b/src/main/java/fr/Skydust/JdrBot/cmds/playmusic/StopMusic.java
@@ -25,13 +25,13 @@ public class StopMusic extends Command {
}
public static void onGuildVoiceLeave(GuildVoiceLeaveEvent e) {
- if(e.getGuild().getAudioManager().isConnected() && e.getChannelLeft().getName().equals(e.getGuild().getAudioManager().getConnectedChannel().getName()) && e.getChannelLeft().getMembers().size() == 1) {
+ if(e.getGuild().getAudioManager().isConnected() && e.getChannelLeft().getIdLong() == e.getGuild().getAudioManager().getConnectedChannel().getIdLong() && e.getChannelLeft().getMembers().size() == 1) {
stopMusic(e.getGuild());
}
}
public static void onGuildVoiceMove(GuildVoiceMoveEvent e) {
- if(e.getGuild().getAudioManager().isConnected() && e.getChannelLeft().getName().equals(e.getGuild().getAudioManager().getConnectedChannel().getName()) && e.getChannelLeft().getMembers().size() == 1) {
+ if(e.getGuild().getAudioManager().isConnected() && e.getChannelLeft().getIdLong() == e.getGuild().getAudioManager().getConnectedChannel().getIdLong() && e.getChannelLeft().getMembers().size() == 1) {
stopMusic(e.getGuild());
}
}
@@ -39,15 +39,18 @@ public class StopMusic extends Command {
public static void stopMusic(Guild g) {
JukeboxSystem jukebox = PlayMusic.getGuildsJukebox(g);
+ // Deletes the jukebox message
if(jukebox != null) {
- System.out.println("JukeboxMessageIDStop:"+jukebox.jukeboxMessage.getId());
jukebox.jukeboxMessage.delete().queue();
}
+ // Clears the guild's jukebox system
PlayMusic.jukeboxSystems.put(g.getIdLong(), null);
+ // Stops the audio
PlayMusic.getGuildAudioPlayer(g).scheduler.stop();
+ // Leave the voice channel if not recording
if(!Record.getGuildRecordState(g).isRecording) {
g.getAudioManager().closeAudioConnection();
}
diff --git a/src/main/java/fr/Skydust/JdrBot/jukebox/JukeboxSystem.java b/src/main/java/fr/Skydust/JdrBot/jukebox/JukeboxSystem.java
index b8b1cc6..a2134be 100644
--- a/src/main/java/fr/Skydust/JdrBot/jukebox/JukeboxSystem.java
+++ b/src/main/java/fr/Skydust/JdrBot/jukebox/JukeboxSystem.java
@@ -1,7 +1,6 @@
package fr.Skydust.JdrBot.jukebox;
import fr.Skydust.JdrBot.cmds.playmusic.PlayMusic;
-import fr.Skydust.JdrBot.cmds.playmusic.StopMusic;
import fr.Skydust.JdrBot.menu.Menu;
import fr.Skydust.JdrBot.menu.MenuSystem;
import fr.Skydust.JdrBot.utils.Utils;
@@ -14,7 +13,7 @@ import java.util.*;
public class JukeboxSystem {
// Const
public static final String initialFolder = "Songs";
- public static final String musicPlayerThumbnail = "https://cdn4.iconfinder.com/data/icons/miu/24/device-volume-loudspeaker-speaker-up-glyph-128.png";
+ public static final String musicPlayerThumbnail = "https://cd4.iconfinder.com/data/icons/miu/24/device-volume-loudspeaker-speaker-up-glyph-128.png";
// Dyn
// Keeping track of the song currently played to update menus accordingly
@@ -22,11 +21,11 @@ public class JukeboxSystem {
public String songPlayedPath = "";
private final HashMap linkedPath = new HashMap<>();
- public final Message jukeboxMessage;
+ public Message jukeboxMessage;
private String currentFolder = "";
- public JukeboxSystem(Message msg) {
+ public void load(Message msg) {
jukeboxMessage = msg;
openFolder(initialFolder);
}
@@ -42,7 +41,7 @@ public class JukeboxSystem {
File[] files = new File(currentFolder).listFiles();
// If it isn't the root folder, place the return button
- if(!isInRootFolder()) {
+ if(isntInRootFolder()) {
items.add(Utils.ReturnUnicode + " Retour");
}
if(files != null) {
@@ -87,7 +86,7 @@ public class JukeboxSystem {
}
// Return button
- if (!isInRootFolder() && itemId == 0) {
+ if (isntInRootFolder() && itemId == 0) {
// Back one menu
String subFolder = currentFolder.substring(0, currentFolder.lastIndexOf("/"));
currentFolder = subFolder;
@@ -129,11 +128,10 @@ public class JukeboxSystem {
jukeboxMessage.getTextChannel().retrieveMessageById(jukeboxMessage.getIdLong()).queue(msg -> {
MenuSystem.changeMenu(msg, finalMenu);
});
-
}
- public boolean isInRootFolder() {
- return currentFolder.equals(initialFolder);
+ public boolean isntInRootFolder() {
+ return !currentFolder.equals(initialFolder);
}
public static String getFileNameFromItem(String item) {
@@ -141,21 +139,8 @@ public class JukeboxSystem {
}
private final Comparator sortItemsComp = (o1, o2) -> {
- if (o1.isDirectory() && !o2.isDirectory())
- {
- // Directory before non-directory
- return -1;
- }
- else if (!o1.isDirectory() && o2.isDirectory())
- {
- // Non-directory after directory
- return 1;
- }
- else
- {
- // Alphabetic order otherwise
- //return o1.compareTo(o2);
- return o1.compareTo(o2);
- }
+ if (o1.isDirectory() && !o2.isDirectory()) return -1; // Directory before non-directory
+ else if (!o1.isDirectory() && o2.isDirectory()) return 1; // Non-directory after directory
+ else return o1.compareTo(o2); // Alphabetic order otherwise
};
}
diff --git a/src/main/java/fr/Skydust/JdrBot/stock/RecordState.java b/src/main/java/fr/Skydust/JdrBot/stock/RecordState.java
index ce265d4..1969a7a 100755
--- a/src/main/java/fr/Skydust/JdrBot/stock/RecordState.java
+++ b/src/main/java/fr/Skydust/JdrBot/stock/RecordState.java
@@ -14,10 +14,10 @@ import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.CompressionMethod;
import org.apache.commons.codec.EncoderException;
-import ws.schild.jave.AudioAttributes;
import ws.schild.jave.Encoder;
-import ws.schild.jave.EncodingAttributes;
import ws.schild.jave.MultimediaObject;
+import ws.schild.jave.encode.AudioAttributes;
+import ws.schild.jave.encode.EncodingAttributes;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
@@ -106,7 +106,7 @@ public class RecordState {
audio.setChannels(2);
EncodingAttributes ea = new EncodingAttributes();
ea.setAudioAttributes(audio);
- ea.setFormat("mp3");
+ ea.setOutputFormat("mp3");
encoder.encode(new MultimediaObject(wavFile),mp3File,ea);
wavFile.delete();
diff --git a/src/main/java/fr/Skydust/JdrBot/utils/HeartbeatTask.java b/src/main/java/fr/Skydust/JdrBot/utils/HeartbeatTask.java
new file mode 100644
index 0000000..8fd9bfe
--- /dev/null
+++ b/src/main/java/fr/Skydust/JdrBot/utils/HeartbeatTask.java
@@ -0,0 +1,36 @@
+package fr.Skydust.JdrBot.utils;
+
+import fr.Skydust.JdrBot.JdrBot;
+import net.dv8tion.jda.api.events.GatewayPingEvent;
+
+import java.util.TimerTask;
+
+public class HeartbeatTask extends TimerTask {
+ private String command = "";
+ private static boolean heartbeatUpdated = false;
+
+ public HeartbeatTask(String command) {
+ this.command = command;
+ }
+
+ @Override
+ public void run() {
+ if(heartbeatUpdated) {
+ long ping = JdrBot.jda.getGatewayPing();
+
+ try {
+ Runtime.getRuntime().exec(command.replaceAll("\\{ping\\}", String.valueOf(ping)));
+ } catch (Exception e) {
+ System.out.println("Error: "+e.getMessage());
+ }
+
+ System.out.println("Sent heartbeat "+ ping);
+
+ heartbeatUpdated = false;
+ }
+ }
+
+ public static void HeartbeatUpdateEvent(GatewayPingEvent e) {
+ heartbeatUpdated = true;
+ }
+}