Add Plugin system and Soundcloud searching
This commit is contained in:
parent
3b65e91d10
commit
791f2b3d60
|
@ -3,7 +3,7 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.fpghoti</groupId>
|
||||
<artifactId>Biscuit</artifactId>
|
||||
<version>1.7</version>
|
||||
<version>1.8</version>
|
||||
<build>
|
||||
<sourceDirectory>src/main/java</sourceDirectory>
|
||||
<resources>
|
||||
|
|
7
pom.xml
7
pom.xml
|
@ -5,7 +5,7 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.fpghoti</groupId>
|
||||
<artifactId>Biscuit</artifactId>
|
||||
<version>1.7</version>
|
||||
<version>1.8</version>
|
||||
<build>
|
||||
<sourceDirectory>src/main/java</sourceDirectory>
|
||||
<resources>
|
||||
|
@ -194,5 +194,10 @@
|
|||
<artifactId>lavaplayer</artifactId>
|
||||
<version>1.3.50</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.pf4j</groupId>
|
||||
<artifactId>pf4j</artifactId>
|
||||
<version>3.4.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,5 +1,6 @@
|
|||
package com.fpghoti.biscuit;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Properties;
|
||||
|
@ -10,47 +11,47 @@ import org.fusesource.jansi.AnsiConsole;
|
|||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||
import com.fpghoti.biscuit.captcha.BCage;
|
||||
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.SayCommand;
|
||||
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.DMListener;
|
||||
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.logging.BColor;
|
||||
import com.fpghoti.biscuit.logging.BiscuitLog;
|
||||
import com.fpghoti.biscuit.plugin.PluginController;
|
||||
import com.github.cage.Cage;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||
|
@ -95,10 +97,19 @@ public class Main {
|
|||
public static boolean isPlugin = false;
|
||||
public static boolean shutdownStarted = false;
|
||||
private static Cage cage;
|
||||
private static File pluginsDir;
|
||||
private static PluginController pluginController;
|
||||
|
||||
private static AudioPlayerManager playerManager;
|
||||
|
||||
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();
|
||||
try {
|
||||
properties.load(Main.class.getClassLoader().getResourceAsStream("info.properties"));
|
||||
|
@ -186,6 +197,12 @@ public class Main {
|
|||
CommandManager.addCommand(new GuildSayCommand());
|
||||
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";
|
||||
log.info("Connection successful!");
|
||||
log.info("Startup successful!");
|
||||
|
@ -243,11 +260,16 @@ public class Main {
|
|||
public static AudioPlayerManager getPlayerManager() {
|
||||
return playerManager;
|
||||
}
|
||||
|
||||
public static File getPluginDirectory() {
|
||||
return pluginsDir;
|
||||
}
|
||||
|
||||
public static void shutdown() {
|
||||
if(!shutdownStarted) {
|
||||
shutdownStarted = true;
|
||||
mainBiscuit.log("Shutting down...");
|
||||
pluginController.shutdownPlugins();
|
||||
ArrayList<Biscuit> list = new ArrayList<Biscuit>(biscuits);
|
||||
for(Biscuit b : list) {
|
||||
b.remove();
|
||||
|
@ -274,6 +296,10 @@ public class Main {
|
|||
public static BiscuitLog getLogger() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public static PluginController getPluginController() {
|
||||
return pluginController;
|
||||
}
|
||||
|
||||
public static void registerBiscuit(Biscuit b) {
|
||||
biscuits.add(b);
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
|||
import com.fpghoti.biscuit.Main;
|
||||
import com.fpghoti.biscuit.audio.queue.AudioQueue;
|
||||
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.YTRequest;
|
||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||
|
@ -50,7 +51,6 @@ public class AudioScheduler extends AudioEventAdapter {
|
|||
|
||||
@Override
|
||||
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
|
||||
|
||||
QueuedTrack qt = queue.getLastTrack();
|
||||
String title = track.getInfo().title;
|
||||
|
||||
|
@ -58,7 +58,7 @@ public class AudioScheduler extends AudioEventAdapter {
|
|||
|
||||
case LOAD_FAILED:
|
||||
warn("Something went wrong while trying to load the current track. Trying alternate track.");
|
||||
if(!qt.triedAlternative()) {
|
||||
if(!qt.triedAlternative() && !queue.isStuckLooping()) {
|
||||
qt.useAttempt();
|
||||
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.");
|
||||
|
@ -89,7 +89,7 @@ public class AudioScheduler extends AudioEventAdapter {
|
|||
|
||||
if (endReason.mayStartNext) {
|
||||
if(loop) {
|
||||
queue(track.makeClone(), qt.getUserId(), qt.getCommandChannel(), 1);
|
||||
queue(qt.getType(), track.makeClone(), qt.getUserId(), qt.getCommandChannel(), 1);
|
||||
}
|
||||
startPlaying();
|
||||
}
|
||||
|
@ -113,21 +113,21 @@ public class AudioScheduler extends AudioEventAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
public void queue(AudioTrack track, String uid, TextChannel channel) {
|
||||
queue(track, uid, channel, null);
|
||||
public void queue(RequestType type, AudioTrack track, String uid, TextChannel channel) {
|
||||
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) {
|
||||
QueuedTrack qt = new QueuedTrack(biscuit, track, uid, channel);
|
||||
QueuedTrack qt = new QueuedTrack(biscuit, track, uid, channel, type);
|
||||
queue.sendQueueMessage(qt);
|
||||
queue.addPreviousTrack(qt);
|
||||
biscuit.getAudioPlayer().playTrack(track);
|
||||
}else {
|
||||
if(place != null) {
|
||||
queue.addAtPlace(new QueuedTrack(biscuit, track, uid, channel), place);
|
||||
queue.addAtPlace(new QueuedTrack(biscuit, track, uid, channel, type), place);
|
||||
}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) {
|
||||
String searchPhrase = args[0];
|
||||
if(args.length > 1) {
|
||||
for(int i = 1; i < args.length; i++) {
|
||||
return getSearchPhrase(args, 0);
|
||||
}
|
||||
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.fpghoti.biscuit.audio.queue;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.fpghoti.biscuit.audio.request.RequestType;
|
||||
import com.fpghoti.biscuit.rest.MessageText;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
|
||||
|
@ -77,6 +78,17 @@ public class AudioQueue {
|
|||
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() {
|
||||
if(previousTracks.isEmpty()) {
|
||||
return null;
|
||||
|
@ -182,5 +194,22 @@ public class AudioQueue {
|
|||
public int 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 com.fpghoti.biscuit.audio.request.RequestType;
|
||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||
import com.fpghoti.biscuit.util.Util;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
|
@ -17,13 +18,15 @@ public class QueuedTrack {
|
|||
private AudioTrack track;
|
||||
private String userId;
|
||||
private TextChannel channel;
|
||||
private RequestType type;
|
||||
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.track = track;
|
||||
this.userId = userId;
|
||||
this.channel = channel;
|
||||
this.type = type;
|
||||
this.triedAlternative = false;
|
||||
}
|
||||
|
||||
|
@ -70,7 +73,7 @@ public class QueuedTrack {
|
|||
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) {
|
||||
desc = desc + "\nTime Remaining: " + Util.getTime(track.getDuration() - track.getPosition());
|
||||
|
@ -89,7 +92,7 @@ public class QueuedTrack {
|
|||
|
||||
embed.setAuthor(name, null, avatar);
|
||||
|
||||
if(isYouTube()) {
|
||||
if(type.toString().toLowerCase().contains("youtube")) {
|
||||
embed.setThumbnail("https://img.youtube.com/vi/" + track.getIdentifier() + "/mqdefault.jpg");
|
||||
}
|
||||
|
||||
|
@ -107,8 +110,8 @@ public class QueuedTrack {
|
|||
triedAlternative = true;
|
||||
}
|
||||
|
||||
public boolean isYouTube() {
|
||||
return track.getInfo().uri.contains("https://www.youtube.com/watch?v=");
|
||||
public RequestType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
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 net.dv8tion.jda.api.entities.Message;
|
||||
|
@ -7,6 +12,46 @@ import net.dv8tion.jda.api.entities.TextChannel;
|
|||
|
||||
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 Biscuit biscuit;
|
||||
private String authorId;
|
||||
|
|
|
@ -2,8 +2,35 @@ package com.fpghoti.biscuit.audio.request;
|
|||
|
||||
public enum RequestType {
|
||||
|
||||
YOUTUBE,
|
||||
YOUTUBE_IMMEDIATE,
|
||||
YOUTUBE_PRIORITY;
|
||||
YOUTUBE{
|
||||
@Override
|
||||
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.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 class YTResultHandler implements AudioLoadResultHandler {
|
||||
public class YTResultHandler extends ResultHandler {
|
||||
|
||||
private Biscuit biscuit;
|
||||
private YTRequest request;
|
||||
|
@ -32,16 +31,16 @@ public class YTResultHandler implements AudioLoadResultHandler {
|
|||
switch(request.getType()) {
|
||||
|
||||
case YOUTUBE:
|
||||
sched.queue(track, request.getAuthorId(), request.getRequestChannel());
|
||||
sched.queue(request.getType(), track, request.getAuthorId(), request.getRequestChannel());
|
||||
break;
|
||||
|
||||
case YOUTUBE_PRIORITY:
|
||||
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;
|
||||
|
||||
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()) {
|
||||
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.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.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.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.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.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.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.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.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.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.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.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.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
|||
package com.fpghoti.biscuit.commands.client;
|
||||
package com.fpghoti.biscuit.commands.discord;
|
||||
|
||||
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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.result.ResultHandler;
|
||||
import com.fpghoti.biscuit.audio.result.SCResultHandler;
|
||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
||||
|
@ -15,7 +20,7 @@ public class PlayCommand extends MusicClientCommand{
|
|||
public PlayCommand() {
|
||||
name = "Play";
|
||||
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;
|
||||
maxArgs = 2000;
|
||||
identifiers.add("play");
|
||||
|
@ -25,8 +30,16 @@ public class PlayCommand extends MusicClientCommand{
|
|||
public void execute(String[] args, GuildMessageReceivedEvent event) {
|
||||
Guild guild = event.getGuild();
|
||||
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);
|
||||
|
||||
|
@ -34,9 +47,19 @@ public class PlayCommand extends MusicClientCommand{
|
|||
if(!connected) {
|
||||
return;
|
||||
}
|
||||
|
||||
YTRequest request = new YTRequest(event.getMessage(), searchPhrase);
|
||||
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), new YTResultHandler(request));
|
||||
|
||||
PlayRequest 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.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.result.ResultHandler;
|
||||
import com.fpghoti.biscuit.audio.result.SCResultHandler;
|
||||
import com.fpghoti.biscuit.audio.result.YTResultHandler;
|
||||
import com.fpghoti.biscuit.biscuit.Biscuit;
|
||||
import com.fpghoti.biscuit.commands.base.MusicClientCommand;
|
||||
|
@ -19,7 +23,7 @@ public class PlayFirstCommand extends MusicClientCommand{
|
|||
public PlayFirstCommand() {
|
||||
name = "Play First";
|
||||
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;
|
||||
maxArgs = 2000;
|
||||
identifiers.add("playfirst");
|
||||
|
@ -31,7 +35,15 @@ public class PlayFirstCommand extends MusicClientCommand{
|
|||
Biscuit b = Biscuit.getBiscuit(guild);
|
||||
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);
|
||||
|
||||
|
@ -44,9 +56,19 @@ public class PlayFirstCommand extends MusicClientCommand{
|
|||
if(!connected) {
|
||||
return;
|
||||
}
|
||||
|
||||
YTRequest request = new YTPriorityRequest(event.getMessage(), searchPhrase, 1);
|
||||
Main.getPlayerManager().loadItemOrdered(guild, PlayCommandUtil.getID(event), new YTResultHandler(request));
|
||||
|
||||
PlayRequest 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.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.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.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.biscuit.Biscuit;
|
|
@ -1,4 +1,4 @@
|
|||
package com.fpghoti.biscuit.commands.client.music;
|
||||
package com.fpghoti.biscuit.commands.discord.music;
|
||||
|
||||
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.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.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.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