Add new alias for delete queue and improve logic

This commit is contained in:
anthorob committed 2022-06-18 17:25:36 -04:00
1 parent 6cceb7da16
commit afb4bd9e89
12 files changed
+196 -95

No files matched your search

+3 -2
View File
@@ -4,9 +4,10 @@ BOT_PREFIX=
BOT_OWNER= BOT_OWNER=
BOT_PAPISID= BOT_PAPISID=
BOT_PSID= BOT_PSID=
API_PORT=9000
MYSQL_HOST= MYSQL_HOST=127.0.0.1
MYSQL_USER= MYSQL_USER=root
MYSQL_PASSWORD= MYSQL_PASSWORD=
MYSQL_DATABASE= MYSQL_DATABASE=
MYSQL_PORT=3306 MYSQL_PORT=3306
+19 -7
View File
@@ -99,6 +99,12 @@
</repositories> </repositories>
<dependencies> <dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
</dependency>
<dependency> <dependency>
<groupId>net.dv8tion</groupId> <groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId> <artifactId>JDA</artifactId>
@@ -118,7 +124,7 @@
<dependency> <dependency>
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId> <artifactId>okhttp</artifactId>
<version>4.9.3</version> <version>4.10.0</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -134,7 +140,7 @@
<dependency> <dependency>
<groupId>io.sentry</groupId> <groupId>io.sentry</groupId>
<artifactId>sentry</artifactId> <artifactId>sentry</artifactId>
<version>5.6.3</version> <version>6.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>p6spy</groupId> <groupId>p6spy</groupId>
@@ -146,7 +152,7 @@
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20210307</version> <version>20220320</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -158,17 +164,17 @@
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version> <version>8.0.29</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId> <artifactId>log4j-core</artifactId>
<version>2.17.1</version> <version>2.17.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId> <artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version> <version>2.17.2</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -176,6 +182,12 @@
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <version>3.12.0</version>
</dependency> </dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
@@ -185,7 +197,7 @@
<dependency> <dependency>
<groupId>org.openjdk.nashorn</groupId> <groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId> <artifactId>nashorn-core</artifactId>
<version>15.3</version> <version>15.4</version>
</dependency> </dependency>
+2 -9
View File
@@ -1,12 +1,3 @@
-- phpMyAdmin SQL Dump
-- version 5.1.0
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1:3306
-- Generation Time: Mar 14, 2022 at 08:59 AM
-- Server version: 10.4.10-MariaDB
-- PHP Version: 7.4.19
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION; START TRANSACTION;
SET time_zone = "+00:00"; SET time_zone = "+00:00";
@@ -20,7 +11,9 @@ SET time_zone = "+00:00";
-- --
-- Database: `netneutrality` -- Database: `netneutrality`
-- --
CREATE DATABASE IF NOT EXISTS netneutrality CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE netneutrality;
-- -------------------------------------------------------- -- --------------------------------------------------------
-- --
@@ -38,6 +38,7 @@ public class NetNeutrality {
options.setEnvironment(env); options.setEnvironment(env);
options.setTracesSampleRate(1.0); options.setTracesSampleRate(1.0);
options.setDebug(env.equals("dev")); options.setDebug(env.equals("dev"));
options.setRelease("[email protected]");
}); });
if ("dev".equals(env)) { if ("dev".equals(env)) {
@@ -49,7 +50,7 @@ public class NetNeutrality {
CommandManager.init(); CommandManager.init();
MusicManager.initPlayerManager(); MusicManager.initPlayerManager();
jda.addEventListener(new MessageReceivedHandler(), new EditHandler(), new ServerJoinHandler()); jda.addEventListener(new MessageReceivedHandler(), new EditHandler(), new ServerJoinHandler());
new WebApi(9000); new WebApi(Integer.parseInt(Settings.getInstance().get("API_PORT", "9000")));
jda.getPresence().setActivity(Activity.watching("you")); jda.getPresence().setActivity(Activity.watching("you"));
Runtime.getRuntime().addShutdownHook(new BaseThreadFactory("shutdown").newThread(new ShutdownThread())); Runtime.getRuntime().addShutdownHook(new BaseThreadFactory("shutdown").newThread(new ShutdownThread()));
@@ -34,7 +34,7 @@ public class DeleteQueueCommand extends AbstractMusicCommand {
@Override @Override
public String[] getAlias() { public String[] getAlias() {
return new String[] {"delq", "delqueue"}; return new String[] {"delq", "delqueue", "clear"};
} }
@Override @Override
@@ -67,8 +67,7 @@ public class DeleteQueueCommand extends AbstractMusicCommand {
if (context.getArg(0).equals("all")) { if (context.getArg(0).equals("all")) {
if (queueSize > 0) { if (queueSize > 0) {
player.leave(); player.getScheduler().getQueueManager().clearQueue();
player.getScheduler().getQueueManager().getQueue().clear();
context.reply(String.format("Removed %d track%s from the queue", queueSize--, (queueSize > 1 ? "s" : ""))); context.reply(String.format("Removed %d track%s from the queue", queueSize--, (queueSize > 1 ? "s" : "")));
} else { } else {
context.reply("Queue is empty!"); context.reply("Queue is empty!");
@@ -47,13 +47,14 @@ public class MusicManager {
private final Guild guild; private final Guild guild;
private final AudioPlayer player; private final AudioPlayer player;
private final TrackScheduler scheduler; private final TrackScheduler scheduler;
private TrackLoadingHandler lastLoadingHandler;
private ScheduledFuture<?> autoDisconnectThread; private ScheduledFuture<?> autoDisconnectThread;
private final int baseVolume; private final int baseVolume;
private MusicManager(Guild guild) { private MusicManager(Guild guild) {
this.guild = guild; this.guild = guild;
this.player = playerManager.createPlayer(); this.player = playerManager.createPlayer();
this.scheduler = new TrackScheduler(player, guild); this.scheduler = new TrackScheduler(this);
this.baseVolume = Integer.parseInt(GuildManager.getManager(guild).getSetting(GuildManager.Settings.MUSIC_VOLUME)); this.baseVolume = Integer.parseInt(GuildManager.getManager(guild).getSetting(GuildManager.Settings.MUSIC_VOLUME));
guild.getAudioManager().setSendingHandler(new AudioPlayerSendHandler(player)); guild.getAudioManager().setSendingHandler(new AudioPlayerSendHandler(player));
@@ -117,10 +118,18 @@ public class MusicManager {
return info.getRequester(); return info.getRequester();
} }
protected AudioPlayer getPlayer() {
return player;
}
public Guild getGuild() { public Guild getGuild() {
return guild; return guild;
} }
public TrackLoadingHandler getLastLoadingHandler() {
return lastLoadingHandler;
}
public synchronized void leave() { public synchronized void leave() {
if (isConnected()) { if (isConnected()) {
logger.debug("Guild {}: leaving voice channel {}", guild.getId(), guild.getAudioManager().getConnectedChannel().getId()); logger.debug("Guild {}: leaving voice channel {}", guild.getId(), guild.getAudioManager().getConnectedChannel().getId());
@@ -183,64 +192,8 @@ public class MusicManager {
scheduler.getTopicManager().attachTextChannel(channel); scheduler.getTopicManager().attachTextChannel(channel);
if (identifier != null) { if (identifier != null) {
playerManager.loadItemOrdered(this, identifier, new AudioLoadResultHandler() { lastLoadingHandler = new TrackLoadingHandler(identifier, silent, this, context);
playerManager.loadItemOrdered(this, identifier, lastLoadingHandler);
@Override
public void trackLoaded(AudioTrack audioTrack) {
logger.debug("Guild {}: track loaded: {}", guild.getId(), identifier);
context.deleteMessage();
scheduler.getQueueManager().queue(audioTrack, member);
if (!silent) {
//context.replyToMessage("Added track to queue");
context.reply(MessageFunction.buildAddingTrackMessage(audioTrack, member, identifier));
}
}
@Override
public void playlistLoaded(AudioPlaylist audioPlaylist) {
logger.debug("Guild {}: playlist loaded: {}", guild.getId(), identifier);
context.deleteMessage();
if (audioPlaylist.isSearchResult()) {
AudioTrack track = audioPlaylist.getTracks().get(0);
scheduler.getQueueManager().queue(track, member);
if (!silent) {
//context.replyToMessage(new MessageBuilder("Added track to queue: ").append(String.format("https://youtu.be/%s", track.getIdentifier())).build());
context.reply(MessageFunction.buildAddingTrackMessage(track, member, String.format("https://youtu.be/%s", track.getIdentifier())));
}
} else {
if (!silent) {
//context.replyToMessage("Added playlist to queue");
context.reply(MessageFunction.buildAddingPlaylistMessage(audioPlaylist, member, identifier));
}
for (AudioTrack track : audioPlaylist.getTracks()) {
synchronized (scheduler.getQueueManager().getQueue()) {
scheduler.getQueueManager().queue(track, member);
}
}
}
}
@Override
public void noMatches() {
logger.debug("Guild {}: no matches for identifier {}", guild.getId(), identifier);
context.replyToMessage("No matches found");
}
@Override
public void loadFailed(FriendlyException e) {
logger.debug("Guild {}: load failed for identifier {}", guild.getId(), identifier, e);
context.replyToMessage("Failed to load track: " + e.getMessage());
}
});
} else { } else {
context.replyToMessage("No source found to play the given url"); context.replyToMessage("No source found to play the given url");
} }
@@ -87,13 +87,16 @@ public class QueueManager {
} }
private final Logger logger = LoggerFactory.getLogger(QueueManager.class); private final Logger logger = LoggerFactory.getLogger(QueueManager.class);
private final TrackScheduler scheduler;
private final AudioPlayer player; private final AudioPlayer player;
private final Guild guild; private final Guild guild;
private final Deque<TrackInfo> queue; private final Deque<TrackInfo> queue;
public QueueManager(AudioPlayer player, Guild guild) { public QueueManager(TrackScheduler scheduler) {
this.player = player; this.scheduler = scheduler;
this.guild = guild; this.player = scheduler.getPlayer();
this.guild = scheduler.getGuild();
this.queue = new LinkedBlockingDeque<>(); this.queue = new LinkedBlockingDeque<>();
} }
@@ -104,10 +107,23 @@ public class QueueManager {
} }
} }
public TrackScheduler getScheduler() {
return scheduler;
}
public Guild getGuild() { public Guild getGuild() {
return guild; return guild;
} }
public void clearQueue() {
scheduler.getMusicManager().leave();
scheduler.getMusicManager().getLastLoadingHandler().stopLoading();
synchronized (queue) {
queue.clear();
}
}
public ArrayList<AudioTrack> getAllQueuedTrack() { public ArrayList<AudioTrack> getAllQueuedTrack() {
synchronized (queue) { synchronized (queue) {
ArrayList<AudioTrack> tracks = new ArrayList<>(); ArrayList<AudioTrack> tracks = new ArrayList<>();
@@ -15,12 +15,18 @@ import java.util.concurrent.TimeUnit;
public class TopicManager { public class TopicManager {
private final TrackScheduler scheduler;
private final Guild guild; private final Guild guild;
private TextChannel channel; private TextChannel channel;
private String originalTopic; private String originalTopic;
public TopicManager(Guild guild) { public TopicManager(TrackScheduler scheduler) {
this.guild = guild; this.scheduler = scheduler;
this.guild = scheduler.getGuild();
}
public TrackScheduler getScheduler() {
return scheduler;
} }
public Guild getGuild() { public Guild getGuild() {
@@ -0,0 +1,105 @@
package netneutrality.music;
/*
* Copyright (c) anthorob
*
* https://xtremcommunity.com/
* https://discord.gg/CdFcyQ
*/
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import net.dv8tion.jda.api.entities.Guild;
import netneutrality.core.context.CommandContext;
import netneutrality.utils.MessageFunction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TrackLoadingHandler implements AudioLoadResultHandler {
private final Logger logger = LoggerFactory.getLogger(TrackLoadingHandler.class);
private final String identifier;
private final boolean silent;
private boolean loadingDisabled = false;
private final Guild guild;
private final TrackScheduler scheduler;
private final CommandContext context;
public TrackLoadingHandler(String identifier, boolean silent, MusicManager manager, CommandContext context) {
this.identifier = identifier;
this.silent = silent;
this.guild = manager.getGuild();
this.scheduler = manager.getScheduler();
this.context = context;
}
public synchronized void stopLoading() {
logger.debug("Guild {}: stopped loading of new tracks", guild.getId());
loadingDisabled = true;
}
@Override
public void trackLoaded(AudioTrack audioTrack) {
if (loadingDisabled) {
return;
}
logger.debug("Guild {}: track loaded: {}", guild.getId(), identifier);
context.deleteMessage();
scheduler.getQueueManager().queue(audioTrack, context.getGuildUser());
if (!silent) {
//context.replyToMessage("Added track to queue");
context.reply(MessageFunction.buildAddingTrackMessage(audioTrack, context.getGuildUser(), identifier));
}
}
@Override
public void playlistLoaded(AudioPlaylist audioPlaylist) {
if (loadingDisabled) {
return;
}
logger.debug("Guild {}: playlist loaded: {}", guild.getId(), identifier);
context.deleteMessage();
if (audioPlaylist.isSearchResult()) {
AudioTrack track = audioPlaylist.getTracks().get(0);
scheduler.getQueueManager().queue(track, context.getGuildUser());
if (!silent) {
//context.replyToMessage(new MessageBuilder("Added track to queue: ").append(String.format("https://youtu.be/%s", track.getIdentifier())).build());
context.reply(MessageFunction.buildAddingTrackMessage(track, context.getGuildUser(), String.format("https://youtu.be/%s", track.getIdentifier())));
}
} else {
if (!silent) {
//context.replyToMessage("Added playlist to queue");
context.reply(MessageFunction.buildAddingPlaylistMessage(audioPlaylist, context.getGuildUser(), identifier));
}
for (AudioTrack track : audioPlaylist.getTracks()) {
synchronized (scheduler.getQueueManager().getQueue()) {
scheduler.getQueueManager().queue(track, context.getGuildUser());
}
}
}
}
@Override
public void noMatches() {
logger.debug("Guild {}: no matches for identifier {}", guild.getId(), identifier);
context.replyToMessage("No matches found");
}
@Override
public void loadFailed(FriendlyException e) {
logger.debug("Guild {}: load failed for identifier {}", guild.getId(), identifier, e);
context.replyToMessage("Failed to load track: " + e.getMessage());
}
}
@@ -17,18 +17,20 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class TrackScheduler extends AudioEventAdapter { public class TrackScheduler extends AudioEventAdapter {
private final static Logger logger = LoggerFactory.getLogger(TrackScheduler.class); private final static Logger logger = LoggerFactory.getLogger(TrackScheduler.class);
private final QueueManager queueManager; private final QueueManager queueManager;
private final TopicManager topicManager; private final TopicManager topicManager;
private final MusicManager manager;
private final AudioPlayer player; private final AudioPlayer player;
private final Guild guild; private final Guild guild;
public TrackScheduler(AudioPlayer player, Guild guild) { public TrackScheduler(MusicManager manager) {
this.player = player; this.manager = manager;
this.guild = guild; this.player = manager.getPlayer();
this.queueManager = new QueueManager(player, guild); this.guild = manager.getGuild();
this.topicManager = new TopicManager(guild); this.queueManager = new QueueManager(this);
this.topicManager = new TopicManager(this);
} }
public QueueManager getQueueManager() { public QueueManager getQueueManager() {
@@ -39,10 +41,18 @@ public class TrackScheduler extends AudioEventAdapter {
return topicManager; return topicManager;
} }
public MusicManager getMusicManager() {
return manager;
}
public AudioPlayer getPlayer() { public AudioPlayer getPlayer() {
return player; return player;
} }
public Guild getGuild() {
return guild;
}
@Override @Override
public void onPlayerPause(AudioPlayer player) { public void onPlayerPause(AudioPlayer player) {
// Player was paused // Player was paused
+8
View File
@@ -30,6 +30,14 @@ logger.jda.additivity = false
logger.jda.appenderRef.rolling.ref = LogToRollingFile logger.jda.appenderRef.rolling.ref = LogToRollingFile
logger.jda.appenderRef.console.ref = consoleLogger logger.jda.appenderRef.console.ref = consoleLogger
logger.lavaplayer.name = com.sedmelluq.discord
logger.lavaplayer.level = info
logger.lavaplayer.additivity = false
logger.lavaplayer.appenderRef.rolling.ref = LogToRollingFile
logger.lavaplayer.appenderRef.console.ref = consoleLogger
logger.app.name = netneutrality logger.app.name = netneutrality
logger.app.level = debug logger.app.level = debug
logger.app.additivity = false logger.app.additivity = false
@@ -23,9 +23,6 @@ public class LoadableSourceTest {
LoadableSourceManager loadableSourceManager = new LoadableSourceManager(); LoadableSourceManager loadableSourceManager = new LoadableSourceManager();
CachedSource cachedSource = loadableSourceManager.get(new AppleMostPlayed()); CachedSource cachedSource = loadableSourceManager.get(new AppleMostPlayed());
System.out.println(cachedSource.getLastAccess());
System.out.println(cachedSource.getSongs());
assertTrue(cachedSource.getSongs().size() > 0); assertTrue(cachedSource.getSongs().size() > 0);
} }
} }