#!/usr/bin/perl # Minecraft Logfile Audit # by m1ndgames for # Hexagon.de.tf ############################# use warnings; use strict; use FindBin '$Bin'; my @staff = ("m1ndgames", "Hexzel"); my $badwordsfile = "$Bin/badwords.db"; my $logfilepath = "/minecraft/bin/logs/"; my @logfiles = glob("$logfilepath*.log"); open( my $fh, '<', $badwordsfile ) or die("Error open $badwordsfile ($!)"); my @badwords = <$fh>; close($fh); chomp(@badwords); my @signreport; my @griefreport; for my $file (@logfiles) { open( my $fh, '<', $file ) or die("Error open $file ($!)"); my @logs = <$fh>; close($fh); foreach ( @logs ) { my $line = $_; if ( $line =~ /Line/ && grep { $line =~ /$_/ } @badwords ) { my $badline = $line; if ($badline =~ /(.+) \[INFO\] Line . : (.+)/) { my $date = $1; my $sign = $2; foreach ( @logs ) { if ($_ =~ /$date \[INFO\] Sign placed by (.+) at (.+)/) { push(@signreport,"$date - $1 placed Sign \"$sign\" at location: $2\n"); } } } } elsif ($line =~ /(.+) \[INFO\] Antigrief incident coordinates : (.+)/) { my $date = $1; my $location = $2; foreach ( @logs ) { if ($_ =~ /$date \[INFO\] Antigrief alarm : (.+)/) { push(@griefreport,"$date - Grief Alarm: $1 - Coordinates: $location\n"); } } } } } foreach(@signreport) { my $line = $_; if (grep { $line =~ /$_/ } @staff ) { shift; } else { print $_; } } foreach(@griefreport) { my $line = $_; if (grep { $line =~ /$_/ } @staff ) { shift; } else { print $_; } }