# HG changeset patch # User defr # Date 1214774793 -7200 # Node ID 703c72bcc38ecb3cf55d7a06ea5e0e35c6ebf137 # Parent 8d3f8e4adba3f51b64360512510defb7ba556a28 Amellioration de la gestion des callbacks. Pour le moment, on les enregistrait globalement: si le bot était présent sur plusieurs canaux, il était tout à fait possible de lancer une commande sur un canal et d'écouter la réponse sur un autre, ce qui pouvait poser quelques problèmes. Rusard est changé pour s'adapter à cette nouvelle syntaxe, mais aussi pour pouvoir gérer un niveau passé en paramètre à la commande dd. diff -r 8d3f8e4adba3 -r 703c72bcc38e org/defr/bots/Bot.java --- a/org/defr/bots/Bot.java Sat May 19 23:35:46 2007 +0200 +++ b/org/defr/bots/Bot.java Sun Jun 29 23:26:33 2008 +0200 @@ -16,11 +16,11 @@ */ public class Bot extends PircBot { protected Configuration conf; - protected Map messageListeners; + protected Map> messageListeners; public Bot() { super(); - messageListeners = new HashMap(); + messageListeners = new HashMap>(); } /** @@ -41,14 +41,33 @@ } public void onMessage(String channel, String sender, String login, String host, String message) { - if(messageListeners.containsKey(message.toLowerCase())) { - messageListeners.get(message.toLowerCase()).go(sender, channel, message); - messageListeners.remove(message.toLowerCase()); + channel = channel.toLowerCase(); + if(messageListeners.containsKey(channel)) { + Map channelListeners = messageListeners.get(channel); + if(channelListeners.containsKey(message.toLowerCase())) { + channelListeners.get(message.toLowerCase()).go(sender, channel, message); + channelListeners.remove(message.toLowerCase()); + } } } - public void addMessageListener(String message, Callback callback) { - messageListeners.put(message.toLowerCase(), callback); + public void onPrivateMessage(String send, String login, String host, String message) { + String channel = send.toLowerCase(); + if(messageListeners.containsKey(channel)) { + Map channelListeners = messageListeners.get(channel); + if(channelListeners.containsKey(message.toLowerCase())) { + channelListeners.get(message.toLowerCase()).go(send, channel, message); + channelListeners.remove(message.toLowerCase()); + } + } + } + + public void addMessageListener(String where, String message, Callback callback) { + where = where.toLowerCase(); + if(messageListeners.get(where) == null) { + messageListeners.put(where, new HashMap()); + } + messageListeners.get(where).put(message.toLowerCase(), callback); } /** diff -r 8d3f8e4adba3 -r 703c72bcc38e org/defr/bots/Rusard.java --- a/org/defr/bots/Rusard.java Sat May 19 23:35:46 2007 +0200 +++ b/org/defr/bots/Rusard.java Sun Jun 29 23:26:33 2008 +0200 @@ -3,7 +3,6 @@ import java.util.Random; import java.util.Calendar; import java.util.Timer; -import java.util.TimerTask; import java.io.IOException; import java.text.DateFormat; import java.util.Locale; @@ -52,6 +51,7 @@ } public void onPrivateMessage(String send, String login, String host, String m) { + super.onPrivateMessage(send, login, host, m); commandParser(m, send, send); } @@ -68,7 +68,7 @@ public void run() { sendMessage(getTo(), "Lapin"); - addMessageListener("Bunny", new Callback() { + addMessageListener(getTo(), "Bunny", new Callback() { public void go(String sender, String replyTo, String message) { sendMessage(replyTo, "Premier : " + sender); } @@ -85,8 +85,10 @@ int v = random.nextInt(t) + 1; sendMessage(replyTo, "d" + t + " : " + v); } - else if(message.matches("dd\\d")) { - int t = Integer.parseInt(message.substring(2)); + else if(message.matches("dd\\d\\+\\d+")) { + String[] ar = message.substring(2).split("\\+"); + int t = Integer.parseInt(ar[0]); + int lvl = Integer.parseInt(ar[1]); int limite = 0, score = random.nextInt(100) + 1; switch(t) { case 0: @@ -107,6 +109,7 @@ default: limite = 98; } + limite = Math.max(0, limite - 5 * lvl); if(score > limite) { sendMessage(replyTo, "Réussite (" + score + "/" + limite + ")"); }