dialog loganalyzer { title "Channel Log Analyzer" size -1 -1 386 286 option dbu box "Hostmasks : hold CTRL to select many and SHIFT to select list", 4, 4 2 207 279 list 1, 9 11 197 264, size extsel box "Channel Log Loading and Saving", 100, 216 2 166 86 button "Load Log from File", 110, 222 12 75 12 button "Load Log from Clipboard", 120, 301 12 75 12 button "Load Log from Buffer", 130, 261 26 75 12 box "Select Channel to Load Buffer from", 150, 230 40 137 42 list 160, 234 48 129 30, size box "Filters - Applied to nick!ident@host", 200, 216 91 166 68 check "Joins", 210, 256 101 26 10 check "Parts", 220, 285 101 26 10 check "Quits", 230, 313 101 26 10 radio "/Regular\sExpression/", 240, 239 114 63 10 radio "*Wild*card* Text", 245, 311 114 60 10 edit "", 250, 222 125 154 10 button "Undo all Filters", 260, 222 140 75 12 button "Apply Filters", 270, 301 140 75 12 box "Mass Actions to Perform on Selected Masks", 300, 216 163 166 118 button "Remove from List", 305, 222 174 75 12 button "Save to File", 310, 301 174 75 12 button "Shitlist", 315, 222 188 75 12 button "Add Level", 320, 301 188 75 12 button "Kill", 325, 222 202 75 12 button "G-Line", 330, 301 202 75 12 button "Ban", 335, 222 216 75 12 button "X-Ban", 340, 301 216 75 12 box "Select Channel to Ban / X-Ban On", 350, 231 232 137 42 list 360, 235 240 129 30, size } alias loganalyzer { dialog -md loganalyzer loganalyzer didtok loganalyzer 160 44 $la.allchans didtok loganalyzer 360 44 $la.allchans } alias la.allchans { var %allchans = $null, %a = 1 while (%a <= $chan(0)) { var %allchans = $addtok(%allchans,$chan(%a),44) inc %a 1 } return %allchans } alias la.unfiltered { return loganalyzer\unfiltered.txt } on 1:dialog:loganalyzer:sclick:110:{ ; load log from file var %x, %y, %z, %f, %o did -r loganalyzer 1 %f = $qt($sfile(logs\,Select Log File)) if (!$isdir(loganalyzer)) { mkdir loganalyzer } if (!$isdir(loganalyzer\save)) { mkdir loganalyzer\save } if ($isfile($la.unfiltered)) { remove $la.unfiltered } if (%f) { %x = 1 %z = $lines(%f) while (%x <= %z) { %y = $strip($read(%f,%x)) if ($regex(%y,/\s@?\+?(?!\d)([-A-}\d]+).*?(~?(?1))[\s*!]*@([\w-.:]+).*([Qq]uit|[Pp]art|[Jj]oin|[Ll]eft)/)) { %o = $upper($replace($regml(4),left,part)) : $regml(1) ! $regml(2) @ $regml(3) did -a loganalyzer 1 %o write $la.unfiltered %o } inc %x 1 } } } on 1:dialog:loganalyzer:sclick:120:{ ; load log from clipboard var %x, %y, %z, %o did -r loganalyzer 1 if (!$isdir(loganalyzer)) { mkdir loganalyzer } if (!$isdir(loganalyzer\save)) { mkdir loganalyzer\save } if ($isfile($la.unfiltered)) { remove $la.unfiltered } if ($cb(1)) { %x = 1 %z = $cb(0) while (%x <= %z) { %y = $strip($cb(%x)) ;aline -p @test %y if ($regex(%y,/\s@?\+?(?!\d)([-A-}\d]+).*?(~?(?1))[\s*!]*@([\w-.:]+).*([Qq]uit|[Pp]art|[Jj]oin|[Ll]eft)/)) { %o = $upper($replace($regml(4),left,part)) : $regml(1) ! $regml(2) @ $regml(3) did -a loganalyzer 1 %o write $la.unfiltered %o } inc %x 1 } did -c loganalyzer 210,220,230 did -u loganalyzer 240,245 did -r loganalyzer 250 } } on 1:dialog:loganalyzer:sclick:130:{ ; load log from channel buffer var %x, %y, %z, %o, %c did -r loganalyzer 1 %c = $did(loganalyzer,160).seltext if (!$isdir(loganalyzer)) { mkdir loganalyzer } if (!$isdir(loganalyzer\save)) { mkdir loganalyzer\save } if ($isfile($la.unfiltered)) { remove $la.unfiltered } if (%c) { %x = 1 %z = $line(%c,0) while (%x <= %z) { %y = $strip($line(%c,%x)) ;aline -p @test %y if ($regex(%y,/\s@?\+?(?!\d)([-A-}\d]+).*?(~?(?1))[\s*!]*@([\w-.:]+).*([Qq]uit|[Pp]art|[Jj]oin|[Ll]eft)/)) { %o = $upper($replace($regml(4),left,part)) : $regml(1) ! $regml(2) @ $regml(3) did -a loganalyzer 1 %o write $la.unfiltered %o } inc %x 1 } did -c loganalyzer 210,220,230 did -u loganalyzer 240,245 did -r loganalyzer 250 } } on 1:dialog:loganalyzer:sclick:260:{ ; undo filters var %loop = 1, %endloop = $lines($la.unfiltered) did -r loganalyzer 1 while (%loop <= %endloop) { did -a loganalyzer 1 $read($la.unfiltered,%loop) inc %loop 1 } did -c loganalyzer 210,220,230 did -u loganalyzer 240,245 did -r loganalyzer 250 } on 1:dialog:loganalyzer:sclick:270:{ ; apply filters var %loop = 1, %endloop = $did(loganalyzer,1).lines var %line, %regex, %mask var %j = $did(loganalyzer,210).state var %p = $did(loganalyzer,220).state var %q = $did(loganalyzer,230).state var %jpq.regex = /^ $+ $iif(%j,JOIN) $+ $iif(%j && (%p || %q),$chr(124)) $+ $iif(%p,PART) $+ $iif(%p && %q,$chr(124)) $+ $iif(%q,QUIT) $+ / var %rf = $did(loganalyzer,240).state var %wf = $did(loganalyzer,245).state var %ef = $did(loganalyzer,250) if ((%rf || %wf) && %ef) { var %ft = 1 } while (%loop <= %endloop) { :filterloop if (%loop > %endloop) { halt } %line = $did(loganalyzer,1,%loop) %regex = $regex(%line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %mask = $+($regml(1),!,$regml(2),@,$regml(3)) if (!$regex(%line,%jpq.regex)) { did -d loganalyzer 1 %loop dec %endloop 1 goto filterloop } elseif (%ft) { if (%rf) { if (!$regex(%mask,%ef)) { did -d loganalyzer 1 %loop dec %endloop 1 goto filterloop } } elseif (%wf) { if (%ef !iswm %mask) { did -d loganalyzer 1 %loop dec %endloop 1 goto filterloop } } } inc %loop 1 } } on 1:dialog:loganalyzer:sclick:305:{ ; remove masks while ($did(loganalyzer,1,0).sel) { did -d loganalyzer 1 $did(loganalyzer,1,1).sel } } on 1:dialog:loganalyzer:sclick:310:{ ; save to file var %la.sel = $did(loganalyzer,1,0).sel var %la.file = $sfile(loganalyzer\save\,Save Log as.....) var %la.line.num, %la.line var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) echo write $qt(%la.file) %la.line inc %x 1 } } on 1:dialog:loganalyzer:sclick:315:{ ; shitlist var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.fullmask, %la.mask, %la.regex var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.fullmask = $+($regml(1),!,$regml(2),@,$regml(3)) %la.mask = $mask(%la.fullmask,2) echo -a auser shitlist %la.mask inc %x 1 } } on 1:dialog:loganalyzer:sclick:320:{ ; add level var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.fullmask, %la.mask, %la.regex var %la.level = $?="Enter Level to Add" if (!%la.level) { halt } var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.fullmask = $+($regml(1),!,$regml(2),@,$regml(3)) %la.mask = $mask(%la.fullmask,2) echo -a auser %la.level %la.mask inc %x 1 } } on 1:dialog:loganalyzer:sclick:325:{ ; kill var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.nick, %la.regex var %la.reason = $?="Enter Kill Reason/Message" if (!%la.reason) { halt } var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.nick = $regml(1) echo -a kill %la.nick %la.reason inc %x 1 } } on 1:dialog:loganalyzer:sclick:330:{ ; gline var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.mask, %la.fullmask, %la.regex var %la.duration = $?="Enter G-Line duration in Seconds" var %la.reason = $?="Enter G-Line Reason" if ((!%la.duration) || (!%la.reason)) { halt } var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.fullmask = $+($regml(1),!,$regml(2),@,$regml(3)) %la.mask = $right($mask(%la.fullmask,2),-2) echo -a os gline %la.mask %la.duration %la.reason inc %x 1 } } on 1:dialog:loganalyzer:sclick:335:{ ; ban if ($did(loganalyzer,360).seltext) { var %la.chan = $v1 var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.fullmask, %la.mask, %la.regex var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.fullmask = $+($regml(1),!,$regml(2),@,$regml(3)) %la.mask = $mask(%la.fullmask,2) echo -a mb %la.chan %la.mask inc %x 1 } } } on 1:dialog:loganalyzer:sclick:340:{ ; x-ban if ($did(loganalyzer,360).seltext) { var %la.chan = $v1 var %la.sel = $did(loganalyzer,1,0).sel var %la.line.num, %la.line, %la.fullmask, %la.mask, %la.regex var %x = 1 while (%x <= %la.sel) { %la.line.num = $did(loganalyzer,1,%x).sel %la.line = $did(loganalyzer,1,%la.line.num) %la.regex = $regex(%la.line,/^[A-Z]{4}\s:\s(\S+)\s!\s(\S+)\s@\s(.+)$/) %la.fullmask = $+($regml(1),!,$regml(2),@,$regml(3)) %la.mask = $mask(%la.fullmask,2) echo -a .timer 1 $calc(%x * 5) msg x ban %la.chan %la.mask 2400 75 LogAnalyzer Mass-X-Ban inc %x 1 } } }