Add Plugin system and Soundcloud searching
This commit is contained in:
parent
3b65e91d10
commit
791f2b3d60
|
@ -3,7 +3,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.fpghoti</groupId>
|
<groupId>com.fpghoti</groupId>
|
||||||
<artifactId>Biscuit</artifactId>
|
<artifactId>Biscuit</artifactId>
|
||||||
<version>1.7</version>
|
<version>1.8</version>
|
||||||
<build>
|
<build>
|
||||||
<sourceDirectory>src/main/java</sourceDirectory>
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
7
pom.xml
7
pom.xml
|
@ -5,7 +5,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.fpghoti</groupId>
|
<groupId>com.fpghoti</groupId>
|
||||||
<artifactId>Biscuit</artifactId>
|
<artifactId>Biscuit</artifactId>
|
||||||
<version>1.7</version>
|
<version>1.8</version>
|
||||||
<build>
|
<build>
|
||||||
<sourceDirectory>src/main/java</sourceDirectory>
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -194,5 +194,10 @@
|
||||||
<artifactId>lavaplayer</artifactId>
|
<artifactId>lavaplayer</artifactId>
|
||||||
<version>1.3.50</version>
|
<version>1.3.50</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.pf4j</groupId>
|
||||||
|
<artifactId>pf4j</artifactId>
|
||||||
|
<version>3.4.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -1,5 +1,6 @@
|
||||||
package com.fpghoti.biscuit;
|
package com.fpghoti.biscuit;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
@ -10,47 +11,47 @@ import org.fusesource.jansi.AnsiConsole;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
import com.fpghoti.biscuit.captcha.BCage;
|
import com.fpghoti.biscuit.captcha.BCage;
|
||||||
import com.fpghoti.biscuit.commands.CommandManager;
|
import com.fpghoti.biscuit.commands.CommandManager;
|
||||||
import com.fpghoti.biscuit.commands.client.AddCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.ChanIDCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.DivideCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.GetConfigCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.GuildIDCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.ToggleRoleCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.HelpCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.MultiplyCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.NotSpammerCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.MakeInviteCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.PingCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.PowerCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.RecentSpammersCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.SaveConfigCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.SoftMuteCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.SquareRootCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.SubtractCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.UIDCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.UnSoftMuteCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.WikiCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.ClearCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.ForceSkipCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.ForceSkipToCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.ClearUserSongsCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.LoopMusicCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.MoveToCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.NowPlayingCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.PauseCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.PlayCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.PlayFirstCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.QueueCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.RemoveCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.ShuffleCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.SkipAllCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.SkipCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.TogglePauseCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.UnpauseCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.client.music.VolumeCommand;
|
|
||||||
import com.fpghoti.biscuit.commands.console.GuildSayCommand;
|
import com.fpghoti.biscuit.commands.console.GuildSayCommand;
|
||||||
import com.fpghoti.biscuit.commands.console.SayCommand;
|
import com.fpghoti.biscuit.commands.console.SayCommand;
|
||||||
import com.fpghoti.biscuit.commands.console.ShutdownConsoleCommand;
|
import com.fpghoti.biscuit.commands.console.ShutdownConsoleCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.AddCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.ChanIDCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.DivideCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.GetConfigCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.GuildIDCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.HelpCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.MakeInviteCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.MultiplyCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.NotSpammerCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.PingCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.PowerCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.RecentSpammersCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.SaveConfigCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.SoftMuteCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.SquareRootCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.SubtractCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.ToggleRoleCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.UIDCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.UnSoftMuteCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.WikiCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.ClearCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.ClearUserSongsCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.ForceSkipCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.ForceSkipToCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.LoopMusicCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.MoveToCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.NowPlayingCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.PauseCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.PlayCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.PlayFirstCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.QueueCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.RemoveCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.ShuffleCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.SkipAllCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.SkipCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.TogglePauseCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.UnpauseCommand;
|
||||||
|
import com.fpghoti.biscuit.commands.discord.music.VolumeCommand;
|
||||||
import com.fpghoti.biscuit.listener.CommandListener;
|
import com.fpghoti.biscuit.listener.CommandListener;
|
||||||
import com.fpghoti.biscuit.listener.DMListener;
|
import com.fpghoti.biscuit.listener.DMListener;
|
||||||
import com.fpghoti.biscuit.listener.GuildListener;
|
import com.fpghoti.biscuit.listener.GuildListener;
|
||||||
|
@ -63,6 +64,7 @@ import com.fpghoti.biscuit.listener.ReactionListener;
|
||||||
import com.fpghoti.biscuit.listener.RoleListener;
|
import com.fpghoti.biscuit.listener.RoleListener;
|
||||||
import com.fpghoti.biscuit.logging.BColor;
|
import com.fpghoti.biscuit.logging.BColor;
|
||||||
import com.fpghoti.biscuit.logging.BiscuitLog;
|
import com.fpghoti.biscuit.logging.BiscuitLog;
|
||||||
|
import com.fpghoti.biscuit.plugin.PluginController;
|
||||||
import com.github.cage.Cage;
|
import com.github.cage.Cage;
|
||||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||||
|
@ -95,10 +97,19 @@ public class Main {
|
||||||
public static boolean isPlugin = false;
|
public static boolean isPlugin = false;
|
||||||
public static boolean shutdownStarted = false;
|
public static boolean shutdownStarted = false;
|
||||||
private static Cage cage;
|
private static Cage cage;
|
||||||
|
private static File pluginsDir;
|
||||||
|
private static PluginController pluginController;
|
||||||
|
|
||||||
private static AudioPlayerManager playerManager;
|
private static AudioPlayerManager playerManager;
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
|
if(!isPlugin) {
|
||||||
|
pluginsDir = new File("plugins");
|
||||||
|
}else {
|
||||||
|
pluginsDir = new File(PluginCore.plugin.getDataFolder(), "plugins");
|
||||||
|
}
|
||||||
|
pluginsDir.mkdir();
|
||||||
|
|
||||||
final Properties properties = new Properties();
|
final Properties properties = new Properties();
|
||||||
try {
|
try {
|
||||||
properties.load(Main.class.getClassLoader().getResourceAsStream("info.properties"));
|
properties.load(Main.class.getClassLoader().getResourceAsStream("info.properties"));
|
||||||
|
@ -186,6 +197,12 @@ public class Main {
|
||||||
CommandManager.addCommand(new GuildSayCommand());
|
CommandManager.addCommand(new GuildSayCommand());
|
||||||
CommandManager.addCommand(new ShutdownConsoleCommand());
|
CommandManager.addCommand(new ShutdownConsoleCommand());
|
||||||
|
|
||||||
|
//Plugins
|
||||||
|
|
||||||
|
pluginController = new PluginController();
|
||||||
|
pluginController.loadPlugins();
|
||||||
|
pluginController.startPlugins();
|
||||||
|
|
||||||
link = "https://discord.com/oauth2/authorize?&client_id=" + jda.getSelfUser().getId() + "&permissions=8&scope=bot";
|
link = "https://discord.com/oauth2/authorize?&client_id=" + jda.getSelfUser().getId() + "&permissions=8&scope=bot";
|
||||||
log.info("Connection successful!");
|
log.info("Connection successful!");
|
||||||
log.info("Startup successful!");
|
log.info("Startup successful!");
|
||||||
|
@ -243,11 +260,16 @@ public class Main {
|
||||||
public static AudioPlayerManager getPlayerManager() {
|
public static AudioPlayerManager getPlayerManager() {
|
||||||
return playerManager;
|
return playerManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File getPluginDirectory() {
|
||||||
|
return pluginsDir;
|
||||||
|
}
|
||||||
|
|
||||||
public static void shutdown() {
|
public static void shutdown() {
|
||||||
if(!shutdownStarted) {
|
if(!shutdownStarted) {
|
||||||
shutdownStarted = true;
|
shutdownStarted = true;
|
||||||
mainBiscuit.log("Shutting down...");
|
mainBiscuit.log("Shutting down...");
|
||||||
|
pluginController.shutdownPlugins();
|
||||||
ArrayList<Biscuit> list = new ArrayList<Biscuit>(biscuits);
|
ArrayList<Biscuit> list = new ArrayList<Biscuit>(biscuits);
|
||||||
for(Biscuit b : list) {
|
for(Biscuit b : list) {
|
||||||
b.remove();
|
b.remove();
|
||||||
|
@ -274,6 +296,10 @@ public class Main {
|
||||||
public static BiscuitLog getLogger() {
|
public static BiscuitLog getLogger() {
|
||||||
return log;
|
return log;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PluginController getPluginController() {
|
||||||
|
return pluginController;
|
||||||
|
}
|
||||||
|
|
||||||
public static void registerBiscuit(Biscuit b) {
|
public static void registerBiscuit(Biscuit b) {
|
||||||
biscuits.add(b);
|
biscuits.add(b);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.audio.queue.AudioQueue;
|
import com.fpghoti.biscuit.audio.queue.AudioQueue;
|
||||||
import com.fpghoti.biscuit.audio.queue.QueuedTrack;
|
import com.fpghoti.biscuit.audio.queue.QueuedTrack;
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTImmediateRequest;
|
import com.fpghoti.biscuit.audio.request.youtube.YTImmediateRequest;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
||||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||||
|
@ -50,7 +51,6 @@ public class AudioScheduler extends AudioEventAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
|
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
|
||||||
|
|
||||||
QueuedTrack qt = queue.getLastTrack();
|
QueuedTrack qt = queue.getLastTrack();
|
||||||
String title = track.getInfo().title;
|
String title = track.getInfo().title;
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public class AudioScheduler extends AudioEventAdapter {
|
||||||
|
|
||||||
case LOAD_FAILED:
|
case LOAD_FAILED:
|
||||||
warn("Something went wrong while trying to load the current track. Trying alternate track.");
|
warn("Something went wrong while trying to load the current track. Trying alternate track.");
|
||||||
if(!qt.triedAlternative()) {
|
if(!qt.triedAlternative() && !queue.isStuckLooping()) {
|
||||||
qt.useAttempt();
|
qt.useAttempt();
|
||||||
TextChannel channel = qt.getCommandChannel();
|
TextChannel channel = qt.getCommandChannel();
|
||||||
MessageText.send(channel, "The video selected cannot be played through the music player. An alternate track will be played if available.");
|
MessageText.send(channel, "The video selected cannot be played through the music player. An alternate track will be played if available.");
|
||||||
|
@ -89,7 +89,7 @@ public class AudioScheduler extends AudioEventAdapter {
|
||||||
|
|
||||||
if (endReason.mayStartNext) {
|
if (endReason.mayStartNext) {
|
||||||
if(loop) {
|
if(loop) {
|
||||||
queue(track.makeClone(), qt.getUserId(), qt.getCommandChannel(), 1);
|
queue(qt.getType(), track.makeClone(), qt.getUserId(), qt.getCommandChannel(), 1);
|
||||||
}
|
}
|
||||||
startPlaying();
|
startPlaying();
|
||||||
}
|
}
|
||||||
|
@ -113,21 +113,21 @@ public class AudioScheduler extends AudioEventAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queue(AudioTrack track, String uid, TextChannel channel) {
|
public void queue(RequestType type, AudioTrack track, String uid, TextChannel channel) {
|
||||||
queue(track, uid, channel, null);
|
queue(type, track, uid, channel, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queue(AudioTrack track, String uid, TextChannel channel, Integer place) {
|
public void queue(RequestType type, AudioTrack track, String uid, TextChannel channel, Integer place) {
|
||||||
if(queue.isEmpty() && biscuit.getAudioPlayer().getPlayingTrack() == null) {
|
if(queue.isEmpty() && biscuit.getAudioPlayer().getPlayingTrack() == null) {
|
||||||
QueuedTrack qt = new QueuedTrack(biscuit, track, uid, channel);
|
QueuedTrack qt = new QueuedTrack(biscuit, track, uid, channel, type);
|
||||||
queue.sendQueueMessage(qt);
|
queue.sendQueueMessage(qt);
|
||||||
queue.addPreviousTrack(qt);
|
queue.addPreviousTrack(qt);
|
||||||
biscuit.getAudioPlayer().playTrack(track);
|
biscuit.getAudioPlayer().playTrack(track);
|
||||||
}else {
|
}else {
|
||||||
if(place != null) {
|
if(place != null) {
|
||||||
queue.addAtPlace(new QueuedTrack(biscuit, track, uid, channel), place);
|
queue.addAtPlace(new QueuedTrack(biscuit, track, uid, channel, type), place);
|
||||||
}else {
|
}else {
|
||||||
queue.add(new QueuedTrack(biscuit, track, uid, channel));
|
queue.add(new QueuedTrack(biscuit, track, uid, channel, type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,9 +52,16 @@ public class PlayCommandUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getSearchPhrase(String[] args) {
|
public static String getSearchPhrase(String[] args) {
|
||||||
String searchPhrase = args[0];
|
return getSearchPhrase(args, 0);
|
||||||
if(args.length > 1) {
|
}
|
||||||
for(int i = 1; i < args.length; i++) {
|
|
||||||
|
public static String getSearchPhrase(String[] args, int startArg) {
|
||||||
|
if(startArg >= args.length) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String searchPhrase = args[startArg];
|
||||||
|
if(args.length > startArg + 1) {
|
||||||
|
for(int i = startArg + 1; i < args.length; i++) {
|
||||||
searchPhrase = searchPhrase + " " + args[i];
|
searchPhrase = searchPhrase + " " + args[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.fpghoti.biscuit.audio.queue;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
import com.fpghoti.biscuit.rest.MessageText;
|
import com.fpghoti.biscuit.rest.MessageText;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
|
||||||
|
@ -77,6 +78,17 @@ public class AudioQueue {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public QueuedTrack getPreviousTrack(int fromEnd) {
|
||||||
|
if(previousTracks.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int index = previousTracks.size() - fromEnd;
|
||||||
|
if(index < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return previousTracks.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
public QueuedTrack getLastTrack() {
|
public QueuedTrack getLastTrack() {
|
||||||
if(previousTracks.isEmpty()) {
|
if(previousTracks.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -182,5 +194,22 @@ public class AudioQueue {
|
||||||
public int size() {
|
public int size() {
|
||||||
return tracks.size();
|
return tracks.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isStuckLooping() {
|
||||||
|
QueuedTrack last = getLastTrack();
|
||||||
|
if(last == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(last.getType() == RequestType.YOUTUBE_IMMEDIATE) {
|
||||||
|
QueuedTrack beforeLast = getPreviousTrack(2);
|
||||||
|
if(beforeLast == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(beforeLast.getTrack().getIdentifier().equals(last.getTrack().getIdentifier())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.fpghoti.biscuit.audio.queue;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
import com.fpghoti.biscuit.util.Util;
|
import com.fpghoti.biscuit.util.Util;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
@ -17,13 +18,15 @@ public class QueuedTrack {
|
||||||
private AudioTrack track;
|
private AudioTrack track;
|
||||||
private String userId;
|
private String userId;
|
||||||
private TextChannel channel;
|
private TextChannel channel;
|
||||||
|
private RequestType type;
|
||||||
private boolean triedAlternative;
|
private boolean triedAlternative;
|
||||||
|
|
||||||
public QueuedTrack(Biscuit biscuit, AudioTrack track, String userId, TextChannel channel) {
|
public QueuedTrack(Biscuit biscuit, AudioTrack track, String userId, TextChannel channel, RequestType type) {
|
||||||
this.biscuit = biscuit;
|
this.biscuit = biscuit;
|
||||||
this.track = track;
|
this.track = track;
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
|
this.type = type;
|
||||||
this.triedAlternative = false;
|
this.triedAlternative = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +73,7 @@ public class QueuedTrack {
|
||||||
duration+=1000;
|
duration+=1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
String desc = "Author: " + track.getInfo().author + "\nLength: " + Util.getTime(duration);
|
String desc = "Type: " + type.toString() + "\nAuthor: " + track.getInfo().author + "\nLength: " + Util.getTime(duration);
|
||||||
|
|
||||||
if(showRemaining) {
|
if(showRemaining) {
|
||||||
desc = desc + "\nTime Remaining: " + Util.getTime(track.getDuration() - track.getPosition());
|
desc = desc + "\nTime Remaining: " + Util.getTime(track.getDuration() - track.getPosition());
|
||||||
|
@ -89,7 +92,7 @@ public class QueuedTrack {
|
||||||
|
|
||||||
embed.setAuthor(name, null, avatar);
|
embed.setAuthor(name, null, avatar);
|
||||||
|
|
||||||
if(isYouTube()) {
|
if(type.toString().toLowerCase().contains("youtube")) {
|
||||||
embed.setThumbnail("https://img.youtube.com/vi/" + track.getIdentifier() + "/mqdefault.jpg");
|
embed.setThumbnail("https://img.youtube.com/vi/" + track.getIdentifier() + "/mqdefault.jpg");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,8 +110,8 @@ public class QueuedTrack {
|
||||||
triedAlternative = true;
|
triedAlternative = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isYouTube() {
|
public RequestType getType() {
|
||||||
return track.getInfo().uri.contains("https://www.youtube.com/watch?v=");
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
package com.fpghoti.biscuit.audio.request;
|
package com.fpghoti.biscuit.audio.request;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCPriorityRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.youtube.YTImmediateRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.youtube.YTPriorityRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
|
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
@ -7,6 +12,46 @@ import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
|
|
||||||
public abstract class PlayRequest {
|
public abstract class PlayRequest {
|
||||||
|
|
||||||
|
public static PlayRequest createPlayRequest(Message message, String searchPhrase) {
|
||||||
|
return createPlayRequest(message, searchPhrase, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PlayRequest createPlayRequest(Message message, String searchPhrase, int insertSlot) {
|
||||||
|
String contents = message.getContentDisplay().toLowerCase();
|
||||||
|
RequestType type = RequestType.YOUTUBE;
|
||||||
|
if(insertSlot > 0) {
|
||||||
|
type = RequestType.YOUTUBE_PRIORITY;
|
||||||
|
}
|
||||||
|
if(contents.contains("soundcloud.com") && searchPhrase.split(" ").length == 1) {
|
||||||
|
type = RequestType.SOUNDCLOUD;
|
||||||
|
if(insertSlot > 0) {
|
||||||
|
type = RequestType.SOUNDCLOUD_PRIORITY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return createPlayRequest(type, message, searchPhrase, insertSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PlayRequest createPlayRequest(RequestType type, Message message, String searchPhrase) {
|
||||||
|
return createPlayRequest(type, message, searchPhrase, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PlayRequest createPlayRequest(RequestType type, Message message, String searchPhrase, int insertSlot) {
|
||||||
|
switch(type) {
|
||||||
|
case YOUTUBE:
|
||||||
|
return new YTRequest(message, searchPhrase);
|
||||||
|
case YOUTUBE_PRIORITY:
|
||||||
|
return new YTPriorityRequest(message, searchPhrase, insertSlot);
|
||||||
|
case YOUTUBE_IMMEDIATE:
|
||||||
|
return new YTImmediateRequest(message.getTextChannel(), message.getAuthor().getId(), searchPhrase);
|
||||||
|
case SOUNDCLOUD:
|
||||||
|
return new SCRequest(message, searchPhrase);
|
||||||
|
case SOUNDCLOUD_PRIORITY:
|
||||||
|
return new SCPriorityRequest(message, searchPhrase, insertSlot);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private TextChannel channel;
|
private TextChannel channel;
|
||||||
private Biscuit biscuit;
|
private Biscuit biscuit;
|
||||||
private String authorId;
|
private String authorId;
|
||||||
|
|
|
@ -2,8 +2,35 @@ package com.fpghoti.biscuit.audio.request;
|
||||||
|
|
||||||
public enum RequestType {
|
public enum RequestType {
|
||||||
|
|
||||||
YOUTUBE,
|
YOUTUBE{
|
||||||
YOUTUBE_IMMEDIATE,
|
@Override
|
||||||
YOUTUBE_PRIORITY;
|
public String toString() {
|
||||||
|
return "YouTube";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
YOUTUBE_IMMEDIATE{
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "YouTube - Immediate";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
YOUTUBE_PRIORITY{
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "YouTube - Priority";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
SOUNDCLOUD{
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Soundcloud";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
SOUNDCLOUD_PRIORITY{
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Soundcloud - Priority";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.fpghoti.biscuit.audio.request.soundcloud;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
|
|
||||||
|
public class SCPriorityRequest extends SCRequest{
|
||||||
|
|
||||||
|
int insertSlot;
|
||||||
|
|
||||||
|
public SCPriorityRequest(Message message, String identifier, int insertSlot) {
|
||||||
|
this(message.getTextChannel(), message.getAuthor().getId(), identifier, insertSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SCPriorityRequest(TextChannel channel, String authorId, String identifier, int insertSlot) {
|
||||||
|
super(channel, authorId, identifier);
|
||||||
|
this.insertSlot = insertSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSlot() {
|
||||||
|
return insertSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSlot(int slotNumber) {
|
||||||
|
insertSlot = slotNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RequestType getType() {
|
||||||
|
return RequestType.SOUNDCLOUD_PRIORITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.fpghoti.biscuit.audio.request.soundcloud;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.PlayRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
|
|
||||||
|
public class SCRequest extends PlayRequest{
|
||||||
|
|
||||||
|
private boolean searchMode;
|
||||||
|
|
||||||
|
public SCRequest(Message message, String identifier) {
|
||||||
|
this(message.getTextChannel(), message.getAuthor().getId(), identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SCRequest(TextChannel channel, String authorId, String identifier) {
|
||||||
|
super(channel, authorId, identifier);
|
||||||
|
searchMode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean inSearchMode() {
|
||||||
|
return searchMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableSearchMode() {
|
||||||
|
searchMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableSearchMode() {
|
||||||
|
searchMode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RequestType getType() {
|
||||||
|
return RequestType.SOUNDCLOUD;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.fpghoti.biscuit.audio.result;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.audio.request.PlayRequest;
|
||||||
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
|
import com.fpghoti.biscuit.rest.MessageText;
|
||||||
|
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;
|
||||||
|
|
||||||
|
public abstract class ResultHandler implements AudioLoadResultHandler {
|
||||||
|
|
||||||
|
private Biscuit biscuit;
|
||||||
|
private PlayRequest request;
|
||||||
|
|
||||||
|
public PlayRequest getRequest() {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void handleTrack(AudioTrack track);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trackLoaded(AudioTrack track) {
|
||||||
|
handleTrack(track);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void playlistLoaded(AudioPlaylist playlist) {
|
||||||
|
AudioTrack track = playlist.getTracks().get(0);
|
||||||
|
handleTrack(track);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadFailed(FriendlyException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
MessageText.send(request.getRequestChannel(), "An error was encountered while attempting to load audio.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Biscuit getBiscuit() {
|
||||||
|
return biscuit;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.fpghoti.biscuit.audio.result;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.Main;
|
||||||
|
import com.fpghoti.biscuit.audio.AudioScheduler;
|
||||||
|
import com.fpghoti.biscuit.audio.request.PlayRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCPriorityRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCRequest;
|
||||||
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
|
import com.fpghoti.biscuit.rest.MessageText;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
|
||||||
|
public class SCResultHandler extends ResultHandler {
|
||||||
|
|
||||||
|
private Biscuit biscuit;
|
||||||
|
private SCRequest request;
|
||||||
|
|
||||||
|
public SCResultHandler(SCRequest request) {
|
||||||
|
this.request = request;
|
||||||
|
this.biscuit = request.getBiscuit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayRequest getRequest() {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleTrack(AudioTrack track) {
|
||||||
|
AudioScheduler sched = biscuit.getAudioScheduler();
|
||||||
|
|
||||||
|
switch(request.getType()) {
|
||||||
|
|
||||||
|
case SOUNDCLOUD:
|
||||||
|
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SOUNDCLOUD_PRIORITY:
|
||||||
|
SCPriorityRequest prq = (SCPriorityRequest) request;
|
||||||
|
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel(), prq.getSlot());
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
biscuit.error("Soundcloud result handler received an incompatible request.");
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trackLoaded(AudioTrack track) {
|
||||||
|
handleTrack(track);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void playlistLoaded(AudioPlaylist playlist) {
|
||||||
|
AudioTrack track = playlist.getTracks().get(0);
|
||||||
|
handleTrack(track);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void noMatches() {
|
||||||
|
if(!request.inSearchMode()) {
|
||||||
|
biscuit.log("Exact match not found. Searching instead...");
|
||||||
|
request.enableSearchMode();
|
||||||
|
Main.getPlayerManager().loadItemOrdered(biscuit.getGuild(),"scsearch:" + request.getIdentifier(), new SCResultHandler(request));
|
||||||
|
}else {
|
||||||
|
MessageText.send(request.getRequestChannel(), "Song match not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadFailed(FriendlyException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
MessageText.send(request.getRequestChannel(), "An error was encountered while attempting to load audio.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,12 +7,11 @@ import com.fpghoti.biscuit.audio.request.youtube.YTPriorityRequest;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
import com.fpghoti.biscuit.rest.MessageText;
|
import com.fpghoti.biscuit.rest.MessageText;
|
||||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
|
||||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
|
||||||
public class YTResultHandler implements AudioLoadResultHandler {
|
public class YTResultHandler extends ResultHandler {
|
||||||
|
|
||||||
private Biscuit biscuit;
|
private Biscuit biscuit;
|
||||||
private YTRequest request;
|
private YTRequest request;
|
||||||
|
@ -32,16 +31,16 @@ public class YTResultHandler implements AudioLoadResultHandler {
|
||||||
switch(request.getType()) {
|
switch(request.getType()) {
|
||||||
|
|
||||||
case YOUTUBE:
|
case YOUTUBE:
|
||||||
sched.queue(track, request.getAuthorId(), request.getRequestChannel());
|
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YOUTUBE_PRIORITY:
|
case YOUTUBE_PRIORITY:
|
||||||
YTPriorityRequest prq = (YTPriorityRequest) request;
|
YTPriorityRequest prq = (YTPriorityRequest) request;
|
||||||
sched.queue(track, request.getAuthorId(), request.getRequestChannel(), prq.getSlot());
|
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel(), prq.getSlot());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YOUTUBE_IMMEDIATE:
|
case YOUTUBE_IMMEDIATE:
|
||||||
sched.queue(track, request.getAuthorId(), request.getRequestChannel(), 1);
|
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel(), 1);
|
||||||
if(!sched.getQueue().isEmpty()) {
|
if(!sched.getQueue().isEmpty()) {
|
||||||
sched.startPlaying();
|
sched.startPlaying();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client;
|
package com.fpghoti.biscuit.commands.discord;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,8 +1,13 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.audio.PlayCommandUtil;
|
import com.fpghoti.biscuit.audio.PlayCommandUtil;
|
||||||
|
import com.fpghoti.biscuit.audio.request.PlayRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCRequest;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.result.ResultHandler;
|
||||||
|
import com.fpghoti.biscuit.audio.result.SCResultHandler;
|
||||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
||||||
|
@ -15,7 +20,7 @@ public class PlayCommand extends MusicClientCommand{
|
||||||
public PlayCommand() {
|
public PlayCommand() {
|
||||||
name = "Play";
|
name = "Play";
|
||||||
description = "Plays the specified song or plays a song found using search parameters.";
|
description = "Plays the specified song or plays a song found using search parameters.";
|
||||||
usage = Main.getMainBiscuit().getProperties().getCommandSignifier() + "play <YouTube link OR Search Phrase>";
|
usage = Main.getMainBiscuit().getProperties().getCommandSignifier() + "play [-sc] <Link OR Search Phrase>";
|
||||||
minArgs = 1;
|
minArgs = 1;
|
||||||
maxArgs = 2000;
|
maxArgs = 2000;
|
||||||
identifiers.add("play");
|
identifiers.add("play");
|
||||||
|
@ -25,8 +30,16 @@ public class PlayCommand extends MusicClientCommand{
|
||||||
public void execute(String[] args, GuildMessageReceivedEvent event) {
|
public void execute(String[] args, GuildMessageReceivedEvent event) {
|
||||||
Guild guild = event.getGuild();
|
Guild guild = event.getGuild();
|
||||||
Biscuit b = Biscuit.getBiscuit(guild);
|
Biscuit b = Biscuit.getBiscuit(guild);
|
||||||
|
|
||||||
|
int searchArg = 0;
|
||||||
|
boolean scSearch = false;
|
||||||
|
|
||||||
|
if(args[0].equalsIgnoreCase("-sc")) {
|
||||||
|
scSearch = true;
|
||||||
|
searchArg = 1;
|
||||||
|
}
|
||||||
|
|
||||||
String searchPhrase = PlayCommandUtil.getSearchPhrase(args);
|
String searchPhrase = PlayCommandUtil.getSearchPhrase(args, searchArg);
|
||||||
|
|
||||||
b.log(event.getAuthor().getName() + " issued a command: -play " + searchPhrase);
|
b.log(event.getAuthor().getName() + " issued a command: -play " + searchPhrase);
|
||||||
|
|
||||||
|
@ -34,9 +47,19 @@ public class PlayCommand extends MusicClientCommand{
|
||||||
if(!connected) {
|
if(!connected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
YTRequest request = new YTRequest(event.getMessage(), searchPhrase);
|
PlayRequest request;
|
||||||
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), new YTResultHandler(request));
|
ResultHandler handler;
|
||||||
|
|
||||||
|
if(scSearch) {
|
||||||
|
request = PlayRequest.createPlayRequest(RequestType.SOUNDCLOUD, event.getMessage(), searchPhrase);
|
||||||
|
handler = new SCResultHandler((SCRequest)request);
|
||||||
|
}else {
|
||||||
|
request = PlayRequest.createPlayRequest(event.getMessage(), searchPhrase);
|
||||||
|
handler = new YTResultHandler((YTRequest)request);
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,9 +1,13 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.audio.PlayCommandUtil;
|
import com.fpghoti.biscuit.audio.PlayCommandUtil;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTPriorityRequest;
|
import com.fpghoti.biscuit.audio.request.PlayRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||||
|
import com.fpghoti.biscuit.audio.request.soundcloud.SCRequest;
|
||||||
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
import com.fpghoti.biscuit.audio.request.youtube.YTRequest;
|
||||||
|
import com.fpghoti.biscuit.audio.result.ResultHandler;
|
||||||
|
import com.fpghoti.biscuit.audio.result.SCResultHandler;
|
||||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
||||||
|
@ -19,7 +23,7 @@ public class PlayFirstCommand extends MusicClientCommand{
|
||||||
public PlayFirstCommand() {
|
public PlayFirstCommand() {
|
||||||
name = "Play First";
|
name = "Play First";
|
||||||
description = "Places specified song at the front of the queue.";
|
description = "Places specified song at the front of the queue.";
|
||||||
usage = Main.getMainBiscuit().getProperties().getCommandSignifier() + "playfirst <YouTube link OR Search Phrase>";
|
usage = Main.getMainBiscuit().getProperties().getCommandSignifier() + "playfirst <Link OR Search Phrase>";
|
||||||
minArgs = 1;
|
minArgs = 1;
|
||||||
maxArgs = 2000;
|
maxArgs = 2000;
|
||||||
identifiers.add("playfirst");
|
identifiers.add("playfirst");
|
||||||
|
@ -31,7 +35,15 @@ public class PlayFirstCommand extends MusicClientCommand{
|
||||||
Biscuit b = Biscuit.getBiscuit(guild);
|
Biscuit b = Biscuit.getBiscuit(guild);
|
||||||
TextChannel tchannel = event.getChannel();
|
TextChannel tchannel = event.getChannel();
|
||||||
|
|
||||||
String searchPhrase = PlayCommandUtil.getSearchPhrase(args);
|
int searchArg = 0;
|
||||||
|
boolean scSearch = false;
|
||||||
|
|
||||||
|
if(args[0].equalsIgnoreCase("-sc")) {
|
||||||
|
scSearch = true;
|
||||||
|
searchArg = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
String searchPhrase = PlayCommandUtil.getSearchPhrase(args, searchArg);
|
||||||
|
|
||||||
b.log(event.getAuthor().getName() + " issued a command: -playfirst " + searchPhrase);
|
b.log(event.getAuthor().getName() + " issued a command: -playfirst " + searchPhrase);
|
||||||
|
|
||||||
|
@ -44,9 +56,19 @@ public class PlayFirstCommand extends MusicClientCommand{
|
||||||
if(!connected) {
|
if(!connected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
YTRequest request = new YTPriorityRequest(event.getMessage(), searchPhrase, 1);
|
PlayRequest request;
|
||||||
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), new YTResultHandler(request));
|
ResultHandler handler;
|
||||||
|
|
||||||
|
if(scSearch) {
|
||||||
|
request = PlayRequest.createPlayRequest(RequestType.SOUNDCLOUD_PRIORITY, event.getMessage(), searchPhrase, 1);
|
||||||
|
handler = new SCResultHandler((SCRequest)request);
|
||||||
|
}else {
|
||||||
|
request = PlayRequest.createPlayRequest(event.getMessage(), searchPhrase, 1);
|
||||||
|
handler = new YTResultHandler((YTRequest)request);
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.audio.queue.AudioQueue;
|
import com.fpghoti.biscuit.audio.queue.AudioQueue;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.fpghoti.biscuit.commands.client.music;
|
package com.fpghoti.biscuit.commands.discord.music;
|
||||||
|
|
||||||
import com.fpghoti.biscuit.Main;
|
import com.fpghoti.biscuit.Main;
|
||||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
|
@ -0,0 +1,66 @@
|
||||||
|
package com.fpghoti.biscuit.plugin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.pf4j.Plugin;
|
||||||
|
import org.pf4j.PluginWrapper;
|
||||||
|
|
||||||
|
import com.fpghoti.biscuit.Main;
|
||||||
|
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||||
|
import com.fpghoti.biscuit.logging.BiscuitLog;
|
||||||
|
import com.github.cage.Cage;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||||
|
|
||||||
|
public abstract class BiscuitPlugin extends Plugin {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String version;
|
||||||
|
private String author;
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public BiscuitPlugin(PluginWrapper wrapper) {
|
||||||
|
super(wrapper);
|
||||||
|
this.id = wrapper.getPluginId();
|
||||||
|
this.version = wrapper.getDescriptor().getVersion();
|
||||||
|
this.author = wrapper.getDescriptor().getProvider();
|
||||||
|
this.description = wrapper.getDescriptor().getPluginDescription();
|
||||||
|
Main.getPluginController().registerPlugin(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getID() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiscuitPlugin getPlugin() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Biscuit> getBiscuits() {
|
||||||
|
return Main.getBiscuits();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cage getCage() {
|
||||||
|
return Main.getCage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AudioPlayerManager getPlayerManager() {
|
||||||
|
return Main.getPlayerManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiscuitLog getLogger() {
|
||||||
|
return Main.getLogger();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.fpghoti.biscuit.plugin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.pf4j.DefaultPluginManager;
|
||||||
|
import org.pf4j.PluginManager;
|
||||||
|
|
||||||
|
public class PluginController implements Iterable<BiscuitPlugin>{
|
||||||
|
|
||||||
|
private PluginManager pluginManager;
|
||||||
|
private ArrayList<BiscuitPlugin> plugins;
|
||||||
|
|
||||||
|
public PluginController() {
|
||||||
|
pluginManager = new DefaultPluginManager();
|
||||||
|
plugins = new ArrayList<BiscuitPlugin>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<BiscuitPlugin> iterator() {
|
||||||
|
return new ArrayList<BiscuitPlugin>(plugins).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerPlugin(BiscuitPlugin plugin) {
|
||||||
|
if(!contains(plugin)) {
|
||||||
|
plugins.add(plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadPlugins() {
|
||||||
|
pluginManager.loadPlugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startPlugins() {
|
||||||
|
pluginManager.startPlugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopPlugins() {
|
||||||
|
pluginManager.stopPlugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unloadPlugins() {
|
||||||
|
pluginManager.unloadPlugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdownPlugins() {
|
||||||
|
stopPlugins();
|
||||||
|
unloadPlugins();
|
||||||
|
plugins.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(BiscuitPlugin plugin) {
|
||||||
|
for(BiscuitPlugin pl : plugins) {
|
||||||
|
if(plugin.getID().equals(pl.getID())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue