slitaz-forge annotate irc/src/org/jibble/logbot/LogBot.java @ rev 313

check i18n: make {pot,msgfmt,clean}
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sun Jul 01 20:00:47 2012 +0000 (2012-07-01)
parents
children efd18dbda796
rev   line source
slaxemulator@91 1 package org.jibble.logbot;
slaxemulator@91 2
slaxemulator@91 3 import java.util.*;
slaxemulator@91 4 import java.util.regex.*;
slaxemulator@91 5 import java.io.*;
slaxemulator@91 6 import java.text.SimpleDateFormat;
slaxemulator@91 7 import org.jibble.pircbot.*;
slaxemulator@91 8
slaxemulator@91 9 public class LogBot extends PircBot {
slaxemulator@91 10
slaxemulator@91 11 private static final Pattern urlPattern = Pattern.compile("(?i:\\b((http|https|ftp|irc)://[^\\s]+))");
slaxemulator@91 12 private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
slaxemulator@91 13 private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
slaxemulator@91 14
slaxemulator@91 15 public static final String GREEN = "irc-green";
slaxemulator@91 16 public static final String WHITE = "irc-white";
slaxemulator@91 17 public static final String ORANGE = "irc-orange";
slaxemulator@91 18 public static final String YELLOW = "irc-yellow";
slaxemulator@91 19 public static final String GREY = "irc-grey";
slaxemulator@91 20 public static final String RED = "irc-red";
slaxemulator@91 21
slaxemulator@91 22 public LogBot(String name, File outDir, String joinMessage) {
slaxemulator@91 23 setName(name);
slaxemulator@91 24 setVerbose(true);
slaxemulator@91 25 this.outDir = outDir;
slaxemulator@91 26 this.joinMessage = joinMessage;
slaxemulator@91 27 }
slaxemulator@91 28
slaxemulator@91 29 public void append(String color, String line) {
slaxemulator@91 30 line = Colors.removeFormattingAndColors(line);
slaxemulator@91 31
slaxemulator@91 32 line = line.replaceAll("&", "&amp;");
slaxemulator@91 33 line = line.replaceAll("<", "&lt;");
slaxemulator@91 34 line = line.replaceAll(">", "&gt;");
slaxemulator@91 35
slaxemulator@91 36 Matcher matcher = urlPattern.matcher(line);
slaxemulator@91 37 line = matcher.replaceAll("<a href=\"$1\">$1</a>");
slaxemulator@91 38
slaxemulator@91 39
slaxemulator@91 40 try {
slaxemulator@91 41 Date now = new Date();
slaxemulator@91 42 String date = DATE_FORMAT.format(now);
slaxemulator@91 43 String time = TIME_FORMAT.format(now);
slaxemulator@91 44 File file = new File(outDir, date + ".log");
slaxemulator@91 45 BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
slaxemulator@91 46 String entry = "<span class=\"irc-date\">(" + time + ")</span> <span class=\"" + color + "\">" + line + "</span><br />";
slaxemulator@91 47 writer.write(entry);
slaxemulator@91 48 writer.newLine();
slaxemulator@91 49 writer.flush();
slaxemulator@91 50 writer.close();
slaxemulator@91 51 }
slaxemulator@91 52 catch (IOException e) {
slaxemulator@91 53 System.out.println("Could not write to log: " + e);
slaxemulator@91 54 }
slaxemulator@91 55 }
slaxemulator@91 56
slaxemulator@91 57 public void onAction(String sender, String login, String hostname, String target, String action) {
slaxemulator@91 58 append(YELLOW, "* " + sender + " " + action);
slaxemulator@91 59 }
slaxemulator@91 60
slaxemulator@91 61 public void onJoin(String channel, String sender, String login, String hostname) {
slaxemulator@91 62 append(GREEN, "*** " + sender + " (" + login + "@" + hostname + ") has joined " + channel);
slaxemulator@91 63 }
slaxemulator@91 64
slaxemulator@91 65 public void onMessage(String channel, String sender, String login, String hostname, String message) {
slaxemulator@91 66 append(WHITE, "[" + sender + "] " + message);
slaxemulator@91 67
slaxemulator@91 68 message = message.toLowerCase();
slaxemulator@91 69 if (message.startsWith(getNick().toLowerCase()) && message.indexOf("help") > 0) {
slaxemulator@91 70 sendMessage(channel, joinMessage);
slaxemulator@91 71 }
slaxemulator@91 72 }
slaxemulator@91 73
slaxemulator@91 74 public void onMode(String channel, String sourceNick, String sourceLogin, String sourceHostname, String mode) {
slaxemulator@91 75 append(ORANGE, "*** " + sourceNick + " sets mode " + mode);
slaxemulator@91 76 }
slaxemulator@91 77
slaxemulator@91 78 public void onNickChange(String oldNick, String login, String hostname, String newNick) {
slaxemulator@91 79 append(ORANGE, "*** " + oldNick + " is now known as " + newNick);
slaxemulator@91 80 }
slaxemulator@91 81
slaxemulator@91 82 public void onPart(String channel, String sender, String login, String hostname) {
slaxemulator@91 83 append(GREY, "*** " + sender + " (" + login + "@" + hostname + ") has left " + channel);
slaxemulator@91 84 }
slaxemulator@91 85
slaxemulator@91 86 public void onQuit(String sourceNick, String sourceLogin, String sourceHostname, String reason) {
slaxemulator@91 87 append(RED, "*** " + sourceNick + " (" + sourceLogin + "@" + sourceHostname + ") has quit (" + reason + ")");
slaxemulator@91 88 }
slaxemulator@91 89
slaxemulator@91 90 public void onTopic(String channel, String topic, String setBy, long date, boolean changed) {
slaxemulator@91 91 if (changed) {
slaxemulator@91 92 append(GREEN, "*** " + setBy + " changes topic to '" + topic + "'");
slaxemulator@91 93 }
slaxemulator@91 94 else {
slaxemulator@91 95 append(GREEN, "*** Topic is '" + topic + "'");
slaxemulator@91 96 append(GREEN, "*** Set by " + setBy + " on " + new Date(date));
slaxemulator@91 97 }
slaxemulator@91 98 }
slaxemulator@91 99
slaxemulator@91 100 public void onVersion(String sourceNick, String sourceLogin, String sourceHostname, String target) {
slaxemulator@91 101 }
slaxemulator@91 102
slaxemulator@91 103 public void onKick(String channel, String kickerNick, String kickerLogin, String kickerHostname, String recipientNick, String reason) {
slaxemulator@91 104 append(GREY, "*** " + recipientNick + " was kicked from " + channel + " by " + kickerNick);
slaxemulator@91 105 if (recipientNick.equalsIgnoreCase(getNick())) {
slaxemulator@91 106 joinChannel(channel);
slaxemulator@91 107 }
slaxemulator@91 108 }
slaxemulator@91 109
slaxemulator@91 110 public void onDisconnect() {
slaxemulator@91 111 append(RED, "*** Disconnected.");
slaxemulator@91 112 while (!isConnected()) {
slaxemulator@91 113 try {
slaxemulator@91 114 reconnect();
slaxemulator@91 115 }
slaxemulator@91 116 catch (Exception e) {
slaxemulator@91 117 try {
slaxemulator@91 118 Thread.sleep(10000);
slaxemulator@91 119 }
slaxemulator@91 120 catch (Exception anye) {
slaxemulator@91 121 // Do nothing.
slaxemulator@91 122 }
slaxemulator@91 123 }
slaxemulator@91 124 }
slaxemulator@91 125 }
slaxemulator@91 126
slaxemulator@91 127 public static void copy(File source, File target) throws IOException {
slaxemulator@91 128 BufferedInputStream input = new BufferedInputStream(new FileInputStream(source));
slaxemulator@91 129 BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(target));
slaxemulator@91 130 int bytesRead = 0;
slaxemulator@91 131 byte[] buffer = new byte[1024];
slaxemulator@91 132 while ((bytesRead = input.read(buffer, 0, buffer.length)) != -1) {
slaxemulator@91 133 output.write(buffer, 0, bytesRead);
slaxemulator@91 134 }
slaxemulator@91 135 output.flush();
slaxemulator@91 136 output.close();
slaxemulator@91 137 input.close();
slaxemulator@91 138 }
slaxemulator@91 139
slaxemulator@91 140 private File outDir;
slaxemulator@91 141 private String joinMessage;
slaxemulator@91 142
slaxemulator@91 143 }