Browse Source

Ref: Redo Action using Message Class

Martin Passard 6 years ago
parent
commit
c81107ca2c

+ 12 - 9
src/actions/Action.java

@@ -3,6 +3,8 @@ package actions;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.io.output.ThresholdingOutputStream;
+
 import data.Message;
 import main.Bot;
 
@@ -30,6 +32,7 @@ public abstract class Action {
 		this.keyWords=ar;
 	}
 	
+	
 	/**
 	 * 
 	 * Methode réagissant au message @see PircBot;
@@ -40,9 +43,13 @@ public abstract class Action {
 	 * @param message message en question
 	 */
 	public abstract void react(String channel, String sender,
-			String login, String hostname, String message);
-	
+			String login, String hostname, Message message);
 	
+	public void reactUsingMessage(String channel,String sender,
+			String login, String hostname, String message) {
+		Message m = new Message(message);
+		react(channel, sender, login, hostname, m);
+	}
 	/**
 	 * Indique si oui ou non cette action doit être executée
 	 * @param s message envoyé
@@ -72,13 +79,9 @@ public abstract class Action {
 	}
 	
 	/**
-	 * 
-	 * Methode réagissant au message @see PircBot;
-	 * @param channel channer sur l'IRC
-	 * @param sender personne ayant envoyé le message
-	 * @param login	login du bot
-	 * @param hostname hostname actuell
-	 * @param message message en question
+	 * Indique si oui ou non cette action doit être executée
+	 * @param s message envoyé
+	 * @return true si l'action contenue doit être executée, false sinon.
 	 */
 	public boolean hasToReact(Message m) {
 		if(m.getC()!=CARACTERE_COMMANDE) {

+ 14 - 12
src/actions/Contact.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import data.ISP;
+import data.Message;
 import main.Bot;
 import main.Cache;
 import verif_saisie.EntierPositifNonVide;
@@ -17,14 +18,20 @@ public class Contact extends Action {
 		this.keyWords = ar;
 	}
 
+
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
-		
-		String s = message.substring(message.indexOf(' ')+1);
-		if(keyWords.contains(messageSansEspace(s).substring(1))) {	//+contact seul
-			bot.sendMessage(sender, messageSansEspace(s)+help());
-		}else if(!EntierPositifNonVide.verifie(s)) {					// +contact suivi d'un mot
+	public String help() {
+		return " suivi du nom d'un fai. Renvoie les moyens pour contacter le FAI en question";
+	}
+
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
+
+		if(message.hasNoParameters()) {
+			bot.sendMessage(sender, message.commandCharacterAndKeyword()+help());
+		}else{
 			Cache c = Cache.getInstance();
+			String s = message.getAllParametersAsOneString();
 			ISP fai = c.getISPWithName(s);
 			if(fai == null) {
 				bot.sendMessage(sender,channel, "Aucun FAI "+s);
@@ -32,12 +39,7 @@ public class Contact extends Action {
 				bot.sendMessages(sender, channel, fai.contact());
 			}
 		}
-
-	}
-
-	@Override
-	public String help() {
-		return " suivi du nom d'un fai. Renvoie les moyens pour contacter le FAI en question";
+		
 	}
 
 	

+ 55 - 54
src/actions/Distance.java

@@ -8,6 +8,7 @@ import data.AddresseToGPS;
 import data.AddresseToGPS.Lieu;
 import data.Coordinates;
 import data.ISP;
+import data.Message;
 import data.MultiplePossibleAddressException;
 import main.Bot;
 import main.Cache;
@@ -23,37 +24,6 @@ public class Distance extends Action {
 		this.keyWords=kw;
 	}
 
-	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
-		String s = message.substring(1);
-		s=s.replace(',', '.');
-		s=s.substring(s.indexOf(' ')+1); // Je me met après la commande
-		double latitude = Double.POSITIVE_INFINITY, longitude = latitude;
-		try {
-			latitude = Double.parseDouble(s.substring(0, s.indexOf(' ')));
-			s=s.substring(s.indexOf(' ')+1); // Je me et au second paramètre
-			longitude = Double.parseDouble(s);
-			affichePlusProches(latitude, longitude, sender, channel);
-		}catch(Exception e) {	//Cela doit alors être une adresse!
-			try {
-				Coordinates ca = getCoordinatesFromMessage(message, sender, channel);
-				latitude = ca.getLatitude();
-				longitude = ca.getLongitude();
-				affichePlusProches(latitude, longitude, sender, channel);
-			} catch (MultiplePossibleAddressException e1) {
-				bot.sendMessage(sender, channel, "Plusieurs possibilités pour cet endroit, nous choisirons le premier:");
-				for(int i = 0; i<e1.lieux.length; ++i) {
-					bot.sendMessage(sender, channel, (i+1)+":"+e1.lieux[i].toString());
-				}
-				latitude = e1.lieux[0].coordonees.getLatitude();
-				longitude = e1.lieux[0].coordonees.getLongitude();
-				affichePlusProches(latitude, longitude, sender,channel);
-			}
-		}
-				
-		
-
-	}
 	
 	private void affichePlusProches(double latitude, double longitude, String sender, String channel) {
 		ISP[] plusProches = getISPPlusProche(latitude, longitude);
@@ -68,7 +38,7 @@ public class Distance extends Action {
 			}
 		}
 	}
-	
+
 	/**
 	 * 
 	 * @param message message recu
@@ -87,7 +57,7 @@ public class Distance extends Action {
 		}else if(lieux.length == 1) {
 			return lieux[0].coordonees;
 		}else {
-			
+
 			for(int i=0;i<lieux.length; ++i) {
 				for(int j=0;j<lieux.length; ++j) {
 					if(!lieux[i].coordonees.equals(lieux[j].coordonees, MAX_DIFF)) {
@@ -97,10 +67,10 @@ public class Distance extends Action {
 			}
 			return lieux[0].coordonees;
 		}
-		
+
 	}
-	
-	
+
+
 	/**
 	 * Récupere le FAI le plus proche de la position indiquée en paramètre. Utilise {@link Distance#getISPPlusProche(Coordinates)}
 	 * @param latitude
@@ -110,7 +80,7 @@ public class Distance extends Action {
 	private ISP[] getISPPlusProche(double latitude, double longitude) {
 		return getISPPlusProche(new Coordinates(latitude, longitude));
 	}
-	
+
 	/**
 	 * Récupere le FAI le plus proche de la coordonnée indiquée en paramètre
 	 * @param coord
@@ -124,28 +94,28 @@ public class Distance extends Action {
 			Coordinates faicoord = fai.getData().getCoordonnees();
 			double distance = faicoord.distanceAvec(coord);
 			if(distance>=0) {
-			for(int i=0;i<NOMBRE_AFFICHABLE;++i) {
-				
-				if(res[i] == null || distance<res[i].getData().getCoordonnees().distanceAvec(coord)) {				//TODO creer un accesseur plus rapide
-					if(res[i]!=null) {
-						decale(res,i);
-						res[i] = fai;											//J'insere
-					}else {
-						res[i] = fai;
+				for(int i=0;i<NOMBRE_AFFICHABLE;++i) {
+
+					if(res[i] == null || distance<res[i].getData().getCoordonnees().distanceAvec(coord)) {				//TODO creer un accesseur plus rapide
+						if(res[i]!=null) {
+							decale(res,i);
+							res[i] = fai;											//J'insere
+						}else {
+							res[i] = fai;
+						}
+						break;
 					}
-					break;
+
 				}
-				
-			}
 			}else {
-				
+
 			}
-			
+
 		}
-		
+
 		return res;
 	}
-	
+
 	/**
 	 * Décalle les éléments du tableau afin de pouvoir un inserer un.
 	 * @param array tableau dans lequel effectuer l'opération
@@ -160,9 +130,40 @@ public class Distance extends Action {
 
 	@Override
 	public String help() {
-		
-		return " suivi de la latitude, puis la longitude au format décimal. Exemple: +"+keyWords.get(0)+" 50,410658 61.574548      Renvoie les "+NOMBRE_AFFICHABLE+" FAI de la fédération les plus proches à vol d'oiseau";
+		return " suivi de la latitude, puis la longitude au format décimal, ou une addresse. Exemple: "+Action.CARACTERE_COMMANDE+keyWords.get(0)+" 50,410658 61.574548      Renvoie les "+NOMBRE_AFFICHABLE+" FAI de la fédération les plus proches à vol d'oiseau";
 	}
+
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
+		double latitude = Double.POSITIVE_INFINITY, longitude = latitude;
+		if(!message.hasNoParameters()) {
+			try {
+				latitude = message.getElementAsDouble(0);
+				longitude = message.getElementAsDouble(1);
+				affichePlusProches(latitude, longitude, sender, channel);
+			}catch(NumberFormatException e) {	//Cela doit alors être une adresse!
+				try {
+					Coordinates ca = getCoordinatesFromMessage(message.getAllParametersAsOneString(), sender, channel);
+					latitude = ca.getLatitude();
+					longitude = ca.getLongitude();
+					affichePlusProches(latitude, longitude, sender, channel);
+				} catch (MultiplePossibleAddressException e1) {
+					bot.sendMessage(sender, channel, "Plusieurs possibilités pour cet endroit, nous choisirons le premier:");
+					for(int i = 0; i<e1.lieux.length; ++i) {
+						bot.sendMessage(sender, channel, (i+1)+":"+e1.lieux[i].toString());
+					}
+					latitude = e1.lieux[0].coordonees.getLatitude();
+					longitude = e1.lieux[0].coordonees.getLongitude();
+					affichePlusProches(latitude, longitude, sender,channel);
+				}
+			}
+
+		}else {
+			bot.sendMessage(sender, channel, message.commandCharacterAndKeyword()+help());
+		}
 	
+		
+	}
+
 }
 

+ 35 - 34
src/actions/Help.java

@@ -3,6 +3,7 @@ package actions;
 import java.util.ArrayList;
 import java.util.List;
 
+import data.Message;
 import main.Bot;
 
 public class Help extends Action {
@@ -15,23 +16,42 @@ public class Help extends Action {
 		this.keyWords = kw;
 	}
 
+
+	/**
+	 * 
+	 * @param l liste des actions possibles
+	 * @param sender personne ayant envoyé le message de demande
+	 * @param channel channel dans lequel la demande à été envoyé
+	 */
+	private void afficheListeCommandes(List<Action> l, String sender, String channel) {
+		String listeCommandes="Voici la liste des commandes: ";
+		for(Action a : l) {
+			listeCommandes += CARACTERE_COMMANDE+a.keyWords.get(0)+" ";
+		}
+		bot.sendMessage(sender,channel, listeCommandes);
+	}
+
+
+	@Override
+	public String help() {
+		return "Utilisez "+CARACTERE_COMMANDE+"help <commande> Pour avoir les informations sur une commande.";
+	}
+
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
+	public void react(String channel, String sender, String login, String hostname, Message message) {
 		List<Action> l = Action.getAllActions((Bot) bot);
-			boolean hasreacted = false;
-			String commandeSansEspaces = message.replaceAll("\\s", "").substring(1); // On enleve les espaces et le +
-			if(commandeSansEspaces.toLowerCase().equals("help")) {
-				bot.sendMessage(sender,channel, help());
-				afficheListeCommandes(l, sender, channel);
-				hasreacted = true;
-			}else {
-				String commande = message.substring(message.indexOf(' ')+1);
-				if(commande.indexOf(' ') != -1) {
-					commande = commande.substring(0,commande.indexOf(' '));
-				}
-				commande = commande.replace("+", "");
+		boolean hasreacted = false;
+		if(message.hasNoParameters()) {
+			bot.sendMessage(sender,channel, help());
+			afficheListeCommandes(l, sender, channel);
+			hasreacted = true;
+		}else {
+			int nbParameters = message.parameterSize();
+			for(int i=0; i<nbParameters; ++i) {
+				String commande = message.getElementAsString(i);
+				commande = commande.replaceAll(""+Action.CARACTERE_COMMANDE, "");
 				for(Action a : l) {
-					if(a.keyWords.contains(commande) && hasreacted == false) {
+					if(a.keyWords.contains(commande)) {
 						String msg = "";
 						for(String s : a.keyWords) {
 							msg+=Action.CARACTERE_COMMANDE+s+" ";
@@ -42,32 +62,13 @@ public class Help extends Action {
 					}
 				}
 			}
-			
+
 			// Si il n'as pas encore réagi
 			if(!hasreacted) {
 				bot.sendMessage(sender,channel, "Commande inconnue.");
 				afficheListeCommandes(l, sender, channel);
 			}
 
-	}
-	
-	/**
-	 * 
-	 * @param l liste des actions possibles
-	 * @param sender personne ayant envoyé le message de demande
-	 * @param channel channel dans lequel la demande à été envoyé
-	 */
-	private void afficheListeCommandes(List<Action> l, String sender, String channel) {
-		String listeCommandes="Voici la liste des commandes: ";
-		for(Action a : l) {
-			listeCommandes += CARACTERE_COMMANDE+a.keyWords.get(0)+" ";
 		}
-		bot.sendMessage(sender,channel, listeCommandes);
-	}
-
-	
-	@Override
-	public String help() {
-		return "Utilisez "+CARACTERE_COMMANDE+"help <commande> Pour avoir les informations sur une commande.";
 	}
 }

+ 30 - 34
src/actions/ID.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import data.ISP;
+import data.Message;
 import main.Bot;
 import main.Cache;
 import verif_saisie.EntierPositifNonVide;
@@ -14,8 +15,6 @@ import verif_saisie.EntierPositifNonVide;
  */
 public class ID extends Action {
 
-	
-
 	public ID(Bot b) {
 		super(b);
 		List<String> keywords = new ArrayList<>();
@@ -23,38 +22,6 @@ public class ID extends Action {
 		this.keyWords=keywords;
 	}
 
-	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
-		Cache c = Cache.getInstance();
-		String idString=null;
-		try {
-		idString=message.substring(message.indexOf(' ')+1);
-		}catch(IndexOutOfBoundsException ioe) {
-			erreur(channel,sender,"Erreur de syntaxe: vous devez specifier un ID ou un nom");
-		}
-		if(EntierPositifNonVide.verifie(idString)) {
-			int id = Integer.parseInt(idString);
-			ISP fai = c.getISPWithID(id);
-			if(fai!=null) {
-			bot.sendMessage(sender, "Le FAI "+id+" est: "+fai.getBetterName());
-			
-			}else {
-				erreur(sender,sender,idString+" est un id null");
-			}
-		}else {
-			ISP fai = c.getISPWithName(idString);
-			if(fai!=null) {
-				bot.sendMessage(sender,channel, "Le FAI "+fai.getBetterName()+" a pour ID: "+fai.getId());
-				bot.sendMessage(sender,channel, "L'url dans db est https://db.ffdn.org/api/v1/isp/"+fai.getId()+"/");
-			}else {
-				erreur(sender,channel,idString+" ne correspond a aucun FAI");
-			}
-			
-		}
-		
-
-	}
-	
 	private void erreur(String sender,String channel, String s) {
 		bot.sendMessage(sender,channel, sender+": "+s);
 	}
@@ -64,4 +31,33 @@ public class ID extends Action {
 		return " Suivi du nom d'un FAI ou du numero d'un FAI. Renvoie l'Opposé de l'information donnée en paramètre. Exemple: \"+id 2\"   renvoie \"Ilico\"";
 	}
 
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
+		if(message.hasNoParameters()) {
+			erreur(sender,channel,"Erreur de syntaxe: vous devez specifier un ID ou un nom");
+		}else {
+			Cache c = Cache.getInstance();
+			String idString=message.getAllParametersAsOneString();
+			if(EntierPositifNonVide.verifie(idString)) {
+				int id = Integer.parseInt(idString);
+				ISP fai = c.getISPWithID(id);
+				if(fai!=null) {
+					bot.sendMessage(sender, "Le FAI "+id+" est: "+fai.getBetterName());
+				}else {
+					erreur(sender,sender,idString+" est un id null");
+				}
+			}else {
+				ISP fai = c.getISPWithName(idString);
+				if(fai!=null) {
+					bot.sendMessage(sender,channel, "Le FAI "+fai.getBetterName()+" a pour ID: "+fai.getId());
+					bot.sendMessage(sender,channel, "L'url dans db est https://db.ffdn.org/api/v1/isp/"+fai.getId()+"/");
+				}else {
+					erreur(sender,channel,idString+" ne correspond a aucun FAI");
+				}
+
+			}
+
+		}
+	}
+
 }

+ 25 - 23
src/actions/Info.java

@@ -6,6 +6,7 @@ import java.util.List;
 import data.CoveredAreas;
 import data.ISP;
 import data.ISPDAO;
+import data.Message;
 import main.Bot;
 import main.Cache;
 import verif_saisie.EntierPositifNonVide;
@@ -26,23 +27,23 @@ public class Info extends Action {
 	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
-		String messageSansEspace = message.toLowerCase().replaceAll("\\s", "");
-		if(messageSansEspace.equals(CARACTERE_COMMANDE+keyWords.get(0))) {
-			bot.sendMessage(channel,messageSansEspace+" doit être suivi d'une chaine de caractère ou d'un numero");
+	public String help() {
+		return " suivi du nom d'un FAI ou de son numero. Dans le cas d'un nom, il va le chercher dans le Cache. Dans le cas d'un numéro, il fait la requète directement dans db.ffdn.org. Exemples: \"+info 2\" ou \"+info fdn\". Pour les infos sur la fédé: \"+info ffdn\"";
+	}
 
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
+		
+		if(message.hasNoParameters()) {
+			bot.sendMessage(channel,message.commandCharacterAndKeyword()+" doit être suivi d'une chaine de caractère ou d'un numero");
 		}else {
-
-
-			String s = message.substring(message.indexOf(' ')+1);
+			String s = message.getAllParametersAsOneString();
 			ISPDAO idao = ISPDAO.getInstance();
 			Bot ib = bot;
 
+			if(!EntierPositifNonVide.verifie(s)) {			// Un mot après commande
 
-			if(!EntierPositifNonVide.verifie(s)) {			// Un mot après +info
-
-
-				if(s.equalsIgnoreCase("all") && INFO_ALL) {	          			  // +info all
+				if(s.equalsIgnoreCase("all") && INFO_ALL) {	          			  // info all
 					Cache c = Cache.getInstance();
 					ib.sendMessages(sender,channel, c.toStringIRC());
 					for(ISP i : c.getListe()) {
@@ -51,7 +52,7 @@ public class Info extends Action {
 						}
 					}
 
-				}else if(s.equalsIgnoreCase("ffdn")) {				//+info ffdn
+				}else if(s.equalsIgnoreCase("ffdn")) {				//info ffdn
 					Cache c = Cache.getInstance();
 					ib.sendMessages(sender, channel, c.toStringIRC());
 
@@ -81,20 +82,21 @@ public class Info extends Action {
 				}
 
 			}else {											// Un nombre après +info
-
-				int  id = Integer.parseInt(message.substring(message.indexOf(' ')+1));
-				List<String> strings = idao.getISP(id).toStringIRC();
-				for(String response : strings) {
-					bot.sendMessage(sender, channel, response);
+				int nbParameters = message.parameterSize();
+				for(int i=0; i<nbParameters;i++) {
+					try {
+					int  id = message.getElementAsInt(i);
+					List<String> strings = idao.getISP(id).toStringIRC();
+						for(String response : strings) {
+							bot.sendMessage(sender, channel, response);
+						}
+					}catch(NumberFormatException ne) {
+						bot.sendMessage(sender, channel, message.getElementAsString(i)+" n'est pas un nombre");
+					}
 				}
 			}
 		}
-
-	}
-
-	@Override
-	public String help() {
-		return " suivi du nom d'un FAI ou de son numero. Dans le cas d'un nom, il va le chercher dans le Cache. Dans le cas d'un numéro, il fait la requète directement dans db.ffdn.org. Exemples: \"+info 2\" ou \"+info fdn\". Pour les infos sur la fédé: \"+info ffdn\"";
+		
 	}
 
 }

+ 9 - 11
src/actions/Liste.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 import data.ISP;
 import data.ISPDAO;
+import data.Message;
 import main.AffichableSurIRC;
 import main.Bot;
 import main.Cache;
@@ -28,7 +29,12 @@ public class Liste extends Action {
 	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
+	public String help() {
+		return " Liste tous les FAI de la fédération. L'Ajout du parametre All affiche aussi ceux hors fédération.";
+	}
+
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
 		ISPDAO idao = ISPDAO.getInstance();
 		Cache c = Cache.getInstance();
 		List<ISP> listeFAI=null;
@@ -43,13 +49,11 @@ public class Liste extends Action {
 			}
 		}
 
-
-
 		List<String> messages = new LinkedList<>();
 		messages.add("Les FAI surveillés par mes petits yeux mignons de bot sont:");
 		String s="";
 
-		if(allAllowed && message.indexOf(' ')!=-1 && message.substring(message.indexOf(" ")+1).equalsIgnoreCase("all")) {
+		if(allAllowed && message.parametersContains("all")) {
 			messages.add("=== Hors fédé: ===");
 			for(ISP isp: listeFAI) {
 				if(!isp.isFFDNMember()) {
@@ -66,9 +70,7 @@ public class Liste extends Action {
 		messages.add("=== Dans la fédé: ===");
 		for(ISP isp: listeFAI ) {
 			if(isp.isFFDNMember()) {
-
 				s+= isp.getBetterName();
-
 				if(s.length()>=AffichableSurIRC.MAX_CHARACTERS) {
 					messages.add(s);
 					s="";
@@ -79,11 +81,7 @@ public class Liste extends Action {
 		}
 		messages.add(s);
 		bot.sendMessages(sender,channel, messages);
-	}
-
-	@Override
-	public String help() {
-		return " Liste tous les FAI de la fédération. L'Ajout du parametre All affiche aussi ceux hors fédération.";
+		
 	}
 
 }

+ 9 - 8
src/actions/RP.java

@@ -9,6 +9,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import data.Message;
 import main.Bot;
 import main.Main;
 import main.PropertiesSetter;
@@ -69,7 +70,12 @@ public class RP extends Action {
 	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
+	public String help() {
+		return "Concatène l'URL indiquée dans un fichier pour les revue de presse";
+	}
+
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
 		Date now = new Date();
 		PrintWriter writer = null;
 		try {
@@ -81,15 +87,10 @@ public class RP extends Action {
 		} catch (UnsupportedEncodingException e) {
 			e.printStackTrace();
 		}
-		writer.println(Main.DATE_FORMAT_OUT.format(now)+" "+message.substring(message.indexOf(" "))+"\n");
+		writer.println(Main.DATE_FORMAT_OUT.format(now)+": "+message.getAllParametersAsOneString());
 		bot.sendMessage(sender, channel, "Ajout a la RP réussi!");
 		writer.close();
-	}
-	
-
-	@Override
-	public String help() {
-		return "Concatène l'URL indiquée dans un fichier pour les revue de presse";
+		
 	}
 
 }

+ 24 - 16
src/actions/RSS.java

@@ -3,7 +3,9 @@ package actions;
 import java.util.ArrayList;
 import java.util.List;
 
+import data.Message;
 import main.Bot;
+import rss.RssData;
 import rss.RssDataRemainder;
 
 /**
@@ -24,27 +26,33 @@ public class RSS extends Action {
 	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
+	public String help() {
+		return " Permet l'affichage des article RSS. Si vous ajoutez un nombre, affiche l'article du numero correspondant.";
+	}
+
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
 		RssDataRemainder remainder = bot.getRssdata();
-		if(message.indexOf(' ')==-1 || message.substring(message.indexOf(' ')).replaceAll(" ", "").equals("")) {
+		if(message.hasNoParameters()) {
 			bot.sendMessages(sender, channel, remainder.toStringIRC());
-		}else {
-			String contenu = message.substring(message.indexOf(' ')+1);
-			try {
-				int id = Integer.parseInt(contenu);
-				if(id<0 || id>=remainder.getCompletion()) {
-					throw new IllegalArgumentException();
+		}
+		int nbParams = message.parameterSize();
+		try {
+			for(int i = 0; i<nbParams;++i) {
+				int id = message.getElementAsInt(i);
+				RssData data = remainder.getDataWithId(id);
+				if(data != null) {
+					bot.sendMessages(sender, channel, data);
+				}else {
+					bot.sendMessage(sender, channel, "erreur: le nombre "+id+" n'est pas correct, ce dernier doit être entre 0 et "+(remainder.getCompletion()-1));
+				}
+				if(i!=nbParams-1) {
+					bot.sendMessage(sender, channel, "-------");
 				}
-				bot.sendMessages(sender, channel, remainder.getDataWithId(id));
-			}catch ( NullPointerException | IllegalArgumentException e) {
-				bot.sendMessage(sender, channel, "erreur: Vous devez utiliser un nombre, et ce dernier doit être entre 0 et "+(remainder.getCompletion()-1));
 			}
+		}catch (NumberFormatException e) {
+			bot.sendMessage(sender, channel, "erreur: Vous devez utiliser des entiers en paramètres, et ces derniers doivent être entre 0 et "+(remainder.getCompletion()-1));
 		}
 	}
 
-	@Override
-	public String help() {
-		return " Permet l'affichage des article RSS. Si vous ajoutez un nombre, affiche l'article du numero correspondant.";
-	}
-
 }

+ 12 - 11
src/actions/Reload.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import data.Message;
 import main.Bot;
 import main.Cache;
 
@@ -20,9 +21,19 @@ public class Reload extends Action {
 		ar.add("reload");
 		this.keyWords = ar;
 	}
+	
+	private boolean reload() {
+		Cache c = Cache.getInstance();
+		return c.reload();
+	}
+
+	@Override
+	public String help() {
+		return " Met à jour le cache";
+	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
+	public void react(String channel, String sender, String login, String hostname, Message message) {
 		Date now = new Date();
 		Date lastCU = Cache.getInstance().getLastCacheUpdate();
 		if(lastCU.getTime() < now.getTime()-Cache.getTIME_BETWEEN_RELOADS() ) {		// Si la dernière MAJ date de + de 5 minutes
@@ -38,15 +49,5 @@ public class Reload extends Action {
 		}
 		
 	}
-	
-	private boolean reload() {
-		Cache c = Cache.getInstance();
-		return c.reload();
-	}
-
-	@Override
-	public String help() {
-		return " Met à jour le cache";
-	}
 
 }

+ 9 - 5
src/actions/Source.java

@@ -3,6 +3,7 @@ package actions;
 import java.util.ArrayList;
 import java.util.List;
 
+import data.Message;
 import main.Bot;
 
 /**
@@ -22,15 +23,18 @@ public class Source extends Action {
 	}
 
 	@Override
-	public void react(String channel, String sender, String login, String hostname, String message) {
-		bot.sendMessage(sender, channel, sender+": mes sources sont disponibles ici: https://code.ffdn.org/marmat8951/bot-irc2");
-	}
-
-	@Override
 	public String help() {
 		return " Renvoie une URI où on peut trouver les sources";
 	}
 
+	@Override
+	public void react(String channel, String sender, String login, String hostname, Message message) {
+		react(channel, sender);
+	}
+	
+	private void react(String channel, String sender) {
+		bot.sendMessage(sender, channel, sender+": mes sources sont disponibles ici: https://code.ffdn.org/marmat8951/bot-irc2");
+	}
 }
 
 

+ 36 - 2
src/data/Message.java

@@ -3,6 +3,11 @@ package data;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * This class main goal is to create an easysly readable command so we can use it to implement actions
+ * @author marmat
+ *
+ */
 public class Message {
 	private final char c;
 	private final String commande;
@@ -38,10 +43,14 @@ public class Message {
 		return Integer.parseInt(get(id));
 	}
 	public double getElementAsDouble(int id) throws NumberFormatException  {
-		return Double.parseDouble(get(id));
+		String s = get(id);
+		s=s.replace(',', '.');
+		return Double.parseDouble(s);
 	}
 	public float getElementAsFloat(int id) throws NumberFormatException  {
-		return Float.parseFloat(get(id));
+		String s = get(id);
+		s=s.replace(',', '.');
+		return Float.parseFloat(s);
 	}
 	public String getElementAsString(int id) throws NumberFormatException  {
 		return get(id);
@@ -66,6 +75,10 @@ public class Message {
 		return commande;
 	}
 	
+	/**
+	 * Converti tous les paramètres en une chaine de caractères
+	 * @return Une String correspondant à tous les paramètres séparés par des espaces
+	 */
 	public String getAllParametersAsOneString() {
 		int size = parameterSize();
 		String res = "";
@@ -77,6 +90,23 @@ public class Message {
 		}
 		return res;
 	}
+	/**
+	 * verifie si un paramètre est égal à la chaine correspondante, en ignorant la case.
+	 * @param s chaine a verifier
+	 * @return true si la chaine correspond a un paramètre, false sinon
+	 */
+	public boolean parametersContains(String s) {
+		for(String st : parameters) {
+			if(st.equalsIgnoreCase(s)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public boolean hasNoParameters() {
+		return this.parameterSize() == 0;
+	}
 
 	@Override
 	public String toString() {
@@ -90,4 +120,8 @@ public class Message {
 		res+= " ]";
 		return res;
 	}
+	
+	public String commandCharacterAndKeyword() {
+		return c+commande;
+	}
 }

+ 4 - 5
src/main/Bot.java

@@ -62,8 +62,7 @@ public class Bot extends PircBot {
 			try {
 				this.reconnect();
 			}catch (UnknownHostException e) {
-				
-			
+				e.printStackTrace();
 			} 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();
@@ -92,8 +91,8 @@ public class Bot extends PircBot {
 		Message m = new Message(message);
 		System.out.println(m.toString());
 		for(Action a:actions){
-			if(a.hasToReact(message)) {
-				a.react(channel, sender, login, hostname, message);
+			if(a.hasToReact(m)) {
+				a.react(channel, sender, login, hostname, m);
 			}
 		}
 		//easter Eggs
@@ -103,7 +102,7 @@ public class Bot extends PircBot {
 		}
 		
 		if(message.toLowerCase().contains("mousse au chocolat")) {
-			sendMessage(channel, "J'adore la mousse au chocolat de Benjamin B.");
+			sendMessage(channel, "J'adore la mousse au chocolat de Benjamin-");
 		}
 		for(Comportement c : comportements) {
 			if(c.hastoreact(message)) {