diff --git a/src/main/java/net/Broken/BotListener.java b/src/main/java/net/Broken/BotListener.java index b0187e8..26de790 100644 --- a/src/main/java/net/Broken/BotListener.java +++ b/src/main/java/net/Broken/BotListener.java @@ -3,6 +3,7 @@ package net.Broken; import net.Broken.Commands.Move; import net.Broken.Commands.Music; import net.Broken.Tools.AntiSpam; +import net.Broken.Tools.Command.CommandParser; import net.Broken.Tools.Moderateur; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Guild; @@ -87,7 +88,7 @@ public class BotListener extends ListenerAdapter { if (event.getMessage().getContent().startsWith("//") && !event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) { //On a detecter que c'etait une commande //System.out.println(event.getMessage().getContent()); - MainBot.handleCommand(MainBot.parser.parse(event.getMessage().getContent(), event)); + MainBot.handleCommand(new CommandParser().parse(event.getMessage().getContent(), event)); } else if (!event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) diff --git a/src/main/java/net/Broken/Commands/DayTrigger.java b/src/main/java/net/Broken/Commands/DayTrigger.java new file mode 100644 index 0000000..b2cdd3b --- /dev/null +++ b/src/main/java/net/Broken/Commands/DayTrigger.java @@ -0,0 +1,67 @@ +package net.Broken.Commands; + +import net.Broken.Commande; +import net.Broken.MainBot; +import net.Broken.Tools.DayListener.DayListener; +import net.Broken.Tools.EmbedMessageUtils; +import net.Broken.Tools.MessageTimeOut; +import net.Broken.Tools.PrivateMessage; +import net.dv8tion.jda.core.Permission; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Message; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.ArrayList; +import java.util.List; + +public class DayTrigger implements Commande{ + Logger logger = LogManager.getLogger(); + + @Override + public boolean called(String[] args, MessageReceivedEvent event) { + return false; + } + + @Override + public void action(String[] args, MessageReceivedEvent event) { + if(event.getMember().hasPermission(Permission.ADMINISTRATOR)){ + DayListener.getInstance().trigger(); + event.getMessage().delete().queue(); + } + else{ + logger.warn("Not admin! DENY!"); + if(!event.isFromType(ChannelType.PRIVATE)){ + Message message = event.getTextChannel().sendMessage(EmbedMessageUtils.getError("Vous n'avez pas l'autorisation de faire ça!")).complete(); + List messages = new ArrayList(){{ + add(message); + add(event.getMessage()); + }}; + new MessageTimeOut(messages, MainBot.messageTimeOut).start(); + } + else{ + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getError("Vous n'avez pas l'autorisation de faire ça!"),logger); + } + + + + } + + } + + @Override + public String help(String[] args) { + return null; + } + + @Override + public void executed(boolean success, MessageReceivedEvent event) { + + } + + @Override + public boolean isPrivateUsable() { + return true; + } +} diff --git a/src/main/java/net/Broken/Commands/Over18/Madame.java b/src/main/java/net/Broken/Commands/Over18/Madame.java index 90cd87c..4fd08a2 100644 --- a/src/main/java/net/Broken/Commands/Over18/Madame.java +++ b/src/main/java/net/Broken/Commands/Over18/Madame.java @@ -22,12 +22,13 @@ public class Madame implements Commande{ @Override public void action(String[] args, MessageReceivedEvent event) { - if(event.getTextChannel().getName().equals("nsfw-over18")) { + + if(event.getTextChannel().isNSFW()) { Redirection redirect = new Redirection(); boolean success=false; boolean error=false; int errorCp=0; - while(!success&&!error) + while(!success && !error) { try { event.getTextChannel().sendMessage(redirect.get("http://dites.bonjourmadame.fr/random")).queue(); diff --git a/src/main/java/net/Broken/Init.java b/src/main/java/net/Broken/Init.java index 6e1f14f..0905412 100644 --- a/src/main/java/net/Broken/Init.java +++ b/src/main/java/net/Broken/Init.java @@ -1,7 +1,9 @@ package net.Broken; import net.Broken.Tools.Command.CommandLoader; -import net.Broken.Tools.DayListener; +import net.Broken.Tools.DayListener.DayListener; +import net.Broken.Tools.DayListener.Listeners.DailyMadame; +import net.Broken.Tools.DayListener.Listeners.ResetSpam; import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDABuilder; @@ -79,8 +81,12 @@ public class Init { MainBot.ModoTimer modotimer = new MainBot.ModoTimer(); modotimer.start(); - DayListener dayListener = new DayListener(); + + DayListener dayListener = DayListener.getInstance(); + dayListener.addListener(new ResetSpam()); + dayListener.addListener(new DailyMadame()); dayListener.start(); + logger.debug("-----------------FIN INITIALISATION-----------------"); jda.getPresence().setGame(Game.of("Statut: Ok!")); diff --git a/src/main/java/net/Broken/MainBot.java b/src/main/java/net/Broken/MainBot.java index 41b8891..c39e068 100644 --- a/src/main/java/net/Broken/MainBot.java +++ b/src/main/java/net/Broken/MainBot.java @@ -1,10 +1,10 @@ package net.Broken; +import net.Broken.RestApi.ApiCommandLoader; import net.Broken.Tools.Command.CommandParser; import net.Broken.Tools.EmbedMessageUtils; import net.Broken.Tools.UserManager.UserRegister; import net.Broken.Tools.UserSpamUtils; -import net.Broken.RestApi.ApiCommandLoader; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Message; @@ -18,7 +18,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Controller; -import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; @@ -29,13 +28,11 @@ import java.util.HashMap; @Controller public class MainBot { - public static final CommandParser parser =new CommandParser(); public static HashMap commandes = new HashMap<>(); public static HashMap> historique =new HashMap<>(); public static HashMap message_compteur =new HashMap<>(); public static boolean roleFlag = false; public static HashMap spamUtils = new HashMap<>(); - public static UserRegister userRegister = new UserRegister(); public static JDA jda; diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index a0a6e5a..987b7fd 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -12,6 +12,7 @@ import net.Broken.RestApi.Data.UserManager.CheckResposeData; import net.Broken.RestApi.Data.UserManager.UserInfoData; import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; import net.Broken.Tools.UserManager.Exceptions.UserNotFoundException; +import net.Broken.Tools.UserManager.UserRegister; import net.Broken.audio.NotConectedException; import net.Broken.audio.NullMusicManager; import net.dv8tion.jda.core.entities.VoiceChannel; @@ -41,6 +42,8 @@ public class MusicWebAPIController { @Autowired UserRepository userRepository; + UserRegister userRegister = UserRegister.getInstance(); + @RequestMapping("/currentMusicInfo") public CurrentMusicData getCurrentM(){ @@ -82,7 +85,7 @@ public class MusicWebAPIController { if(data.command != null) { if(data.token != null) { try { - UserEntity user = MainBot.userRegister.getUserWithApiToken(userRepository, data.token); + UserEntity user = userRegister.getUserWithApiToken(userRepository, data.token); logger.info("receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName()); Music musicCommande = (Music) MainBot.commandes.get("music"); diff --git a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java index 2cb9abb..846dd72 100644 --- a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java +++ b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java @@ -13,6 +13,7 @@ import net.Broken.Tools.UserManager.Exceptions.PasswordNotMatchException; import net.Broken.Tools.UserManager.Exceptions.TokenNotMatch; import net.Broken.Tools.UserManager.Exceptions.UserAlreadyRegistered; import net.Broken.Tools.UserManager.Exceptions.UserNotFoundException; +import net.Broken.Tools.UserManager.UserRegister; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -37,12 +38,14 @@ public class UserManagerAPIController { @Autowired private PasswordEncoder passwordEncoder; + UserRegister userRegister = UserRegister.getInstance(); + @RequestMapping(value = "/preRegister", method = RequestMethod.POST) public ResponseEntity command(@RequestBody UserInfoData data){ if(data != null && data.name != null) { try { - String id = MainBot.userRegister.sendCheckToken(pendingUserRepository, userRepository, passwordEncoder, data); + String id = userRegister.sendCheckToken(pendingUserRepository, userRepository, passwordEncoder, data); return new ResponseEntity<>(new CheckResposeData(true, data.name, "Message sent", id), HttpStatus.OK); } catch (UserNotFoundException e) { logger.warn("User \"" + data.name + "\" not found!"); @@ -63,8 +66,8 @@ public class UserManagerAPIController { public ResponseEntity confirAccount(@RequestBody ConfirmData data){ //TODO move pending user to accepted and return right things try { - PendingUserEntity pUser = MainBot.userRegister.confirmCheckToken(pendingUserRepository, Integer.parseInt(data.id), data.checkToken); - UserEntity user = new UserEntity(pUser, MainBot.userRegister.generateApiToken()); + PendingUserEntity pUser = userRegister.confirmCheckToken(pendingUserRepository, Integer.parseInt(data.id), data.checkToken); + UserEntity user = new UserEntity(pUser, userRegister.generateApiToken()); userRepository.save(user); pendingUserRepository.delete(pUser); @@ -81,7 +84,7 @@ public class UserManagerAPIController { @RequestMapping(value = "/requestToken", method = RequestMethod.POST) public ResponseEntity requestToken(@RequestBody UserInfoData data){ try { - UserEntity user = MainBot.userRegister.getUser(userRepository, passwordEncoder, data); + UserEntity user = userRegister.getUser(userRepository, passwordEncoder, data); return new ResponseEntity<>(new UserConnectionData(true, user.getName(), user.getApiToken(), ""), HttpStatus.OK); } catch (UserNotFoundException e) { diff --git a/src/main/java/net/Broken/Tools/DayListener.java b/src/main/java/net/Broken/Tools/DayListener.java deleted file mode 100644 index b4c77b2..0000000 --- a/src/main/java/net/Broken/Tools/DayListener.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.Broken.Tools; -import net.Broken.Commands.Spam; -import net.dv8tion.jda.core.exceptions.RateLimitedException; -import org.apache.logging.log4j.LogManager; - -import java.util.GregorianCalendar; - -/** - * Created by seb65 on 09/11/2016. - */ -public class DayListener extends Thread { - GregorianCalendar calendrier; - int datePrecedente; - - public DayListener() { - calendrier = new GregorianCalendar(); - datePrecedente=0; - } - - @Override - public void run() { - while(true) - { - if(calendrier.get(GregorianCalendar.DAY_OF_MONTH)!=datePrecedente) - { - Spam spam=new Spam(); - String str[]={"all"}; - datePrecedente=calendrier.get(GregorianCalendar.DAY_OF_MONTH); - try { - spam.reset(null,str); - } catch (RateLimitedException e) { - e.printStackTrace(); - } - } - try { - sleep(7200000); - } catch (InterruptedException e) { - LogManager.getLogger().catching(e); - } - } - } -} diff --git a/src/main/java/net/Broken/Tools/DayListener/DayListener.java b/src/main/java/net/Broken/Tools/DayListener/DayListener.java new file mode 100644 index 0000000..cee9c9a --- /dev/null +++ b/src/main/java/net/Broken/Tools/DayListener/DayListener.java @@ -0,0 +1,57 @@ +package net.Broken.Tools.DayListener; +import net.Broken.Commands.Spam; +import net.dv8tion.jda.core.exceptions.RateLimitedException; +import org.apache.logging.log4j.LogManager; + +import java.util.ArrayList; +import java.util.GregorianCalendar; + +/** + * Created by seb65 on 09/11/2016. + */ +public class DayListener extends Thread { + private GregorianCalendar calendar; + private int previousDay; + private ArrayList listeners = new ArrayList<>(); + + private DayListener() { + calendar = new GregorianCalendar(); + previousDay = calendar.get(GregorianCalendar.DAY_OF_MONTH); + } + + private static DayListener INSTANCE = new DayListener(); + + public static DayListener getInstance() + { + return INSTANCE; + } + + public void addListener(NewDayListener listener){ + listeners.add(listener); + } + + public void trigger(){ + for(NewDayListener listener : listeners){ + listener.onNewDay(); + } + } + + + @Override + public void run() { + while(true) + { + if(calendar.get(GregorianCalendar.DAY_OF_MONTH) != previousDay) + { + LogManager.getLogger().info("New day triggered!"); + trigger(); + previousDay = calendar.get(GregorianCalendar.DAY_OF_MONTH); + } + try { + sleep(1800000); + } catch (InterruptedException e) { + LogManager.getLogger().catching(e); + } + } + } +} diff --git a/src/main/java/net/Broken/Tools/DayListener/Listeners/DailyMadame.java b/src/main/java/net/Broken/Tools/DayListener/Listeners/DailyMadame.java new file mode 100644 index 0000000..f824270 --- /dev/null +++ b/src/main/java/net/Broken/Tools/DayListener/Listeners/DailyMadame.java @@ -0,0 +1,39 @@ +package net.Broken.Tools.DayListener.Listeners; + +import net.Broken.MainBot; +import net.Broken.Tools.DayListener.NewDayListener; +import net.Broken.Tools.Redirection; +import net.dv8tion.jda.core.entities.TextChannel; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.IOException; + +public class DailyMadame implements NewDayListener{ + Logger logger = LogManager.getLogger(); + @Override + public void onNewDay() { + Redirection redirect = new Redirection(); + boolean success=false; + boolean error=false; + int errorCp=0; + TextChannel chanel = MainBot.jda.getTextChannelsByName("nsfw-over18", true).get(0); + while(!success && !error) + { + try { + chanel.sendMessage("Le Daily Madame mes petits cochons :kissing_heart:\n" + redirect.get("http://dites.bonjourmadame.fr/random")).queue(); + success=true; + } catch (IOException e) { + errorCp++; + logger.warn("Erreur de redirection. (Essais n°"+errorCp+")"); + if(errorCp>5) + { + logger.error("5 Erreur de redirection."); + error=true; + + } + + } + } + } +} diff --git a/src/main/java/net/Broken/Tools/DayListener/Listeners/ResetSpam.java b/src/main/java/net/Broken/Tools/DayListener/Listeners/ResetSpam.java new file mode 100644 index 0000000..60261a2 --- /dev/null +++ b/src/main/java/net/Broken/Tools/DayListener/Listeners/ResetSpam.java @@ -0,0 +1,21 @@ +package net.Broken.Tools.DayListener.Listeners; + +import net.Broken.Commands.Spam; +import net.Broken.Tools.DayListener.NewDayListener; +import net.dv8tion.jda.core.exceptions.RateLimitedException; + +import java.util.GregorianCalendar; + +public class ResetSpam implements NewDayListener { + @Override + public void onNewDay() { + Spam spam = new Spam(); + String str[] = {"all"}; + + try { + spam.reset(null,str); + } catch (RateLimitedException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/net/Broken/Tools/DayListener/NewDayListener.java b/src/main/java/net/Broken/Tools/DayListener/NewDayListener.java new file mode 100644 index 0000000..54078fd --- /dev/null +++ b/src/main/java/net/Broken/Tools/DayListener/NewDayListener.java @@ -0,0 +1,5 @@ +package net.Broken.Tools.DayListener; + +public interface NewDayListener { + void onNewDay(); +} diff --git a/src/main/java/net/Broken/Tools/UserManager/UserRegister.java b/src/main/java/net/Broken/Tools/UserManager/UserRegister.java index 715a218..d91265e 100644 --- a/src/main/java/net/Broken/Tools/UserManager/UserRegister.java +++ b/src/main/java/net/Broken/Tools/UserManager/UserRegister.java @@ -24,7 +24,17 @@ import java.util.UUID; public class UserRegister { + + private Logger logger = LogManager.getLogger(); + private static UserRegister INSTANCE = new UserRegister(); + + private UserRegister(){} + + public static UserRegister getInstance(){ + return INSTANCE; + } + public String sendCheckToken(PendingUserRepository pendingUserRepository, UserRepository userRepository, PasswordEncoder passwordEncoder, UserInfoData userInfo) throws UserNotFoundException, PasswordNotMatchException, UserAlreadyRegistered { diff --git a/src/main/java/net/Broken/webView/GeneralWebView.java b/src/main/java/net/Broken/webView/GeneralWebView.java new file mode 100644 index 0000000..c16916e --- /dev/null +++ b/src/main/java/net/Broken/webView/GeneralWebView.java @@ -0,0 +1,13 @@ +package net.Broken.webView; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class GeneralWebView { + @RequestMapping("/") + public String music(Model model){ + return "index"; + } +} diff --git a/src/main/java/net/Broken/webView/MvcApplication.java b/src/main/java/net/Broken/webView/MvcApplication.java new file mode 100644 index 0000000..fdd27e3 --- /dev/null +++ b/src/main/java/net/Broken/webView/MvcApplication.java @@ -0,0 +1,33 @@ +package net.Broken.webView; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.resource.ContentVersionStrategy; +import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter; +import org.springframework.web.servlet.resource.VersionResourceResolver; + +@Configuration +public class MvcApplication extends WebMvcConfigurerAdapter { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + VersionResourceResolver versionResourceResolver = new VersionResourceResolver() + .addVersionStrategy(new ContentVersionStrategy(), "/**"); + + registry.addResourceHandler("/js/*.js") + .addResourceLocations("classpath:/static/js/") + .setCachePeriod(60 * 60 * 24 * 365) /* one year */ + .resourceChain(true) + .addResolver(versionResourceResolver); + } + @Bean + public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { + return new ResourceUrlEncodingFilter(); + } + +} + + + diff --git a/src/main/resources/static/js/init.js b/src/main/resources/static/js/music.js similarity index 100% rename from src/main/resources/static/js/init.js rename to src/main/resources/static/js/music.js diff --git a/src/main/resources/static/index.html b/src/main/resources/templates/index.html similarity index 89% rename from src/main/resources/static/index.html rename to src/main/resources/templates/index.html index d71e1cf..c496afd 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/templates/index.html @@ -3,18 +3,19 @@ - Discord Bot + Music Control - Discord Bot + href="/favicon.png"/> - - + + + @@ -25,10 +26,10 @@ menu @@ -115,19 +118,17 @@ - - -
+
- - - - + + + + diff --git a/src/main/resources/templates/music.html b/src/main/resources/templates/music.html index cd1d19c..e27a859 100644 --- a/src/main/resources/templates/music.html +++ b/src/main/resources/templates/music.html @@ -290,13 +290,14 @@ - - + - - + + + + diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index b8bf740..d350eab 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -192,10 +192,10 @@ - - - - + + + +