diff --git a/Heroku/Procfile b/Heroku/Procfile index cd47c2f..fb41c07 100644 --- a/Heroku/Procfile +++ b/Heroku/Procfile @@ -1 +1 @@ -worker: java -Dlog4j.configurationFile=log4j2.xml -jar Discord_Stroumpf_Beta.jar "MjQwODA2MDk1NzcyMTg4Njc0.CvIrrg.p3lOx7oXabPWcT1oZiPKcu0uSs4" +worker: java -Dlog4j.configurationFile=log4j2.xml -jar Discord_Stroumpf_Beta.jar -t MjQwODA2MDk1NzcyMTg4Njc0.CvIrrg.p3lOx7oXabPWcT1oZiPKcu0uSs4 diff --git a/src/net/Broken/BotListener.java b/src/net/Broken/BotListener.java index 29c0262..3110167 100644 --- a/src/net/Broken/BotListener.java +++ b/src/net/Broken/BotListener.java @@ -1,19 +1,26 @@ package net.Broken; +import net.Broken.Commandes.Move; +import net.Broken.Commandes.Spam; import net.Broken.Outils.AntiSpam; import net.Broken.Outils.Moderateur; +import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.events.ExceptionEvent; import net.dv8tion.jda.core.events.ReadyEvent; import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent; +import net.dv8tion.jda.core.events.guild.member.GuildMemberRoleRemoveEvent; import net.dv8tion.jda.core.events.guild.voice.GuildVoiceJoinEvent; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.HierarchyException; import net.dv8tion.jda.core.hooks.ListenerAdapter; import net.dv8tion.jda.core.managers.GuildManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import sun.security.tools.keytool.Main; /** @@ -32,54 +39,68 @@ public class BotListener extends ListenerAdapter { } + @Override + public void onGuildMemberJoin(GuildMemberJoinEvent event) { + logger.info(event.getUser().getName()+ "join the guild, move it!"); + new Move().exc(event.getMember(),event.getJDA().getRolesByName("Rat_d'égout",true).get(0),false,event.getJDA().getGuilds().get(0),event.getJDA().getGuilds().get(0).getManager()); + MainBot.roleFlag = false; + } + + @Override + public void onGuildMemberRoleRemove(GuildMemberRoleRemoveEvent event) { + logger.debug(event.getUser().getName()+" leave a role"); + if(!MainBot.roleFlag){ + + if(event.getMember().getRoles().size() == 0){ + logger.info(event.getUser().getName()+ "have no roles, move it!"); + new Move().exc(event.getMember(),event.getJDA().getRolesByName("Rat_d'égout",true).get(0),false,event.getJDA().getGuilds().get(0),event.getJDA().getGuilds().get(0).getManager()); + MainBot.roleFlag = false; + } + } + else + { + logger.debug("ignore it"); + MainBot.roleFlag = false; + } + + } @Override public void onMessageReceived(MessageReceivedEvent event) { // ----------------------Test pour eviter eco de commande------------------------- -// try -// { - 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)); - } - else if (!event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) - { - if(!event.getTextChannel().getName().equals("le_dongeon")) - { - Guild serveur=event.getGuild(); + 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)); + } + else if (!event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) + { + + if(!event.isFromType(ChannelType.PRIVATE)) { + if (!event.getTextChannel().getName().equals("le_dongeon")) { + Guild serveur = event.getGuild(); GuildManager guildManager = serveur.getManager(); Member user = event.getMember(); - if(!event.isFromType(ChannelType.PRIVATE)) - { - // appel de la methode d'analyse de message de "Moderateur" - if(!event.getAuthor().getName().equals("Aethex") && event.getMessage().getContent().length()>0) { + // appel de la methode d'analyse de message de "Moderateur" + if (!event.getAuthor().getName().equals("Aethex") && event.getMessage().getContent().length() > 0) { - if (modo.analyse(user, serveur, guildManager, event) == 1) { - antispam.extermine(user, serveur, guildManager,true, event); - } + if (modo.analyse(user, serveur, guildManager, event) == 1) { + antispam.extermine(user, serveur, guildManager, true, event); } - else if(event.getMessage().getContent().length() == 0) - logger.error("Image detected, ignoring it."); - } + } else if (event.getMessage().getContent().length() == 0) + logger.error("Image detected, ignoring it."); + } - - - - - } -// }catch (Exception e) -// { -// if (e.getMessage()==null) { -// logger.error("NullPointerException"); -// } else { -// logger.error(e.getMessage()); -// } -// } + + + + + + } } } diff --git a/src/net/Broken/Commandes/Move.java b/src/net/Broken/Commandes/Move.java index 1cfaa8f..bda54d6 100644 --- a/src/net/Broken/Commandes/Move.java +++ b/src/net/Broken/Commandes/Move.java @@ -1,9 +1,11 @@ package net.Broken.Commandes; import net.Broken.Commande; +import net.Broken.MainBot; import net.Broken.Outils.EmbedMessageUtils; import net.dv8tion.jda.core.entities.*; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.HierarchyException; import net.dv8tion.jda.core.managers.GuildController; import net.dv8tion.jda.core.managers.GuildManager; import org.apache.logging.log4j.LogManager; @@ -40,8 +42,9 @@ public class Move implements Commande { * @param serveurManager * @return */ - public boolean exc(Member user, Role cible , boolean reset, Guild serveur, GuildManager serveurManager) + public boolean exc(Member user, Role cible , boolean reset, Guild serveur, GuildManager serveurManager) throws HierarchyException { + MainBot.roleFlag = true; guildController = new GuildController(serveur); boolean erreur = false; List allRoll = serveur.getRoles(); @@ -98,7 +101,7 @@ public class Move implements Commande { if(userL.size()<1 ||roleL.size()<1) { logger.info("Mentionnement Incorect."); - event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Utilisateur ou Role mal mentioner.")).queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Utilisateur ou Role mal mentioner.")).queue(); } else { @@ -111,15 +114,22 @@ public class Move implements Commande { logger.info("Autorisation suffisante, deplacement autorisé"); logger.info("Utilisateur trouvée"); - boolean erreur=this.exc(user,roleCible,true,serveur,serveur.getManager()); - if(erreur) - { - event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Verifier le rôle cible. ")).queue(); - } - else - { - event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveOk("Déplacement de "+user.getEffectiveName()+" vers "+roleCible.getName()+" reussi.")).queue(); + try { + boolean erreur=this.exc(user,roleCible,true,serveur,serveur.getManager()); + if(erreur) + { + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Verifier le rôle cible. ")).queue(); + } + else + { + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveOk("Déplacement de "+user.getEffectiveName()+" vers "+roleCible.getName()+" reussi.")).queue(); + } + }catch (HierarchyException e){ + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Impossible de déplacer un "+user.getRoles().get(0).getAsMention())).queue(); + logger.error("Hierarchy error"); } + + } else { @@ -133,12 +143,12 @@ public class Move implements Commande { else { logger.warn("Arguments maquant."); - event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError(":arrow_right: Arguments manquant.")).queue(); + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Arguments manquant.")).queue(); } } else - event.getPrivateChannel().sendMessage("\n:warning: **__Commande non disponible en priver!__** :warning:"); + event.getPrivateChannel().sendMessage(EmbedMessageUtils.getNoPrivate()); diff --git a/src/net/Broken/Commandes/SpamInfo.java b/src/net/Broken/Commandes/SpamInfo.java index 92a7a8a..8396ae3 100644 --- a/src/net/Broken/Commandes/SpamInfo.java +++ b/src/net/Broken/Commandes/SpamInfo.java @@ -153,7 +153,7 @@ public class SpamInfo implements Commande{ public void run() { logger.debug("Start "+user.getName()+" theard!"); oldValue = util.getTimeLeft(); - while (util.getTimeLeft()!=0 && !stop){ + while (util.getTimeLeft()!=0 && !stop && util.isOnSpam()){ try { Thread.sleep(500); if(util.getTimeLeft()%5 == 0 && oldValue - util.getTimeLeft() >= 5){ diff --git a/src/net/Broken/MainBot.java b/src/net/Broken/MainBot.java index 72b6af9..47ef945 100644 --- a/src/net/Broken/MainBot.java +++ b/src/net/Broken/MainBot.java @@ -33,6 +33,7 @@ public class MainBot { public static boolean okInit=false; public static HashMap> historique =new HashMap<>(); public static HashMap message_compteur =new HashMap<>(); + public static boolean roleFlag = false; public static HashMap spamUtils = new HashMap<>(); @@ -180,7 +181,7 @@ public class MainBot { commandes.get(cmd.commande).executed(true, cmd.event); } else - cmd.event.getPrivateChannel().sendMessage("\n:warning: **__Commande non disponible en privé!__** :warning:").queue(); + cmd.event.getPrivateChannel().sendMessage(EmbedMessageUtils.getNoPrivate()).queue(); } diff --git a/src/net/Broken/Outils/AntiSpam.java b/src/net/Broken/Outils/AntiSpam.java index b90b3e0..d0a8065 100644 --- a/src/net/Broken/Outils/AntiSpam.java +++ b/src/net/Broken/Outils/AntiSpam.java @@ -7,6 +7,7 @@ import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Role; import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.HierarchyException; import net.dv8tion.jda.core.managers.GuildManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -61,14 +62,20 @@ public class AntiSpam { logger.info("Punition de "+user.getEffectiveName()+" avec un multiplicateur de "+MainBot.spamUtils.get(user.getUser())); - 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); List spm = serveur.getRolesByName("Spammer", false); - move.exc(user, spm.get(0), true, serveur, serveurManger); - MainBot.spamUtils.get(user.getUser()).setMinuteur(new Minuteur(MainBot.spamUtils.get(user.getUser()).getMultip(), move.user, move.saveRoleUser, move.serveur, move.serveurManager,event)); - MainBot.spamUtils.get(user.getUser()).launchMinuteur(); + try{ + move.exc(user, spm.get(0), true, serveur, serveurManger); + event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamExtermine(user,MainBot.spamUtils.get(user.getUser()).getMultip())).queue(); + MainBot.spamUtils.get(user.getUser()).setMinuteur(new Minuteur(MainBot.spamUtils.get(user.getUser()).getMultip(), move.user, move.saveRoleUser, move.serveur, move.serveurManager,event)); + MainBot.spamUtils.get(user.getUser()).launchMinuteur(); + }catch (HierarchyException e){ + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Impossible de déplacer un "+user.getRoles().get(0).getAsMention())).queue(); + MainBot.spamUtils.get(user.getUser()).setOnSpam(false); + } + } } @@ -118,7 +125,12 @@ public class AntiSpam { timeLeft--; } 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) + try { + move.exc(user, saveRoleUser.get(0), true, serveur, serveurManager); //aSaveroleUser=saveRoleUser.get(i) + }catch (HierarchyException e){ + event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Impossible de déplacer un "+user.getRoles().get(0).getAsMention())).queue(); + logger.error("Hierarchy error"); + } logger.info("["+user.getEffectiveName()+"] Fin des "+multip+"min"); chanel.sendMessage(EmbedMessageUtils.getSpamPardon(user)).queue(); diff --git a/src/net/Broken/Outils/EmbedMessageUtils.java b/src/net/Broken/Outils/EmbedMessageUtils.java index 9093cdb..ffe0d4e 100644 --- a/src/net/Broken/Outils/EmbedMessageUtils.java +++ b/src/net/Broken/Outils/EmbedMessageUtils.java @@ -2,6 +2,7 @@ package net.Broken.Outils; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.MessageEmbed; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; @@ -13,6 +14,11 @@ public class EmbedMessageUtils { } + public static MessageEmbed getNoPrivate(){ + return new EmbedBuilder().setTitle(":warning: Commande non disponible en privé! :warning:").setDescription(":arrow_right: Utilisez `//help` pour voirs les commandes disponible.").setColor(Color.red).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(); } @@ -30,7 +36,7 @@ public class EmbedMessageUtils { } 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(); + return new EmbedBuilder().setTitle(":arrow_left: Move :arrow_right: ").setDescription(message).setColor(Color.green).setFooter("'//help move' pour plus d'info ", null).build(); } public static MessageEmbed getSpamError(String message) { diff --git a/src/net/Broken/Outils/Moderateur.java b/src/net/Broken/Outils/Moderateur.java index 49e543b..b260ac1 100644 --- a/src/net/Broken/Outils/Moderateur.java +++ b/src/net/Broken/Outils/Moderateur.java @@ -105,7 +105,7 @@ public class Moderateur { spam = 1; logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 5 message en 5seg: "); ArrayList histo = MainBot.historique.get(user.getUser()); - for (Message aMessage:histo ) //=for(int i=0; i