diff --git a/src/net/Broken/Commandes/Help.java b/src/net/Broken/Commandes/Help.java index a979629..091cecf 100644 --- a/src/net/Broken/Commandes/Help.java +++ b/src/net/Broken/Commandes/Help.java @@ -2,13 +2,16 @@ package net.Broken.Commandes; import net.Broken.Commande; import net.Broken.MainBot; +import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.PrivateMessage; +import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.ChannelType; 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.Logger; +import java.awt.*; import java.util.Map; /** @@ -31,7 +34,7 @@ public class Help implements Commande { { logger.info("Aide demmander pour la cmd "+argsString+" par "+event.getAuthor().getName()); if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n\n"+MainBot.commandes.get(argsString).help(args)).queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getHelp(argsString,MainBot.commandes.get(argsString).help(args))).queue(); else{ PrivateMessage.send(event.getAuthor(), MainBot.commandes.get(argsString).help(args),logger); } @@ -41,23 +44,23 @@ public class Help implements Commande { else { if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Commande Inconue!__** :warning:").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getUnknowCommand()).queue(); else{ - PrivateMessage.send(event.getAuthor(),":warning: **__Commande Inconue!__** :warning:",logger); + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getUnknowCommand(),logger); } logger.info("Commande Inconnue!"); } } else { - String txt=""; + StringBuilder txt= new StringBuilder(); for (Map.Entry e : MainBot.commandes.entrySet()) { - txt=txt+"\n//"+e.getKey(); - + txt.append("\n- ").append(e.getKey()); } if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:arrow_right:\t**__commandes envoyées par message privé__**").queue(); - PrivateMessage.send(event.getAuthor(),"Commandes du bot:\n\n```"+txt+"```\n\nUtilise `//help ` pour plus de détails.",logger); + + event.getTextChannel().sendMessage(new EmbedBuilder().setTitle("Commandes envoyées par message privé").setColor(Color.green).build()).queue(); + PrivateMessage.send(event.getAuthor(),new EmbedBuilder().setTitle("Commandes du bot").setDescription(txt.toString()).setFooter("Utilise '//help ' pour plus de détails.",null).setColor(Color.green).setThumbnail(event.getJDA().getSelfUser().getAvatarUrl()).build(),logger); diff --git a/src/net/Broken/Commandes/Move.java b/src/net/Broken/Commandes/Move.java index 331c5d0..1cfaa8f 100644 --- a/src/net/Broken/Commandes/Move.java +++ b/src/net/Broken/Commandes/Move.java @@ -1,6 +1,7 @@ package net.Broken.Commandes; import net.Broken.Commande; +import net.Broken.Outils.EmbedMessageUtils; import net.dv8tion.jda.core.entities.*; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.managers.GuildController; @@ -97,7 +98,7 @@ public class Move implements Commande { if(userL.size()<1 ||roleL.size()<1) { logger.info("Mentionnement Incorect."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Erreur de déplacement__** :warning:\n:arrow_right: Erreur, Utilisateur ou Role mal mentioner. `//help move` pour plus d'info ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Utilisateur ou Role mal mentioner.")).queue(); } else { @@ -113,17 +114,17 @@ public class Move implements Commande { boolean erreur=this.exc(user,roleCible,true,serveur,serveur.getManager()); if(erreur) { - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Erreur de déplacement.__** :warning:\n:arrow_right: Verifier le rôle cible. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Verifier le rôle cible. ")).queue(); } else { - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:ok: **Déplacement de "+user.getEffectiveName()+" vers "+roleCible.getName()+" reussi.** :ok:").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveOk("Déplacement de "+user.getEffectiveName()+" vers "+roleCible.getName()+" reussi.")).queue(); } } else { logger.info("Autorisation insuffisante, deplacement refusé"); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Vous n'avez pas l'autorisation de faire ca!__**:warning: ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Vous n'avez pas l'autorisation de faire ca!")).queue(); } } @@ -132,7 +133,7 @@ public class Move implements Commande { else { logger.warn("Arguments maquant."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Erreur de déplacement__** :warning:\n:arrow_right: Arguments manquant. `//help move` pour plus d'info ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Arguments manquant.")).queue(); } } diff --git a/src/net/Broken/Commandes/Spam.java b/src/net/Broken/Commandes/Spam.java index b8d445d..517012a 100644 --- a/src/net/Broken/Commandes/Spam.java +++ b/src/net/Broken/Commandes/Spam.java @@ -3,6 +3,7 @@ package net.Broken.Commandes; import net.Broken.Commande; import net.Broken.MainBot; import net.Broken.Outils.AntiSpam; +import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.UserSpamUtils; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; @@ -76,7 +77,7 @@ public class Spam implements Commande { @Override public String help(String[] args) { - return "`//spam extermine <@utilisateur> `\n:arrow_right:\t*Punir un spammeur.*\n\n`//spam pardon <@utilisateur>`\n:arrow_right:\t*Anuller la punition d'un utilisateur.*\n\n`//spam reset <@utilisateur>`\n:arrow_right:\t*RAZ du multiplicateur d'un utilisateur.*"; + return "`//spam extermine <@utilisateur> `\n:arrow_right:\t*Punir un spammeur.*\n\n`//spam pardon <@utilisateur>`\n:arrow_right:\t*Annuler la punition d'un utilisateur.*\n\n`//spam reset <@utilisateur>`\n:arrow_right:\t*RAZ du multiplicateur d'un utilisateur.*"; } @Override @@ -110,7 +111,7 @@ public class Spam implements Commande { if(userL.size()<1) { logger.error("Utilisateur introuvable."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Utilisateur introuvable. "); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError(":arrow_right: Utilisateur introuvable. ","pardon")).queue(); } else { Member user = serveur.getMember(userL.get(0)); @@ -130,25 +131,25 @@ public class Spam implements Commande { MainBot.spamUtils.get(user.getUser()).setOnSpam(false); } else { logger.warn("Utilisateur pas en spam."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Utilisateur non spammeur. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError(":arrow_right: Utilisateur non spammeur.","pardon")).queue(); } } else { logger.warn("Utilisateur pas en spam."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Utilisateur non spammeur. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError(":arrow_right: Utilisateur non spammeur.","pardon")).queue(); } } else { logger.warn("Autorisation insuffisante, pardon refusé"); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:no_entry_sign: **__Vous n'avez pas l'autorisation de faire sa!__** :no_entry_sign: ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Vous n'avez pas l'autorisation de faire ça!")).queue(); } } } else { logger.warn("Argument manquant."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Argument manquant__**:warning: \n:arrow_right: Utilisation: `//spam pardon <@utilisateur>`.").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Argument manquant!","pardon")).queue(); } @@ -172,7 +173,7 @@ public class Spam implements Commande { if(userL.size()<1) { logger.warn("Mentionnement Incorect (Spam)."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Erreur__** :warning:\n:arrow_right: Erreur, Utilisateur mal mentioner. `//help spam extermine` pour plus d'info ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Utilisateur mal mentioner. ","extermine")).queue(); } else{ @@ -202,7 +203,7 @@ public class Spam implements Commande { else { logger.warn("Utilisateur deja en spam."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Erreur__** :warning:\n:arrow_right: Utilisateur déjà spammeur. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Utilisateur déjà spammeur.","extermine")).queue(); } @@ -216,7 +217,7 @@ public class Spam implements Commande { else { logger.warn("Autorisation insuffisante, extermination refusé"); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:no_entry_sign: **__Vous n'avez pas l'autorisation de faire ça!__** :no_entry_sign: ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Vous n'avez pas l'autorisation de faire ça!")).queue(); } } @@ -226,7 +227,7 @@ public class Spam implements Commande { else { logger.warn("Argument manquant."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Argument manquant__**:warning: \n:arrow_right: Utilisation: `//spam extermine `.").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Argument manquant!","extermine")).queue(); } } @@ -249,7 +250,7 @@ public class Spam implements Commande { if(userL.size()<1) { logger.warn("Utilisateur introuvable."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Utilisateur introuvable. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Utilisateur introuvable.","reset")).queue(); } else { @@ -272,7 +273,7 @@ public class Spam implements Commande { } } else { logger.warn("Autorisation insuffisante, reset refusé"); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:no_entry_sign: **__Vous n'avez pas l'autorisation de faire ca!__** :no_entry_sign: ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Vous n'avez pas l'autorisation de faire ca!")).queue(); } } @@ -280,7 +281,7 @@ public class Spam implements Commande { else { logger.warn("Argument manquant."); - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Argument manquant__**:warning: \n:arrow_right: Utilisation: `//spam reset `.").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError("Argument manquant!","reset")).queue(); } } else diff --git a/src/net/Broken/Commandes/SpamInfo.java b/src/net/Broken/Commandes/SpamInfo.java index 43c1019..92a7a8a 100644 --- a/src/net/Broken/Commandes/SpamInfo.java +++ b/src/net/Broken/Commandes/SpamInfo.java @@ -2,23 +2,30 @@ package net.Broken.Commandes; import net.Broken.Commande; import net.Broken.MainBot; +import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.PrivateMessage; import net.Broken.Outils.UserSpamUtils; +import net.dv8tion.jda.core.EmbedBuilder; 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.User; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.awt.*; +import java.util.HashMap; import java.util.concurrent.TimeUnit; /** * Created by sebastien on 13/03/17. */ public class SpamInfo implements Commande{ + private HashMap threadHashMap = new HashMap<>(); + Logger logger = LogManager.getLogger(); - private String HELP="`//spaminfo <@utilisateur> `\n:arrow_right:\t*Affiche les infos relative aux punitions contre le spam de l'utilisateur mentionnée (de l'auteur si pas de mention)*"; + private String HELP="`//spaminfo <@utilisateur> `\n:arrow_right:\t*Affiche les infos relatives aux punitions contre le spam de l'utilisateur mentionnée (de l'auteur si pas de mention)*"; @Override public boolean called(String[] args, MessageReceivedEvent event) { return false; @@ -35,28 +42,52 @@ public class SpamInfo implements Commande{ } - + Message message = null; if(!MainBot.spamUtils.containsKey(user)){ if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n\n__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `1`\n\t- En spam: `Non`").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`")).queue(); else - PrivateMessage.send(event.getAuthor(),"__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `1`\n\t- En spam: `Non`",logger); + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`"),logger); } else{ UserSpamUtils util = MainBot.spamUtils.get(user); if(!util.isOnSpam()){ if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n\n__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).queue(); else - PrivateMessage.send(event.getAuthor(),"__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`",logger); + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`"),logger); } else{ if(!event.isFromType(ChannelType.PRIVATE)) - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n\n__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`").queue(); + message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); else - PrivateMessage.send(event.getAuthor(),"__**Spam info de "+user.getName()+":**__\n\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`",logger); + message = PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`"),logger); } } + if(message != null){ + if(threadHashMap.containsKey(user)){ + MessageUpdater startedThread = threadHashMap.get(user); + if(!message.getChannelType().equals(startedThread.message.getChannelType())){ + MessageUpdater newThread = new MessageUpdater(message,MainBot.spamUtils.get(user),user); + threadHashMap.put(user,newThread); + newThread.start(); + } + else + { + threadHashMap.get(user).stop = true; + MessageUpdater newThread = new MessageUpdater(message,MainBot.spamUtils.get(user),user); + threadHashMap.replace(user, newThread); + newThread.start(); + } + } + else + { + MessageUpdater newThread = new MessageUpdater(message,MainBot.spamUtils.get(user),user); + threadHashMap.put(user, newThread); + newThread.start(); + } + } + @@ -103,4 +134,43 @@ public class SpamInfo implements Commande{ return finalText; } + + + private class MessageUpdater extends Thread{ + public Message message; + public UserSpamUtils util; + public boolean stop; + private int oldValue; + private User user; + + public MessageUpdater(Message message, UserSpamUtils util,User user) { + this.message = message; + this.util = util; + this.user = user; + } + + @Override + public void run() { + logger.debug("Start "+user.getName()+" theard!"); + oldValue = util.getTimeLeft(); + while (util.getTimeLeft()!=0 && !stop){ + try { + Thread.sleep(500); + if(util.getTimeLeft()%5 == 0 && oldValue - util.getTimeLeft() >= 5){ + message.editMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); + oldValue = util.getTimeLeft(); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + logger.debug("Kill "+user.getName()+" theard!"); + if(stop) + message.editMessage(new EmbedBuilder().setColor(Color.RED).setTitle("Aborted").build()).complete(); + else + message.editMessage(EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).complete(); + threadHashMap.remove(user); + } + } } diff --git a/src/net/Broken/MainBot.java b/src/net/Broken/MainBot.java index 8e95693..72b6af9 100644 --- a/src/net/Broken/MainBot.java +++ b/src/net/Broken/MainBot.java @@ -4,11 +4,9 @@ import net.Broken.Commandes.*; import net.Broken.Commandes.Over18.*; import net.Broken.Outils.CommandParser; import net.Broken.Outils.DayListener; +import net.Broken.Outils.EmbedMessageUtils; import net.Broken.Outils.UserSpamUtils; -import net.dv8tion.jda.core.AccountType; -import net.dv8tion.jda.core.JDA; -import net.dv8tion.jda.core.JDABuilder; -import net.dv8tion.jda.core.OnlineStatus; +import net.dv8tion.jda.core.*; import net.dv8tion.jda.core.entities.*; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.exceptions.RateLimitedException; @@ -20,7 +18,6 @@ import javax.security.auth.login.LoginException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; -import java.util.Hashtable; import java.util.List; /** @@ -28,18 +25,19 @@ import java.util.List; */ public class MainBot { + private static boolean dev = false; + private static String token = null; private static JDA jda; public static final CommandParser parser =new CommandParser(); public static HashMap commandes = new HashMap<>(); public static boolean okInit=false; - public static HashMap historique =new HashMap<>(); + public static HashMap> historique =new HashMap<>(); public static HashMap message_compteur =new HashMap<>(); public static HashMap spamUtils = new HashMap<>(); - public static ArrayList> privateUsableCommand = new ArrayList<>(); - static Logger logger = LogManager.getLogger(); + private static Logger logger = LogManager.getLogger(); public static void main(String[] args) throws IOException { logger.trace("trace"); @@ -47,12 +45,28 @@ public class MainBot { logger.info("info"); logger.warn("warn"); logger.error("error"); + int i = 0; + for(String aArg: args){ + logger.debug(aArg); + if(aArg.startsWith("--") || aArg.startsWith("-")){ + aArg = aArg.replaceAll("-",""); + if(aArg.equals("token") || aArg.equals("t")){ + token = args[i+1]; + } + else if(aArg.equals("dev") || aArg.equals("d")){ + dev = true; + } + } + i++; + } + + /**************************** * Initialisation * ****************************/ logger.info("-------------------INITIALISATION-------------------"); //Bot démarrer sans token - if (args.length < 1) { + if (token == null) { logger.fatal("Veuilliez indiquer le token du bot en argument..."); okInit=false; } @@ -64,7 +78,7 @@ public class MainBot { logger.info("Connection au serveur..."); //connection au bot - jda = new JDABuilder(AccountType.BOT).addEventListener(new BotListener()).setToken(args[0]).setBulkDeleteSplittingEnabled(false).buildBlocking(); + jda = new JDABuilder(AccountType.BOT).addEventListener(new BotListener()).setToken(token).setBulkDeleteSplittingEnabled(false).buildBlocking(); jda.setAutoReconnect(true); jda.addEventListener(); okInit=true; @@ -84,25 +98,25 @@ public class MainBot { * Definition des commande * *************************************/ jda.getPresence().setGame(Game.of("Statut: Loading...")); - jda.getTextChannels().forEach(MessageChannel::sendTyping); + jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue()); commandes.put("ping", new PingCommande()); commandes.put("help",new Help()); commandes.put("move", new Move()); commandes.put("spam", new Spam()); - jda.getTextChannels().forEach(MessageChannel::sendTyping); - commandes.put("ass",new Ass()); - jda.getTextChannels().forEach(MessageChannel::sendTyping); - commandes.put("boobs",new Boobs()); - jda.getTextChannels().forEach(MessageChannel::sendTyping); - commandes.put("pipe",new Pipe()); - jda.getTextChannels().forEach(MessageChannel::sendTyping); - commandes.put("sm",new SM()); - commandes.put("madame",new Madame()); - commandes.put("cat",new Cat()); + + if(!dev){ + commandes.put("ass",new Ass()); + jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue()); + commandes.put("boobs",new Boobs()); + jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue()); + commandes.put("pipe",new Pipe()); + jda.getTextChannels().forEach(textChannel -> textChannel.sendTyping().queue()); + commandes.put("sm",new SM()); + commandes.put("madame",new Madame()); + commandes.put("cat",new Cat()); + } commandes.put("spaminfo",new SpamInfo()); - privateUsableCommand.add(Help.class); - privateUsableCommand.add(PingCommande.class); //On recupere le l'id serveur Guild serveur = jda.getGuilds().get(0); @@ -138,6 +152,8 @@ public class MainBot { logger.info("-----------------FIN INITIALISATION-----------------"); jda.getPresence().setGame(Game.of("Statut: Ok!")); +// MessageEmbed test = EmbedMessageUtils.getHelp("test",command) +// jda.getTextChannels().get(0).sendMessage(test).queue(); } @@ -172,9 +188,9 @@ public class MainBot { { MessageReceivedEvent event = cmd.event; if(event.isFromType(ChannelType.PRIVATE)) - event.getPrivateChannel().sendMessage("\n:warning: **__Commande inconnue!__** :warning:\n:arrow_right: Utilisez `//help` pour voirs les commandes disponible. ").queue(); + event.getPrivateChannel().sendMessage(EmbedMessageUtils.getUnknowCommand()).queue(); else - event.getTextChannel().sendMessage(event.getAuthor().getAsMention()+"\n:warning: **__Commande inconnue!__** :warning:\n:arrow_right: Utilisez `//help` pour voirs les commandes disponible. ").queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getUnknowCommand()).queue(); logger.warn("Commande inconnue"); } diff --git a/src/net/Broken/Outils/AntiSpam.java b/src/net/Broken/Outils/AntiSpam.java index 39f7f66..b90b3e0 100644 --- a/src/net/Broken/Outils/AntiSpam.java +++ b/src/net/Broken/Outils/AntiSpam.java @@ -61,8 +61,7 @@ public class AntiSpam { logger.info("Punition de "+user.getEffectiveName()+" avec un multiplicateur de "+MainBot.spamUtils.get(user.getUser())); - event.getTextChannel().sendMessage(user.getAsMention()+"\n```markdown\n#-----------------SPAM DETECTEUR----------------#\n# #\n# La prochaine fois tu fermeras ta gueule! #\n# #\n# On te revoit dans "+MainBot.spamUtils.get(user.getUser()).getMultip()+"min #\n# #\n#-----------------------------------------------#```").queue(); - + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamExtermine(user,MainBot.spamUtils.get(user.getUser()).getMultip())).queue(); if(!MainBot.spamUtils.get(user.getUser()).isOnSpam()) { MainBot.spamUtils.get(user.getUser()).setOnSpam(true); @@ -121,8 +120,7 @@ public class AntiSpam { logger.info("["+user.getEffectiveName()+"] Fin de spam pour "+user.getEffectiveName()+" apres "+multip+"min."); move.exc(user, saveRoleUser.get(0), true, serveur, serveurManager); //aSaveroleUser=saveRoleUser.get(i) logger.info("["+user.getEffectiveName()+"] Fin des "+multip+"min"); - chanel.sendMessage(user.getAsMention()+"\n```markdown\n#-----------------SPAM DETECTEUR----------------#\n# #\n# Un spammeur est de retour, fais gaffe! #\n# Je te surveille! #\n# #\n#-----------------------------------------------#```").queue(); - + chanel.sendMessage(EmbedMessageUtils.getSpamPardon(user)).queue(); // #-----------------------------------------------# diff --git a/src/net/Broken/Outils/EmbedMessageUtils.java b/src/net/Broken/Outils/EmbedMessageUtils.java new file mode 100644 index 0000000..9093cdb --- /dev/null +++ b/src/net/Broken/Outils/EmbedMessageUtils.java @@ -0,0 +1,47 @@ +package net.Broken.Outils; + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.MessageEmbed; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; + +import java.awt.*; + +public class EmbedMessageUtils { + public static MessageEmbed getUnknowCommand() { + return new EmbedBuilder().setTitle(":warning: Commande inconnue! :warning:").setDescription(":arrow_right: Utilisez `//help` pour voirs les commandes disponible.").setColor(Color.orange).build(); + + } + + public static MessageEmbed getSpamExtermine(Member autor, int multi) { + return new EmbedBuilder().setTitle(":mute: Spam Hunter :mute:").setDescription(autor.getAsMention() + " détecté comme spammer !\n\nOn te revoit dans __**" + multi + "**__ min!").setImage("https://media.giphy.com/media/WVudyGEaizNeg/giphy.gif").setFooter("Spam info disponible via '//spaminfo' en privé", null).setColor(Color.orange).build(); + } + + public static MessageEmbed getSpamPardon(Member autor) { + return new EmbedBuilder().setTitle(":mute: Spam Hunter :mute:").setDescription(autor.getAsMention() + " est de retour, fais gaffe!\nJe te surveille!").setImage("https://media.giphy.com/media/3o7TKwBctlv08kY08M/giphy.gif").setFooter("Spam info disponible via '//spaminfo' en privé", null).setColor(Color.orange).build(); + } + + public static MessageEmbed getHelp(String name, String helpMessage) { + return new EmbedBuilder().setTitle(":question: " + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase() + " :question: ").setDescription("\n" + helpMessage).setColor(Color.green).build(); + } + + public static MessageEmbed getMoveError(String message) { + return new EmbedBuilder().setTitle(":warning: Move Error :warning: ").setDescription(message).setColor(Color.red).setFooter("'//help move' pour plus d'info ", null).build(); + } + + public static MessageEmbed getMoveOk(String message) { + return new EmbedBuilder().setTitle(":ok: Move :ok: ").setDescription(message).setColor(Color.green).setFooter("'//help move' pour plus d'info ", null).build(); + } + + public static MessageEmbed getSpamError(String message) { + return new EmbedBuilder().setTitle(":warning: Spam Error :warning: ").setDescription(message).setColor(Color.red).setFooter("'//help spam' pour plus d'info ", null).build(); + } + + public static MessageEmbed getSpamError(String message, String sub) { + return new EmbedBuilder().setTitle(":warning: Spam Error :warning: ").setDescription(message).setColor(Color.red).setFooter("'//help spam "+sub+"' pour plus d'info ", null).build(); + } + + public static MessageEmbed getSpamInfo(String message) { + return new EmbedBuilder().setTitle(":hourglass: Spam Info :hourglass:").setDescription(message).setColor(Color.green).setFooter("'//help spaminfo' pour plus d'info ", null).build(); + } +} \ No newline at end of file diff --git a/src/net/Broken/Outils/Moderateur.java b/src/net/Broken/Outils/Moderateur.java index b3411bb..49e543b 100644 --- a/src/net/Broken/Outils/Moderateur.java +++ b/src/net/Broken/Outils/Moderateur.java @@ -5,18 +5,20 @@ import net.Broken.MainBot; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.managers.GuildManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.ArrayList; + /** * Created by Parayre on 24/10/2016. */ public class Moderateur { Logger logger = LogManager.getLogger(); - private String[] tabMessages; public Moderateur() {} @@ -25,7 +27,7 @@ public class Moderateur { // SINON retourne 0 public int analyse(Member user, Guild serveur, GuildManager serveurManager, MessageReceivedEvent event){ - String[] toi = new String[5];//Creer tableau pour la copie + ArrayList thisUserHistory = new ArrayList<>();//Creer tableau pour la copie int i = 0; // variable de parcours de "historique" int nbMessage = 3; int spam = 0; @@ -33,51 +35,54 @@ public class Moderateur { /******************************************** * si l'USER a deja envoyé un message * ********************************************/ - if(MainBot.historique.containsKey(user))// Si le user a deja posté un message + if(MainBot.historique.containsKey(user.getUser()))// Si le user a deja posté un message { + logger.debug("ok"); /******************************************** * COPIE des infos d"historique" vers TOI[] * ********************************************/ - i = 0; - while( (MainBot.historique.get(user)[i] != null) && (i < nbMessage) ){ - toi[i+1] = MainBot.historique.get(user)[i]; - i++; - } + thisUserHistory = (ArrayList) MainBot.historique.get(user.getUser()).clone(); + /******************************************** * Ajout dernier message recu + dans histo' * ********************************************/ - toi[0] = event.getMessage().getContent();// On stocke en position [0] le nouveau message - MainBot.historique.put(user.getUser(), toi);// On ajoute dans l'historique TOI + thisUserHistory.add(0,event.getMessage()); + if(thisUserHistory.size()>nbMessage+1) + thisUserHistory.remove(4); + MainBot.historique.put(user.getUser(), thisUserHistory);// On ajoute dans l'historique TOI /***************************** * ANALYSE des messages * *****************************/ - if(toi[3].equals(toi[2])&&toi[2].equals(toi[1]) && toi[1].equals(toi[0]) ){ + int equalCont = 0; + String oldMessage = ""; + for(Message aMessage : thisUserHistory){ + if(aMessage.getContent().equals(oldMessage)) + equalCont++; + oldMessage = aMessage.getContent(); + logger.debug( "\t- "+aMessage.getContent()); + } + if(equalCont >= nbMessage){ spam = 1; - logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 3 messages identique: "); - for(int j=0;MainBot.historique.get(user).length-1>j;j++) + logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 3 messages identique: "); + for(Message aMessage : thisUserHistory) { - logger.info("\t"+j+". "+MainBot.historique.get(user)[j]); + logger.info("\t - "+aMessage.getContent()); } - toi[0] = ""; - toi[1] = ""; - toi[2] = ""; - toi[3] = ""; - MainBot.historique.put(user.getUser(), toi); + MainBot.historique.put(user.getUser(), new ArrayList()); } } else { + logger.debug("ok else "); /******************************************** * SI c'est le 1er message de l'USER * ********************************************/ // si le user n'a pas encore posté de message // on ajoute le dernier message dans "historique" - toi[0] = event.getMessage().getContent(); - toi[1] = ""; - toi[2] = ""; - toi[3] = ""; - MainBot.historique.put(user.getUser(), toi); + thisUserHistory.add(0,event.getMessage()); + + MainBot.historique.put(user.getUser(), thisUserHistory); } /********************************** * AFFICHAGE DE HISTORIQUE * @@ -99,10 +104,10 @@ public class Moderateur { MainBot.message_compteur.put(user.getUser(),0); spam = 1; logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 5 message en 5seg: "); - String[] histo = MainBot.historique.get(user.getUser()); - for (String unMessage:histo ) //=for(int i=0; i histo = MainBot.historique.get(user.getUser()); + for (Message aMessage:histo ) //=for(int i=0; i