Change command loading method

This commit is contained in:
BrokenFire 2018-01-12 12:50:12 +01:00
parent ecc133fbda
commit 4898a51ee5
34 changed files with 367 additions and 194 deletions

View File

@ -34,6 +34,15 @@ dependencies {
compile("com.sedmelluq:lavaplayer:1.2.45") compile("com.sedmelluq:lavaplayer:1.2.45")
compile 'net.dv8tion:JDA:3.3.1_303' compile 'net.dv8tion:JDA:3.3.1_303'
compile group: 'org.json', name: 'json', version: '20160810' compile group: 'org.json', name: 'json', version: '20160810'
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
compile("org.springframework.boot:spring-boot-starter-data-jpa") {
exclude group:"org.springframework.boot", module: "spring-boot-starter-logging"
}
// Use MySQL Connector-J
compile 'mysql:mysql-connector-java'
compile 'org.reflections:reflections:0.9.11'
testCompile('org.springframework.boot:spring-boot-starter-test') testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('com.jayway.jsonpath:json-path') testCompile('com.jayway.jsonpath:json-path')
compile("org.springframework.boot:spring-boot-starter-thymeleaf") { compile("org.springframework.boot:spring-boot-starter-thymeleaf") {

View File

@ -1,6 +1,6 @@
#Sun Jan 07 23:09:03 CET 2018 #Wed Jan 10 09:57:49 CET 2018
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-all.zip

View File

@ -1,7 +1,7 @@
package net.Broken; package net.Broken;
import net.Broken.Commandes.Move; import net.Broken.Commands.Move;
import net.Broken.Commandes.Music; import net.Broken.Commands.Music;
import net.Broken.Outils.AntiSpam; import net.Broken.Outils.AntiSpam;
import net.Broken.Outils.Moderateur; import net.Broken.Outils.Moderateur;
import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.ChannelType;

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.EmbedMessageUtils;

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;
@ -9,7 +9,6 @@ import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.exceptions.RateLimitedException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -84,7 +83,7 @@ public class Help implements Commande {
} }
if(!event.isFromType(ChannelType.PRIVATE)){ if(!event.isFromType(ChannelType.PRIVATE)){
Message rest = event.getTextChannel().sendMessage(new EmbedBuilder().setTitle("Commandes envoyées par message privé").setColor(Color.green).build()).complete(); Message rest = event.getTextChannel().sendMessage(new EmbedBuilder().setTitle("Command envoyées par message privé").setColor(Color.green).build()).complete();
List<Message> messages = new ArrayList<Message>(){{ List<Message> messages = new ArrayList<Message>(){{
add(rest); add(rest);
add(event.getMessage()); add(event.getMessage());
@ -92,7 +91,7 @@ public class Help implements Commande {
new MessageTimeOut(messages,MainBot.messageTimeOut).start(); new MessageTimeOut(messages,MainBot.messageTimeOut).start();
} }
PrivateMessage.send(event.getAuthor(),new EmbedBuilder().setTitle("Commandes du bot").setDescription(txt.toString()).setFooter("Utilise '//help <commande>' pour plus de détails.",null).setColor(Color.green).setThumbnail(event.getJDA().getSelfUser().getAvatarUrl()).build(),logger); PrivateMessage.send(event.getAuthor(),new EmbedBuilder().setTitle("Command du bot").setDescription(txt.toString()).setFooter("Utilise '//help <commande>' pour plus de détails.",null).setColor(Color.green).setThumbnail(event.getJDA().getSelfUser().getAvatarUrl()).build(),logger);

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;
@ -15,7 +15,6 @@ import org.apache.logging.log4j.Logger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;
@ -19,8 +19,8 @@ import java.util.List;
public class Music implements Commande { public class Music implements Commande {
public AudioM audio; public AudioM audio;
Logger logger = LogManager.getLogger(); Logger logger = LogManager.getLogger();
public Music(Guild guild) { public Music() {
audio = new AudioM(guild); audio = new AudioM(MainBot.jda.getGuilds().get(0));
} }
@Override @Override

View File

@ -1,6 +1,6 @@
package net.Broken.Commandes.Over18; package net.Broken.Commands.Over18;
import net.Broken.Commandes.NumberedCommande; import net.Broken.Outils.Command.NumberedCommande;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
/** /**

View File

@ -1,6 +1,6 @@
package net.Broken.Commandes.Over18; package net.Broken.Commands.Over18;
import net.Broken.Commandes.NumberedCommande; import net.Broken.Outils.Command.NumberedCommande;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
/** /**

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes.Over18; package net.Broken.Commands.Over18;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.Outils.Redirection; import net.Broken.Outils.Redirection;

View File

@ -1,6 +1,6 @@
package net.Broken.Commandes.Over18; package net.Broken.Commands.Over18;
import net.Broken.Commandes.NumberedCommande; import net.Broken.Outils.Command.NumberedCommande;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
/** /**

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes.Over18; package net.Broken.Commands.Over18;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.Outils.Redirection; import net.Broken.Outils.Redirection;
@ -6,8 +6,6 @@ import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.IOException;
/** /**
* Created by seb65 on 10/11/2016. * Created by seb65 on 10/11/2016.
*/ */

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;
@ -8,8 +8,6 @@ import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import java.sql.Timestamp;
import java.time.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -20,7 +18,7 @@ import java.util.List;
public class PingCommande implements Commande { public class PingCommande implements Commande {
private String HELP = "`//ping` \n :arrow_right:\t*Le bot vous répondra Pong!*"; private String HELP = "`//ping` \n :arrow_right:\t*Renvoi le ping du bot*";
@Override @Override
public boolean called(String[] args, MessageReceivedEvent event) { public boolean called(String[] args, MessageReceivedEvent event) {
return true; return true;
@ -28,11 +26,12 @@ public class PingCommande implements Commande {
@Override @Override
public void action(String[] args, MessageReceivedEvent event) { public void action(String[] args, MessageReceivedEvent event) {
long receivedTime = Timestamp.valueOf(LocalDateTime.ofInstant(event.getMessage().getCreationTime().toInstant(), ZoneId.systemDefault())).getTime(); long ping = event.getJDA().getPing();
// long receivedTime = Timestamp.valueOf(LocalDateTime.ofInstant(event.getMessage().getCreationTime().toInstant(), ZoneId.systemDefault())).getTime();
if(event.isFromType(ChannelType.PRIVATE)) if(event.isFromType(ChannelType.PRIVATE))
event.getPrivateChannel().sendMessage(":arrow_right: Pong! `"+((Timestamp.from(Instant.now()).getTime()-receivedTime))+"ms`").queue(); event.getPrivateChannel().sendMessage(":arrow_right: Pong! `" + ping+ "ms`").queue();
else { else {
Message rest = event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:arrow_right: Pong! `"+((Timestamp.from(Instant.now()).getTime()-receivedTime))+"ms`").complete(); Message rest = event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:arrow_right: Pong! `" + ping + "ms`").complete();
List<Message> messages = new ArrayList<Message>(){{ List<Message> messages = new ArrayList<Message>(){{
add(rest); add(rest);
add(event.getMessage()); add(event.getMessage());

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Commands;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.MainBot; import net.Broken.MainBot;
@ -8,7 +8,6 @@ import net.Broken.Outils.PrivateMessage;
import net.Broken.Outils.UserSpamUtils; import net.Broken.Outils.UserSpamUtils;
import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent;

View File

@ -1,7 +1,6 @@
package net.Broken; package net.Broken;
import net.Broken.Commandes.*; import net.Broken.Outils.Command.CommandLoader;
import net.Broken.Commandes.Over18.*;
import net.Broken.Outils.DayListener; import net.Broken.Outils.DayListener;
import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDA;
@ -11,7 +10,6 @@ import net.dv8tion.jda.core.entities.Game;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.exceptions.RateLimitedException; import net.dv8tion.jda.core.exceptions.RateLimitedException;
import net.dv8tion.jda.core.managers.GuildManager;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -40,6 +38,7 @@ public class Init {
logger.info("Connection au serveur..."); logger.info("Connection au serveur...");
//connection au bot //connection au bot
jda = new JDABuilder(AccountType.BOT).addEventListener(new BotListener()).setToken(token).setBulkDeleteSplittingEnabled(false).buildBlocking(); jda = new JDABuilder(AccountType.BOT).addEventListener(new BotListener()).setToken(token).setBulkDeleteSplittingEnabled(false).buildBlocking();
MainBot.jda = jda;
jda.setAutoReconnect(true); jda.setAutoReconnect(true);
jda.addEventListener(); jda.addEventListener();
@ -48,25 +47,7 @@ public class Init {
*************************************/ *************************************/
jda.getPresence().setGame(Game.of("Statut: Loading...")); jda.getPresence().setGame(Game.of("Statut: Loading..."));
jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue()); jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue());
MainBot.commandes.put("ping", new PingCommande()); CommandLoader.load();
MainBot.commandes.put("help", new Help());
MainBot.commandes.put("move", new Move());
MainBot.commandes.put("spam", new Spam());
MainBot.commandes.put("spaminfo", new SpamInfo());
MainBot.commandes.put("flush", new Flush());
MainBot.commandes.put("music", new Music(jda.getGuilds().get(0)));
if (!dev) {
MainBot.commandes.put("ass", new Ass());
jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue());
MainBot.commandes.put("boobs", new Boobs());
jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue());
MainBot.commandes.put("pipe", new Pipe());
jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue());
MainBot.commandes.put("sm", new SM());
MainBot.commandes.put("madame", new Madame());
MainBot.commandes.put("cat", new Cat());
}
//On recupere le l'id serveur //On recupere le l'id serveur

View File

@ -1,8 +1,9 @@
package net.Broken; package net.Broken;
import net.Broken.Outils.CommandParser; import net.Broken.Outils.Command.CommandParser;
import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.EmbedMessageUtils;
import net.Broken.Outils.UserSpamUtils; import net.Broken.Outils.UserSpamUtils;
import net.Broken.RestApi.ApiCommandLoader;
import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.Message;
@ -32,6 +33,9 @@ public class MainBot {
public static HashMap<User, Integer> message_compteur =new HashMap<>(); public static HashMap<User, Integer> message_compteur =new HashMap<>();
public static boolean roleFlag = false; public static boolean roleFlag = false;
public static HashMap<User, UserSpamUtils> spamUtils = new HashMap<>(); public static HashMap<User, UserSpamUtils> spamUtils = new HashMap<>();
public static JDA jda;
public static int messageTimeOut = 10; public static int messageTimeOut = 10;
@ -61,7 +65,7 @@ public class MainBot {
i++; i++;
} }
JDA jda = Init.initBot(token, dev); jda = Init.initBot(token, dev);
ConfigurableApplicationContext ctx = SpringApplication.run(MainBot.class, args); ConfigurableApplicationContext ctx = SpringApplication.run(MainBot.class, args);
if(jda == null) { if(jda == null) {
System.exit(SpringApplication.exit(ctx, (ExitCodeGenerator) () -> { System.exit(SpringApplication.exit(ctx, (ExitCodeGenerator) () -> {
@ -70,6 +74,11 @@ public class MainBot {
})); }));
} }
ApiCommandLoader.load();

View File

@ -1,7 +1,10 @@
package net.Broken.Outils; package net.Broken.Outils;
import net.Broken.MainBot; import net.Broken.MainBot;
import net.Broken.Commandes.Move; import net.Broken.Commands.Move;
import net.Broken.Outils.EmbedMessageUtils;
import net.Broken.Outils.MessageTimeOut;
import net.Broken.Outils.UserSpamUtils;
import net.dv8tion.jda.core.entities.*; import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.exceptions.HierarchyException; import net.dv8tion.jda.core.exceptions.HierarchyException;

View File

@ -0,0 +1,35 @@
package net.Broken.Outils.Command;
import net.Broken.Commande;
import net.Broken.MainBot;
import net.Broken.RestApi.CommandInterface;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.reflections.Reflections;
import java.util.Set;
public class CommandLoader {
private static Logger logger = LogManager.getLogger();
public static void load(){
logger.info("Loading Command...");
Reflections reflections = new Reflections("net.Broken.Command");
Set<Class<? extends Commande>> modules = reflections.getSubTypesOf(Commande.class);
logger.info("Find " + modules.size() + " Command:");
for (Class<? extends Commande> command : modules) {
String reference = command.getName();
String[] splited = reference.split("\\.");
String name = splited[splited.length-1].toLowerCase();
logger.info("..." + name);
try {
MainBot.commandes.put(name, command.newInstance());
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Failed to load " + name + "!");
}
}
}
}

View File

@ -1,4 +1,4 @@
package net.Broken.Outils; package net.Broken.Outils.Command;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -1,4 +1,4 @@
package net.Broken.Commandes; package net.Broken.Outils.Command;
import net.Broken.Commande; import net.Broken.Commande;
import net.Broken.Outils.FindContentOnWebPage; import net.Broken.Outils.FindContentOnWebPage;
import net.Broken.Outils.LimitChecker; import net.Broken.Outils.LimitChecker;

View File

@ -1,5 +1,5 @@
package net.Broken.Outils; package net.Broken.Outils;
import net.Broken.Commandes.Spam; import net.Broken.Commands.Spam;
import net.dv8tion.jda.core.exceptions.RateLimitedException; import net.dv8tion.jda.core.exceptions.RateLimitedException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -0,0 +1,36 @@
package net.Broken.RestApi;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.reflections.Reflections;
import java.util.HashMap;
import java.util.Set;
public class ApiCommandLoader {
public static HashMap<String, CommandInterface> apiCommands = new HashMap<>();
private static Logger logger = LogManager.getLogger();
public static void load(){
logger.info("Loading Api Command...");
Reflections reflections = new Reflections("net.Broken.RestApi.Command");
Set<Class<? extends CommandInterface>> modules =
reflections.getSubTypesOf(CommandInterface.class);
logger.info("Find " + modules.size() + " Command:");
for (Class<? extends CommandInterface> apiClass : modules) {
String reference = apiClass.getName();
String[] splited = reference.split("\\.");
String name = splited[splited.length-1].toUpperCase();
logger.info("..." + name);
try {
apiCommands.put(name, apiClass.newInstance());
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Failed to load " + name + "!");
}
}
}
}

View File

@ -0,0 +1,10 @@
package net.Broken.RestApi;
import net.Broken.Commands.Music;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import org.springframework.http.ResponseEntity;
public interface CommandInterface {
ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data);
}

View File

@ -0,0 +1,15 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.audio.WebLoadUtils;
import org.springframework.http.ResponseEntity;
public class Add implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
return new WebLoadUtils(musicCommande ,data).getResponse();
}
}

View File

@ -0,0 +1,22 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class Flush implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
try {
musicCommande.getAudioManager().getMusicManager().scheduler.flush();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
}
}

View File

@ -0,0 +1,22 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class Next implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
try {
musicCommande.getAudioManager().getMusicManager().scheduler.nextTrack();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
}
}

View File

@ -0,0 +1,22 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class Pause implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
try {
musicCommande.getAudioManager().getMusicManager().scheduler.pause();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
}
}

View File

@ -0,0 +1,22 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class Play implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
try {
musicCommande.getAudioManager().getMusicManager().scheduler.resume();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
}
}

View File

@ -0,0 +1,18 @@
package net.Broken.RestApi.Commands;
import net.Broken.Commands.Music;
import net.Broken.RestApi.CommandInterface;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class Stop implements CommandInterface {
@Override
public ResponseEntity<CommandResponseData> action(Music musicCommande, CommandPostData data) {
musicCommande.getAudioManager().stop((MessageReceivedEvent) null);
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
}
}

View File

@ -0,0 +1,105 @@
package net.Broken.RestApi;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
import net.Broken.Commands.Music;
import net.Broken.DB.SavedPlaylistRepository;
import net.Broken.MainBot;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.RestApi.Data.CurrentMusicData;
import net.Broken.RestApi.Data.PlaylistData;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/music/")
public class MusicWebAPIController {
Logger logger = LogManager.getLogger();
@Autowired
public SavedPlaylistRepository savedPlaylist;
@RequestMapping("/currentMusicInfo")
public CurrentMusicData getCurrentM(){
Music musicCommande = (Music) MainBot.commandes.get("music");
if(musicCommande.audio.getGuild().getAudioManager().isConnected()){
try {
AudioPlayer player = musicCommande.audio.getMusicManager().player;
AudioTrack currentTrack = player.getPlayingTrack();
if(currentTrack == null)
{
return new CurrentMusicData(null,0, "STOP",false);
}
return new CurrentMusicData(currentTrack.getInfo(),currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused());
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new CurrentMusicData(null,0, "STOP",false);
}
}else
{
return new CurrentMusicData(null,0, "DISCONNECTED",false);
}
}
@RequestMapping("/getPlaylist")
public PlaylistData getPlaylist(){
Music musicCommande = (Music) MainBot.commandes.get("music");
List<AudioTrackInfo> list = null;
try {
list = musicCommande.getAudioManager().getMusicManager().scheduler.getList();
return new PlaylistData(list);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new PlaylistData(list);
}
}
@RequestMapping(value = "/command", method = RequestMethod.POST)
public ResponseEntity<CommandResponseData> command(@RequestBody CommandPostData data){
if(data.command != null) {
logger.info("receive command: " + data.command);
Music musicCommande = (Music) MainBot.commandes.get("music");
if(ApiCommandLoader.apiCommands.containsKey(data.command))
return ApiCommandLoader.apiCommands.get(data.command).action(musicCommande,data);
else
return new ResponseEntity<>(new CommandResponseData(data.command,"Unknown Command"), HttpStatus.BAD_REQUEST);
}
else
logger.info("Null");
return new ResponseEntity<>(new CommandResponseData(null, null), HttpStatus.NO_CONTENT);
}
// DB Test Ignore it
// @RequestMapping(value = "/test", method = RequestMethod.GET)
// public ResponseEntity<String> test(){
// SavedPlaylistEntity savedPlaylistEntity = new SavedPlaylistEntity();
// savedPlaylistEntity.setAutorName("Test");
// savedPlaylistEntity.setName("Playlist de test");
// savedPlaylist.save(savedPlaylistEntity);
// logger.info(savedPlaylistEntity);
// return new ResponseEntity<String>("OK",HttpStatus.OK);
// }
// @GetMapping(path="/all")
// public @ResponseBody Iterable<SavedPlaylistEntity> getAllUsers() {
// // This returns a JSON or XML with the users
// return savedPlaylist.findAll();
// }
}

View File

@ -1,128 +0,0 @@
package net.Broken.RestApi;
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
import net.Broken.Commandes.Music;
import net.Broken.MainBot;
import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData;
import net.Broken.RestApi.Data.CurrentMusicData;
import net.Broken.RestApi.Data.PlaylistData;
import net.Broken.audio.AudioM;
import net.Broken.audio.NotConectedException;
import net.Broken.audio.NullMusicManager;
import net.Broken.audio.WebLoadUtils;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/music/")
public class MusicWebController {
Logger logger = LogManager.getLogger();
@RequestMapping("/currentMusicInfo")
public CurrentMusicData test(){
Music musicCommande = (Music) MainBot.commandes.get("music");
if(musicCommande.audio.getGuild().getAudioManager().isConnected()){
try {
AudioPlayer player = musicCommande.audio.getMusicManager().player;
AudioTrack currentTrack = player.getPlayingTrack();
if(currentTrack == null)
{
return new CurrentMusicData(null,0, "STOP",false);
}
return new CurrentMusicData(currentTrack.getInfo(),currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused());
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new CurrentMusicData(null,0, "STOP",false);
}
}else
{
return new CurrentMusicData(null,0, "DISCONNECTED",false);
}
}
@RequestMapping("/getPlaylist")
public PlaylistData getPlaylist(){
Music musicCommande = (Music) MainBot.commandes.get("music");
List<AudioTrackInfo> list = null;
try {
list = musicCommande.getAudioManager().getMusicManager().scheduler.getList();
return new PlaylistData(list);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new PlaylistData(list);
}
}
@RequestMapping(value = "/command", method = RequestMethod.POST)
public ResponseEntity<CommandResponseData> command(@RequestBody CommandPostData data){
if(data.command != null) {
logger.info("receive command: " + data.command);
Music musicCommande = (Music) MainBot.commandes.get("music");
switch (data.command) {
case "PLAY":
try {
musicCommande.getAudioManager().getMusicManager().scheduler.resume();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
case "PAUSE":
try {
musicCommande.getAudioManager().getMusicManager().scheduler.pause();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
case "NEXT":
try {
musicCommande.getAudioManager().getMusicManager().scheduler.nextTrack();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
case "STOP":
musicCommande.getAudioManager().stop((MessageReceivedEvent) null);
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
case "ADD":
return new WebLoadUtils(musicCommande ,data).getResponse();
case "FLUSH":
try {
musicCommande.getAudioManager().getMusicManager().scheduler.flush();
return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK);
} catch (NullMusicManager | NotConectedException nullMusicManager) {
return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE);
}
}
}
else
logger.info("Null");
return new ResponseEntity<>(new CommandResponseData(null, null), HttpStatus.NO_CONTENT);
}
}

View File

@ -5,7 +5,7 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
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;
import net.Broken.Commandes.Music; import net.Broken.Commands.Music;
import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandPostData;
import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.RestApi.Data.CommandResponseData;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@ -13,8 +13,6 @@ import org.apache.logging.log4j.Logger;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import java.util.TreeMap;
public class WebLoadUtils { public class WebLoadUtils {
ResponseEntity<CommandResponseData> response; ResponseEntity<CommandResponseData> response;
Logger logger = LogManager.getLogger(); Logger logger = LogManager.getLogger();