ソースを参照

* Support for muh2 logs (muh 2.2 and later) (thanks, Sebastian Erlhofer)

Morten Brix Pedersen 23 年 前
コミット
c064529f13
4 ファイル変更122 行追加0 行削除
  1. 1 0
      Makefile
  2. 1 0
      docs/Changelog
  3. 10 0
      docs/FORMATS
  4. 110 0
      modules/Pisg/Parser/Format/muh2.pm

+ 1 - 0
Makefile

@@ -71,6 +71,7 @@ FORMAT_MODULES = $(MODULESDIR)/Pisg/Parser/Format/axur.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/mIRC.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/mIRC6.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/muh.pm \
+		 $(MODULESDIR)/Pisg/Parser/Format/muh2.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/moobot.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/perlbot.pm \
 		 $(MODULESDIR)/Pisg/Parser/Format/pircbot.pm \

+ 1 - 0
docs/Changelog

@@ -1,6 +1,7 @@
 pisg (x.xx)
    * Make the HTML output XHTML compliant again (thanks, Stian Jordet)
    * Add a bullet conversion character to Common.pm (thanks, Stian Jordet)
+   * Support for muh2 logs (muh 2.2 and later) (thanks, Sebastian Erlhofer)
    * Add hebrew language translation (thanks, shimi)
    * Updated Icelandic translation (thanks, Einar Jonsson).
 

+ 10 - 0
docs/FORMATS

@@ -231,6 +231,16 @@ link to the logfile)
  Example:
         [Sat 16 Mar 21:24:09] <pete> hello everybody
 
+* muh2:
+  - muh is a bouncer from muh.sf.net
+  - muh2 is for the new version 2.2, see 'muh' for older versions.
+  - In order to use this, format must be set to 'muh2'.
+
+Example:
+   [11:23] <boitl> Hello world
+   [11:24] * carmen means that she is nice
+
+
 * Energymech:
   - An irc bot written in C which is currently beeing developed.
 

+ 110 - 0
modules/Pisg/Parser/Format/muh2.pm

@@ -0,0 +1,110 @@
+package Pisg::Parser::Format::muh2;
+
+# Documentation for the Pisg::Parser::Format modules is found in Template.pm
+# This Parser works with muh version muh-2.1 and above.
+# muh got a new log-format, so this is version 2
+# contact: boitl @ IRC, sebastian@mquant.de, 09/2003
+# note:
+# muh-2.1 is buggy in action-loggin. 
+# apply http://www.mquant.de/downloads/muh-actionpatch.diff
+
+
+use strict;
+$^W = 1;
+
+sub new
+{
+    my ($type, %args) = @_;
+    my $self = {
+        cfg => $args{cfg},
+        normalline => '^\[(\d+):\d+\S+ <([^>]+)> (.*)$',
+        actionline => '^\[(\d+):\d+\S+ \* (\S+) (.*)$',
+	thirdline  => '^\[(\d+):(\d+)\S+ \*{3} (.+)$'
+    };
+
+    bless($self, $type);
+    return $self;
+}
+
+sub normalline
+{
+    my ($self, $line, $lines) = @_;
+    my %hash;
+
+    if ($line =~ /$self->{normalline}/o) {
+
+        $hash{hour}   = $1;
+        $hash{nick}   = remove_prefix($2);
+        $hash{saying} = $3;
+
+        return \%hash;
+    } else {
+        return;
+    }
+}
+
+sub actionline
+{
+    my ($self, $line, $lines) = @_;
+    my %hash;
+
+    if ($line =~ /$self->{actionline}/o) {
+
+        $hash{hour}   = $1;
+        $hash{nick}   = remove_prefix($2);
+        $hash{saying} = $3;
+
+        return \%hash;
+    } else {
+        return;
+    }
+}
+
+sub thirdline
+{
+    my ($self, $line, $lines) = @_;
+    my %hash;
+
+    if ($line =~ /$self->{thirdline}/o) {
+
+        my @line = split(/\s/, $3);
+
+        $hash{hour} = $1;
+        $hash{min}  = $2;
+        $hash{nick} = remove_prefix($line[0]);
+
+        if ($#line >= 4 && ($line[1].$line[2]) eq 'waskicked') {
+            $hash{kicker} = $line[4];
+
+        } elsif ($#line >= 4 && ($line[1] eq 'changes')) {
+            $hash{newtopic} = join(' ', @line[4..$#line]);
+            $hash{newtopic} =~ s/^'//;
+            $hash{newtopic} =~ s/'$//;
+
+        } elsif ($#line >= 3 && ($line[1].$line[2]) eq 'setsmode') {
+            $hash{newmode} = $line[3];
+
+        } elsif ($#line >= 3 && ($line[2].$line[3]) eq 'hasjoined') {
+            $hash{newjoin} = $line[0];
+
+        } elsif ($#line >= 5 && ($line[2].$line[3]) eq 'nowknown') {
+            $hash{newnick} = $line[5];
+        }
+
+        return \%hash;
+
+    } else {
+        return;
+    }
+}
+
+sub remove_prefix
+{
+    my ($str) = @_;
+
+    $str =~ s/^[@%\+]//o;
+
+    return $str;
+}
+
+1;