package main; import java.io.IOException; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import org.jibble.pircbot.IrcException; import org.jibble.pircbot.NickAlreadyInUseException; import org.jibble.pircbot.PircBot; import actions.Action; import comportement.Comportement; public class Bot extends PircBot { private volatile static long TIME_BETWEEN_MESSAGES = 200; private List actions = Action.getAllActions(this); private List comportements = Comportement.getAllComportements(this); private String[] admins; private boolean responseOnPrivateChannel = true; private boolean responseOnPrivateMessages = true; private volatile static long WAIT_BEFORE_RECONNECT = 60; public Bot() { this.setAutoNickChange(true); this.setName("UneFede"); this.setVersion("Gentille Droide de la fédération, <3 Marmat"); this.setMessageDelay(TIME_BETWEEN_MESSAGES); if(Main.isDebug()) { this.setVerbose(true); }else { this.setVerbose(false); } } public void onPrivateMessage(String sender, String login, String hostname, String message) { if(responseOnPrivateMessages) { onMessage(sender, sender, login, hostname, message); }else { sendMessage(sender,"Eh non, Je suis configurée pour ne pas répondre aux MP. Désolé!"); } } public void onDisconnect() { Date d = new Date(); System.err.println("Je viens d'être déconnectée!"); this.sendMessageToAdmins("Je viens d'être déconnectée!"); while(!this.isConnected()) { try { Thread.sleep(WAIT_BEFORE_RECONNECT*1000); } catch (InterruptedException e) { e.printStackTrace(); } try { this.reconnect(); }catch (UnknownHostException e) { } catch (NickAlreadyInUseException e) { this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter mon nom était déjà utilisé!"); e.printStackTrace(); } catch (IOException e) { this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter, j'ai eu une IOException: "+e.toString()); e.printStackTrace(); } catch (IrcException e) { this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter, j'ai eu une IrcException: "+e.toString()); e.printStackTrace(); } } SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss", Locale.FRENCH); this.sendMessageToAdmins("Je viens de me reconnecter, j'était abscente depuis le "+sdf.format(d)); } public final void joinChannels() { String[] channels = Main.getCHANNELS(); for(int i = 0; i< channels.length; i++) { joinChannel(channels[i]); } } public void onMessage(String channel, String sender, String login, String hostname, String message) { for(Action a:actions){ if(a.hasToReact(message)) { a.react(channel, sender, login, hostname, message); } } //easter Eggs String ea="Ehlo "+this.getNick(); if (message.toLowerCase().contains(ea.toLowerCase())) { sendMessage(channel, "Ehlo "+sender+"!!"); } if(message.toLowerCase().contains("mousse au chocolat")) { sendMessage(channel, "J'adore la mousse au chocolat de Benjamin B."); } System.out.println("cprt"); for(Comportement c : comportements) { System.out.println("Comportements"); if(c.hastoreact(message)) { c.react(channel, sender, login, hostname, message); System.out.println("a reagi"); }else { System.out.println("ne reagit pas"); } } } public void onMode(String channel, String sourceNick, String sourceLogin, String sourceHostname, String mode) { mode = mode.toLowerCase(); if(mode.contains("pircbot") && mode.substring(0, 2).equals("+b") && sourceLogin.toLowerCase().contains("abitbolg")) { sendMessageToAdmins("Help, il semblerai que je me soit fait ban sur "+channel+" Tu peux vérifier?"); } } /** * Envoie les messages les uns à la suite de l'autre dans l'ordre de la liste. * @param channel Channel IRC dans lequel envoyer les messages * @param lines liste de chaaines de caractères à envoyer. */ private void sendMessage(String channel, List lines) { for(String s : lines) { sendMessage(channel,s); } } /** * */ @Override public void onKick (String channel, String kickerNick, String login, String hostname, String recipientNick, String reason) { if(recipientNick.equalsIgnoreCase(this.getNick())){ RejoinThread rj = new RejoinThread(this,channel); rj.start(); } } public void sendMessageToAdmins(String message) { for(int i=0;i messages) { for(int i=0;i messages) { if(this.responseOnPrivateChannel) { this.sendMessage(sender, messages); }else { this.sendMessage(channel, messages); } } }