rendered paste body;================================================
; xSeen
; Version 3.7
; Written by: xDaeMoN
; Email: xdaemon@xdaemon.us
; 07.22.06
;
;================================================
;####################### EVENTS #######################
On *:START: {
if ( !$hget(xSeen) ) hmake xSeen 100
if ($isfile($_seen.log)) hload xSeen $_seen.log
unset %xseenflood*
}
on *:CONNECT: {
.enable #xSeen.load
.version
if ( !$ini($_seen.file,$network,0) ) seen.default $network
if ( $readini($_seen.file,settings,auto.delete) ) && ( !$timer(xSeen.autodelete) ) .timerxSeen.autodelete -o 0 $calc($readini($_seen.file,settings,auto.delete.every) * 3600) seen.delold ALL $readini($_seen.file,settings,auto.delete.old) 1
.timerxSeen.disable.load 1 5 .disable #xSeen.load
}
On *:EXIT: if ( $hget(xSeen) ) xseen.save
On *:DISCONNECT: if ( $hget(xSeen) ) xseen.save
on *:LOAD: {
if ( $version >= 6.16 ) xSeen.init
else {
echo -a 04» » Sorry, this addon requires mIRC 6.16. Please get the latest version from www.mirc.com
.unload -rs $+(",$script,")
}
}
on *:UNLOAD: {
unset %xseen*
.hfree xSeen
if ($isfile($_seen.file)) .remove $_seen.file
if ($isfile($_seen.log)) .remove $_seen.log
.timerxSeen* off
if ( $window(@seenfilter) ) window -c @seenfilter
echo -a 08,01 » »07,01 xSeen v $+ $seen.version Unloaded.
}
ON *:TEXT:*:#: {
if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) {
if ( $readini($_seen.file,settings,events.texts) ) xseen.add $+(seen:,$network,:,$address($nick,5)) text $ctime $chan
if ( !$istok($readini($_seen.file,$network,chans.notrigger),$chan,44) ) {
var %xt = $readini($_seen.file,$network,trigger), %xf = $seen.format($network,$chan)
if ($1 == $+(%xt,seen)) && ( $$2 ) {
floodcheck $network $wildsite
if ( $2 == $me ) %xf $seenmsg.me($nick)
elseif ( $2 == $nick ) %xf $seenmsg.self($nick)
elseif ($2 ison $chan) %xf $seenmsg.here($nick,$2)
else %xf $seenpar($nick,$+(seen:,$iif($readini($_seen.file,settings,multiserver),*,$network),:,$2),$+(nseen:,$network,:,$2,:,$nick) $nick $ctime $chan $address)
}
elseif ( $1 == $+(%xt,seenstats) ) {
floodcheck $network $wildsite
%xf $seen.stats($nick,$network)
}
}
}
}
ON ^*:OPEN:?:*: {
if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) && ( $readini($_seen.file,$network,private) ) {
if ( $readini($_seen.file,settings,events.querys) ) xseen.add $+(seen:,$network,:,$address($nick,5)) query $ctime
var %xt = $readini($_seen.file,$network,trigger), %xf = $seen.format($network)
if ( $1 == $+(%xt,seen) ) {
if ( $2 ) {
floodcheck $network $wildsite
if ( $2 == $me ) %xf $seenmsg.me($nick)
elseif ( $2 == $nick ) %xf $seenmsg.self($nick)
else %xf $seenpar($nick,$+(seen:,$network,:,$2),$+(nseen:,$network,:,$2,:,$nick) $nick $ctime private $address)
}
else %xf ** Syntax: $+(%xf,seen) <NICK>
halt
}
elseif ( $1 == $+(%xt,seenstats) ) {
floodcheck $network $wildsite
%xf $seen.stats($nick,$network)
halt
}
}
}
ON *:ACTION:*:#: if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) && ( $readini($_seen.file,settings,events.actions) ) xseen.add $+(seen:,$network,:,$address($nick,5)) act $ctime $chan
ON *:QUIT: if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) && ( $readini($_seen.file,settings,events.quits) ) xseen.add $+(seen:,$network,:,$address($nick,5)) quit $ctime $comchan($nick,1) $1-
on *:PART:#: if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) && ( $readini($_seen.file,settings,events.parts) ) xseen.add $+(seen:,$network,:,$address($nick,5)) part $ctime $chan $1-
on *:JOIN:#: {
if ( $nick == $me ) && ( $readini($_seen.file,settings,add.nicks.onjoin) ) {
.enable #xsWHO
who #
}
if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) {
if ( $readini($_seen.file,settings,events.joins) ) xseen.add $+(seen:,$network,:,$address($nick,5)) join $ctime $chan $1-
if ( !$istok($readini($_seen.file,$network,chans.nonotify),$chan,44) ) $+(.timerxSeennseen.,$cid,.,$chan) 1 2 nseen $+($network,:,$nick) $chan
}
}
ON *:NICK: {
if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) {
if ( $readini($_seen.file,settings,events.nickchange) ) xseen.add $+(seen:,$network,:,$nick,!,$address) nick $ctime $comchan($newnick,1) $newnick
var %c = 1, %d
while $comchan($newnick,%c) {
%d = $v1
if ( !$istok($readini($_seen.file,$network,chans.nonotify),%d,44) ) $+(.timerxSeennseen.,$cid,.,%d) 1 2 nseen $+($network,:,$newnick) %d
inc %c
}
}
}
ON *:KICK:#: {
if ( $readini($_seen.file,$network,status) ) && ( $readini($_seen.file,settings,status) ) && ( $readini($_seen.file,settings,events.kicks) ) {
xseen.add $+(seen:,$network,:,$address($nick,5)) kicking $ctime $chan $knick $1-
xseen.add $+(seen:,$network,:,$address($knick,5)) kick $ctime $chan $nick $1-
}
}
;####################### ALIASES #######################
alias -l xseen.add {
if ( $hfind(xSeen,$+($deltok($1,2,33),!*),1,w) ) {
if ( $v1 != $1 ) hdel xSeen $v1
}
hadd -m xSeen $1-
xseen.save
}
alias -l _writeini { writeini -n $_seen.file $1- }
alias -l nseen {
var %n3 = $1, %n = $hfind(xSeen,$+(nseen:,$1,:,*),0,w), %n2, %n4 = 1, %chan = $2, %t = 0
while %n {
%n2 = $hfind(xSeen,$+(nseen:,%n3,:,*),%n,w)
tokenize 32 $hget(xSeen,%n2)
inc %t
$+(.timerxSeennotify,.,$gettok(%n3,2,58),.,%t) 1 $calc(%t * 2) $nseen.format($network) $gettok(%n3,2,58) $seenmsg.nseen($1,$4,$3,$!seentime( $2 )) $5
hdel xSeen %n2
inc %n4
dec %n
}
}
alias -l seenpar {
if ( $count($2,*,?) ) {
if ( !$readini($_seen.file,settings,wildcards) ) return $seenmsg.nowildcards($1)
elseif ( !$count($gettok($2,3,58),*) ) return $seenparse2($1,$+($2,!*@*),$iif($3,$3-))
else return $seenparse2($1,$2,$iif($3,$3-))
}
if ( $len($gettok($2,3,58)) > $readini($_seen.file,$gettok($2,2,58),nicklen) ) return $seenmsg.longnick($1)
elseif ( $readini($_seen.file,settings,smart) ) return $seenparse3($1,$2,$3-)
else return $seenparse($1,$2,$3-)
}
alias -l seenparse {
;last data parsing
var %nick = $1
tokenize 32 $2-
var %y = $hfind(xSeen,$+($1,!*),1,w), %x = $hget(xSeen,%y), %n = $deltok($gettok(%y,3,58),2,33), %m = $gettok(%y,2,33), %sl = $iif(($gettok(%y,2,58) != $iif($dialog(xSeen),$did(xSeen,77),$network)),$gettok(%y,2,58))
if (!%x) return $seenmsg.notseen(%nick,$deltok($gettok($1,3,58),2,32))
if ( %n == $me ) return $seenmsg.me(%nick)
if ( %nick == $gettok($1,3,58) ) return $seenmsg.self(%nick)
if ( %n ison $gettok($2-,4,32) ) return $seenmsg.here(%nick,%n)
if ( $2 ) && ( $readini($_seen.file,$gettok(%y,2,58),notify) ) {
xseen.add $reptok($2-,$gettok($2,2,58),$gettok(%y,2,58),58) $+([,$gettok($2,2,58),])
}
tokenize 32 %x
if ($1 == text) return $seenmsg.text(%nick,%n ,%m,$3,$seentime($2),$seen.onchan(%n,$3)) $iif(%sl,$+([,%sl,]))
if ($1 == act) return $seenmsg.act(%nick,%n,%m,$3,$seentime($2),$seen.onchan(%n,$3)) $iif(%sl,$+([,%sl,]))
if ($1 == quit) return $seenmsg.quit(%nick,%n,%m,$3,$seentime($2),$+($chr(40),$4-,$chr(41))) $iif(%sl,$+([,%sl,]))
if ($1 == part) return $seenmsg.part(%nick,%n,%m,$3,$seentime($2),$+($chr(40),$4-,$chr(41))) $iif(%sl,$+([,%sl,]))
if ($1 == join) return $seenmsg.join(%nick,%n,%m,$3,$seentime($2),$seen.onchan(%n,$3)) $iif(%sl,$+([,%sl,]))
if ($1 == nick) return $seenmsg.nick(%nick,%n,%m,$3,$4,$seentime($2),$seen.onchan($4,$3)) $iif(%sl,$+([,%sl,]))
if ($1 == kicking) return $seenmsg.kicking(%nick,%n,%m,$4,$3,$seentime($2),$+($5-,.),$seen.onchan(%n,$3)) $iif(%sl,$+([,%sl,]))
if ($1 == kick) return $seenmsg.kick(%nick,%n,%m,$3,$4,$seentime($2),$5-) $iif(%sl,$+([,%sl,]))
if ($1 == load) return $seenmsg.load(%nick,%n,%m,$seentime($2),$3) $iif(%sl,$+([,%sl,]))
if ($1 == joined) return $seenmsg.joined(%nick,%n,%m,$seentime($2),$3) $iif(%sl,$+([,%sl,]))
if ($1 == query) return $seenmsg.query(%nick,%n,%m,$seentime($2)) $iif(%sl,$+([,%sl,]))
}
alias -l seenparse2 {
;with wildcard parsing
var %nick = $1
tokenize 32 $2-
var %s3 = $1, %s = $hfind(xSeen,$1,0,w), %s2 = $deltok($hfind(xSeen,$1,1,w),2,33)
if ( !%s ) return $seenmsg.nomatch(%nick)
elseif ( %s == 1 ) return $seenparse(%nick,%s2,$iif($count($2-,*,?),$replace($2-,$deltok($gettok($gettok($2-,1,32),3-,58),-1,58),$gettok(%s2,3,58)),$2-) )
elseif ( %s < 100 ) {
return $seenparse.filter(%nick,$+(%s,:,%s3),$2-)
}
else return $seenmsg.manymatch(%nick,%s)
}
alias -l seenparse3 {
;smart seen parsing
var %nick = $1
tokenize 32 $2-
var %g5 = $1-, %r = $hfind(xSeen,$+($1,!*),1,w), %g3 = $+($gettok(%r,1-2,58),:,$+(*!,$deltok($gettok(%r,2-,33),2,64),@*))
var %g = $hfind(xSeen,%g3,0,w)
if ( %g == 1 ) || ( !%r ) return $seenparse(%nick,%g5)
elseif ( %g < 100 ) {
return $seenparse.filter(%nick,$+(%g,:,%g3),$2-)
}
else return $seenmsg.manymatch(%nick,%g)
}
alias -l seenparse.filter {
var %nick = $1
tokenize 32 $2-
var %j = $gettok($1,1,58), %j3 = $deltok($gettok($1,2-,58),2,32), %fwin = @seenfilter, %j2, %j9 = 0, %j4, %nnick, %snet = $gettok($1,3,58)
window -hn %fwin
clear %fwin
while %j {
%j2 = $hfind(xSeen,%j3,%j,w)
aline %fwin $deltok($gettok(%j2,3,58),2,33) $gettok($hget(xSeen,%j2),2,32)
dec %j
inc %j9
}
filter -cteuww 2 32 %fwin %fwin
var %k = 1, %k1, %sp
while (%k <= 5) && ($line(%fwin,%k)) {
%k1 = $addtok(%k1,$gettok($v1,1,32),32)
inc %k
}
%j4 = $gettok(%k1,1,32)
%nnick = $deltok($gettok($2,3-,58),-1,58)
%sp = $seenparse(%nick,$+(seen:,%snet,:,%j4),$iif($2,$iif(!$count(%nnick,*,?),$reptok($2-,%nnick,%j4,1,58),$replace($2-,%nnick,%j4))))
if (%j9 >= 2) return $seenmsg.found(%j9,$iif(%j9 >= 5,5,$v1),%k1,%sp)
else return %sp
}
alias seen {
if ( $1 ) echo $colour(info) -a *** $seenpar($me,$+(seen:,$iif($readini($_seen.file,settings,multiserver),*,$network),:,$1))
else echo $colour(info) -a * /seen: insufficient parameters
}
alias -l seen.version return 3.7
alias -l _seen.file return $+(",$scriptdirxSeen.ini,")
alias -l _seen.log return $+(",$scriptdirxSeen.dat,")
alias -l _seen.bak return $+(",$scriptdirxSeen.bak,")
alias -l seentime {
var %d = $duration($calc($ctime - $1))
return $replace(%d,wk,$st2(week),day,$st2(day),hr,$st2(hour),min,$st2(minute),sec,$st2(second))
}
alias -l st2 return $+($chr(160),$1)
alias -l seen.delold {
var %d = $iif($1 == ALL,$hget(xSeen,0).item,$hfind(xSeen,$+(seen:,$1,:,*),0,w)), %e = 0, %eh = $2
if ( %eh ) {
if ( %eh isnum ) {
if ( %eh > 1 ) {
var %f = $calc(86400 * %eh)
while %d {
if ( $calc($ctime - $gettok($iif($1 == ALL,$hget(xSeen,%d).data,$hget(xSeen,$hfind(xSeen,$+(seen:,$1,*),%d,w))),2,32)) > %f ) {
inc %e
hdel xSeen $iif($1 == ALL,$hget(xSeen,%d).item,$hfind(xSeen,$+(seen:,$1,:,*),%d,w))
}
dec %d
}
if ( !$3 ) .timerxSeen.deletedentries 1 0 _blankinput Deleted %e seen entries $iif($1 != ALL,for $1)
}
else .timerxSeenerrornumlow 1 0 _blankinputerror Number should be higher than 1.
}
else .timerxSeenerrornotnum 1 0 _blankinputerror %eh is not a number.
}
else .timerxSeenerrornumlow 1 0 _blankinputerror You must enter a number, should be higher than 1.
}
alias -l seen.stats {
var %s = $+(seen:,$2,:*), %t = $hfind(xSeen,%s,0,w)
if ( $2 != ALL ) {
var %o = $hfind(xSeen,%s,0,w), %p = $ctime, %p1
while %o {
if ( %p > $gettok($hget(xSeen,$hfind(xSeen,%s,%o,w)),2,32) ) {
%p = $v2
%p1 = $hfind(xSeen,%s,%o,w)
}
dec %o
}
return $1 $+ , I have a Total of %t entries for $2 $+ . $iif(%t,The Oldest entry for $2 $&
is $deltok($gettok(%p1,3,58),2,33) $+ $chr(44) which is from $seentime(%p) ago.)
}
else return $1 $+ , I have a Total of $hfind(xSeen,$+(seen:*),0,w) entries in my database.
}
alias -l seen.default {
_writeini $1 status 1
_writeini $1 format Msg
_writeini $1 target Chan
_writeini $1 notify 1
_writeini $1 trigger !
_writeini $1 private 1
_writeini $1 format2 Msg
_writeini $1 format3 Notice
if ( $2 ) echo $colour(info) -a ** xSeen $seen.version $+ : Default Seen settings has been set for $1 $+ .
}
alias -l seen.format {
if ( $2 ) {
var %sf = $readini($_seen.file,$1,format) $readini($_seen.file,$1,target)
tokenize 32 %sf
return $replace(%sf,$iif($2 == nick,msg),$iif($2 == nick,.msg),chan,$chan,notice,.notice,nick,$nick)
}
else return . $+ $readini($_seen.file,$1,format2) $nick
}
alias -l nseen.format return . $+ $readini($_seen.file,$1,format3)
alias -l floodcheck {
if ( $readini($_seen.file,settings,flood.pro) ) {
var %h = $readini($_seen.file,settings,flood.time)
var %j = $readini($_seen.file,settings,flood.lines)
var %i = $readini($_seen.file,settings,flood.ignore)
inc $iif(!$($+(%,xseenflood,.,$1,.,$2),2),$+(-u,%h)) $+(%,xseenflood,.,$1,.,$2)
if ( $($+(%,xseenflood,.,$1,.,$2),2) >= %j ) {
.ignore $+(-u,$calc(60 * %i)) $2
echo 04 -s ** xSeen: Flood detected from $2 on $1 $+ ... ignoring for %i minutes.
}
}
}
alias -l unloadcheck {
var %uc = $input(Do you really want to unload xSeen v $+ $seen.version ?,uy,xSeen Unload)
if ( $! ) {
if ( $isfile($_seen.bak) ) .timerxSeen.backupcheck 1 0 backupcheck
else _unload
}
}
alias -l defoutputcheck {
var %uc = $input(Do you really want to set default outputs?,uy, xSeen Default Outputs)
if ( $! ) {
def_output
refresh_output
}
}
alias -l resetdatacheck {
var %uc = $input(Do you really want to reset the data? Back up file would be reset too.,uy,xSeen Reset)
if ( $! ) {
.hfree xSeen
.hmake xSeen 100
.timerxSeen.resetdatadone 1 0 _blankinput All data has been cleared!
}
}
alias -l backupcheck {
var %bc = $input(Do you also want to delete the backup seen data?,uy,xSeen Backup)
if ( $! ) {
_del.bak
_unload
}
else _unload
}
alias -l autoloadbak.check {
var %al = $input(Do you want to load the backup seen data?,uy,Found xSeen Backup log)
if ( $! ) hload xSeen $_seen.bak
}
alias _blankinput {
var %bi = $input($1-,uio,xSeen)
}
alias _blankinputerror {
var %bi = $input($1-,uwo,xSeen Error)
}
alias -l _unload .unload -rs $+(",$script,")
alias -l _del.bak .remove $_seen.bak
alias -l xSeen.init {
if ( !$hget(xSeen) ) hmake xSeen 100
if ( $isfile($_seen.bak) ) .timerxSeen.autoloadbak 1 0 autoloadbak.check
_writeini settings status 1
_writeini settings flood.lines 3
_writeini settings flood.time 60
_writeini settings flood.ignore 3
_writeini settings auto.delete 0
_writeini settings auto.delete.every 3
_writeini settings auto.delete.old 30
_writeini settings auto.save 0
_writeini settings auto.save.every 3
_writeini settings smart 1
_writeini settings flood.pro 1
_writeini settings events.texts 1
_writeini settings events.actions 1
_writeini settings events.querys 1
_writeini settings events.joins 1
_writeini settings events.parts 1
_writeini settings events.quits 1
_writeini settings events.kicks 1
_writeini settings events.nickchange 1
.enable #xSeen.load
var %scon = $scon(0)
.scon -at1 .version
while %scon {
.scon $v1
if ( $network ) {
seen.default $v1
var %ial = $ial(*,0)
while %ial {
var %ii = $ial(*,%ial)
xseen.add $+(seen:,$network,:,%ii) load $ctime $comchan($gettok(%ii,1,33),1)
dec %ial
}
.scon -r
}
dec %scon
}
.timerxSeen.disable.load 1 5 .disable #xSeen.load
def_output 1
echo -a 09,01 » »08,01 xSeen v $+ $seen.version Successfully Loaded.
echo -a 09,01 » »08,01 Copyright © 200415,01 xDaemon.us
echo -a 09,01 » »08,01 Written by: 15,01xDaeMoN 08,01Email: 15,01xDaemon@xDaemon.us
}
alias -l xseen.save {
hsave -o xSeen $_seen.log
hsave -o xSeen $_seen.bak
}
alias -l dialog_init {
did -b $dname 8,9,10,45,49,50,51,52,68,69,73,110,111,112
did -h $dname 13,14,15,16,17,18,19,20,24,25,27,28,57,59,60,61,62,63,64,65,66,82,85,77,78,79,80,86,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,115,116,117
if ( !$readini($_seen.file,settings,flood.pro) ) did -b $dname 39,40,48
if ( !$istok($didtok($dname,11,44),xSeen,44) ) did -ac $dname 11 xSeen
if ( !$istok($didtok($dname,26,44),ALL,44) ) did -ac $dname 26 ALL
if ( !$istok($didtok($dname,98,44),Status Window,44) ) {
did -ac $dname 98 Status Window
did -a $dname 98 Active Window
}
var %k = 1, %se
while $scon(%k).network {
%se = $v1
if ( !$istok($didtok($dname,11,44),%se,44) ) {
did -a $dname 11,26 %se
did -ac $dname 12 %se
}
inc %k
}
did -ra $dname 39 $readini($_seen.file,settings,flood.lines)
did -ra $dname 40 $readini($_seen.file,settings,flood.time)
did -ra $dname 48 $readini($_seen.file,settings,flood.ignore)
if ( $readini($_seen.file,settings,flood.pro) ) did -c $dname 67
if ( !$istok($didtok($dname,73,44),No Saving,44) ) {
did -ac $dname 73 No Saving
didtok $dname 73 44 No Notification,No Trigger
}
did -c $dname 84
did -e $dname 73
did11
did26
did73
refresh_output
}
alias -l did11 {
if ( $did(11) != xSeen ) {
var %d11 = $did(11)
did -uev $dname 13,14,15,16,17,18,19,20,24,25,27,28,59,60,61,62,63,64,65,115
did -h $dname 66,82,100,101,102,103,104,105,106,107,108,109,116,117
did -r $dname 18,27,64,65
did -b $dname 13,14,17,28
var %d11_18 = $readini($_seen.file,%d11,format)
did -ac $dname 18 %d11_18
did -a $dname 18 $iif(%d11_18 == Msg,Notice,$v2)
var %d11_64 = $readini($_seen.file,%d11,target)
did -ac $dname 64 %d11_64
did -a $dname 64 $iif(%d11_64 == Chan,Nick,$v2)
var %d11_65 = $readini($_seen.file,%d11,format3)
did -ac $dname 65 %d11_65
did -a $dname 65 $iif(%d11_65 == Msg,Notice,$v2)
var %d11_27 = $readini($_seen.file,%d11,format2)
did -ac $dname 27 %d11_27
did -a $dname 27 $iif(%d11_27 == Msg,Notice,$v2)
did -c $dname $iif($readini($_seen.file,%d11,status),15,16)
if ( $readini($_seen.file,%d11,notify) ) did -c $dname 59
did -era $dname 19 $readini($_seen.file,%d11,trigger)
if ( $readini($_seen.file,%d11,private) ) {
did -e $dname 63,64,65
did -c $dname 62
}
}
else {
did -uev $dname 15,16,24,66,82,100,101,102,103,104,105,106,107,108,109,116,117
did -c $dname $iif($readini($_seen.file,settings,status),15,16)
if ( $readini($_seen.file,settings,smart) ) did -c $dname 66
if ( $readini($_seen.file,settings,wildcards) ) did -c $dname 82
if ( $readini($_seen.file,settings,events.texts) ) did -c $dname 101
if ( $readini($_seen.file,settings,events.actions) ) did -c $dname 102
if ( $readini($_seen.file,settings,events.querys) ) did -c $dname 103
if ( $readini($_seen.file,settings,events.joins) ) did -c $dname 104
if ( $readini($_seen.file,settings,events.parts) ) did -c $dname 105
if ( $readini($_seen.file,settings,events.quits) ) did -c $dname 106
if ( $readini($_seen.file,settings,events.kicks) ) did -c $dname 107
if ( $readini($_seen.file,settings,events.nickchange) ) did -c $dname 108
if ( $readini($_seen.file,settings,add.nicks.onjoin) ) did -c $dname 116
if ( $readini($_seen.file,settings,multiserver) ) did -c $dname 117
did -h $dname 13,14,17,18,19,20,25,27,28,59,60,61,62,63,64,65,115
did -b $dname 109,100
}
}
alias -l did26 {
did -e $dname 9,10
if ( $did(26) == ALL ) {
did -e $dname 8,9,10,68
did $+(-e,$iif($readini($_seen.file,settings,auto.delete),c)) $dname 45
;did $+(-e,$iif($readini($_seen.file,settings,auto.save),c)) $dname 54
did -b $dname 49,50,51,52
if ( $readini($_seen.file,settings,auto.delete) ) {
did -e $dname 51,52
did -era $dname 49 $readini($_seen.file,settings,auto.delete.every)
did -era $dname 50 $readini($_seen.file,settings,auto.delete.old)
}
}
else {
did -b $dname 8,51,52,68
did -ub $dname 45
did -rb $dname 49,50
}
}
alias -l did73 {
var %d12 = $did(12), %do = $replace($did(73),No Saving, chans.nosave,No Notification,chans.nonotify,No Trigger,chans.notrigger)
did -e $dname 70,71,72
did -er $dname 69
if ( $readini($_seen.file,%d12,%do) ) didtok $dname 69 44 $v1
}
alias -l did93 {
var %l = 1,%s
while $did($dname,93,%l) {
%s = %s $+ $v1 $+ $chr(32)
inc %l
}
return %s
}
alias count93 {
var %l = 1,%s = 0, %t
while $did($dname,93,%l).len {
inc %s $v1
inc %l
}
%s = 200 - %s
return %s
}
alias -l refresh_output {
did -r xSeen 92
didtok xSeen 92 44 Talking,Acting,Quitting,Parting,Joined,Joining,Nick Change,Kicking,Kicked,Many Matches,Not Seen,No Wildcards,Me,Self,Here,Nseen,On Chan,Load,Long Nick,Found,Query
did -bu xSeen 94
did -rm xSeen 93
did -r xSeen 96
}
;####################### RAWS #######################
#xSeen.load off
raw 005:*: {
if ( $matchtok($1-,NICKLEN=,1,32) ) _writeini $network nicklen $remove($v1, NICKLEN=)
halt
}
raw 351:*: halt
#xSeen.load end
#xsWHO off
raw *:*: {
if ( $istok(353.366.324.329,$numeric,46) ) halt
elseif ( $numeric == 352 ) { xseen.add $+(seen:,$network,:,$+($6,!,$3,@,$4)) joined $ctime $2 | halt }
elseif ( $numeric == 315 ) { .disable #xsWHO | halt }
}
#xsWHO end
;####################### MENU #######################
menu * {
-
xSeen v $+ $seen.version
.Console: xSeen
.-
.Unload: .timerxSeen.unloadcheck 1 0 unloadcheck
}
;####################### DIALOG #######################
alias xseen { if ( !$dialog(xSeen) ) dialog -m xSeen xSeen }
dialog xSeen {
title "xSeen v3.7 Console [/xSeen]"
size -1 -1 155 145
option dbu notheme
tab "Settings", 1, 0 0 155 130
tab "Channels", 2
tab "Data", 3
tab "Flood", 4
tab "About", 76
box "", 5, 5 15 145 110
box "Search", 85, 5 0 145 64
box "Options", 109, 5 49 145 40, tab 1 disable
box "Select Events To Log", 100, 5 85 145 40, tab 1
box "Search Results:", 88, 5 60 145 70
box "Public", 13, 5 50 73 42, tab 1
box "Private", 14, 77 50 73 42, tab 1
box "Notification", 17, 5 88 73 37, tab 1
box "Trigger", 28, 77 88 73 37, tab 1
box "Messages", 90, 5 0 145 130
box "Options", 110, 5 39 61 86, tab 3
box "Delete Old Entries", 111, 65 39 85 86, tab 3
box "Auto-Delete Entries", 112, 65 80 85 45, tab 3
button "Close", 56, 115 132 35 12, ok
button "Delete", 9, 70 66 75 13, tab 3
button "Save", 8, 10 66 50 13, tab 3
button "Statistics", 10, 10 49 50 13, tab 3
button "Save", 6, 76 132 35 12
button "Load", 68, 10 83 50 13, tab 3
button "Add", 71, 95 66 50 13, tab 2
button "Delete", 72, 95 81 50 15, tab 2
button "Search", 87, 110 45 35 12
button "Set Default Outputs", 95, 90 112 55 12
button "Preview", 99, 10 112 25 12
button "Reset Data", 54, 10 100 50 13, tab 3
combo 11, 43 25 102 80, tab 1 (drop)
combo 12, 43 25 102 80, tab 2 (drop)
combo 26, 43 25 102 80, tab 3 (drop)
combo 73, 95 52 50 80, tab 2 (drop)
combo 77, 65 15 80 80, (drop sort)
combo 18, 37 59 35 80, tab 1 (drop)
combo 64, 37 73 35 80, tab 1 (drop)
combo 65, 37 110 35 80, tab 1 (drop)
combo 27, 110 73 35 80, tab 1 (drop)
combo 92, 65 15 80 80, (drop sort)
combo 98, 10 98 50 20, (drop sort)
check "Enable Auto Delete Data", 45, 70 88 70 10, tab 3
check "Enable private seen", 62, 81 59 65 10, tab 1
check "Enable Smart xSeen", 66, 10 59 60 10, tab 1
check "Enable Trigger Flood Protection", 67, 15 105 90 10, tab 4
check "Allow wildcards", 82, 10 72 50 10, tab 1
check "Enable notification", 59, 10 98 65 10, tab 1
check "Edit Selected Output", 94, 10 82 75 10
check "Texts", 101, 10 95 28 10, tab 1
check "Actions", 102, 10 108 28 10, tab 1
check "Querys", 103, 43 95 30 10, tab 1
check "Joins", 104, 43 108 25 10, tab 1
check "Parts", 105, 76 95 25 10, tab 1
check "Quits", 106, 76 108 25 10, tab 1
check "Kicks", 107, 104 95 25 10, tab 1
check "Nick Change", 108, 104 108 40 10, tab 1
check "Add nicks on Join", 116, 76 72 50 10, tab 1
check "Multi-Server", 117, 76 59 50 10, tab 1
radio "Enable", 15, 43 40 30 10, tab 1 (group)
radio "Disable", 16, 76 40 30 10, tab 1
edit "", 19, 81 110 15 10, tab 1 (center,limit 1)
edit "", 39, 30 56 20 10, tab 4 (center limit 3)
edit "", 40, 90 56 20 10, tab 4 (center limit 4)
edit "", 48, 105 80 20 10, tab 4 (center limit 4)
edit "", 49, 130 100 15 10, tab 3 (center limit 2)
edit "", 50, 130 112 15 10, tab 3 (center limit 3)
edit "", 70, 10 52 77 10, tab 2 (autohs)
edit "", 79, 10 45 95 12, autohs
edit "", 80, 10 68 136 60, multi vsbar
edit "", 93, 10 32 136 48, multi vsbar limit 200
edit "", 96, 115 82 18 10, read
edit "", 113, 130 48 15 10, tab 3 (center limit 3)
list 69, 10 66 77 65, tab 2 (sort vsbar)
menu "Mode", 81
item "Search", 83, 81
item "Settings", 84, 81
item "Messages", 89, 81
text "Select :", 22, 10 27 18 10, tab 1
text "Select :", 23, 10 27 18 10, tab 2
text "Status :", 24, 10 41 20 10, tab 1
text "Format :", 25, 10 60 21 10, tab 1
text "Target :", 61, 10 74 20 10, tab 1
text "Format :", 63, 81 74 21 10, tab 1
text "Format :", 60, 10 111 21 10, tab 1
text "xSeen", 31, 10 25 130 10, tab 76 (center)
text "Version : 3.7", 32, 15 35 100 10, tab 76
text "Written By : xDaeMoN", 33, 15 45 100 10, tab 76
text "Email : xDaemon@xDaemon.us", 34, 15 55 100 10, tab 76
text "Description : A Network-specific Seen System that has seen notification. ", 35, 15 65 125 20, tab 76
text "Credits :", 36, 15 85 30 10, tab 76
text "Tye (for his Simple Seen System) and to the authors of Gseen and Bseen tcls.", 37, 18 95 125 20, tab 76
text "Trigger Flood Protection", 41, 15 25 125 10, tab 4 (center)
text "Set the Number of times the the trigger can only be used by users within a certain time:", 42, 15 35 125 20, tab 4
text "Times within", 43, 55 57 30 10, tab 4
text "seconds", 44, 115 57 20 10, tab 4
text "Select :", 46, 10 27 18 10, tab 3
text "Amount of time to ignore (minutes):", 47, 15 81 90 10, tab 4
text "Every (hours)?", 51, 70 100 38 10, tab 3
text "Older than (days)?", 52, 70 112 47 10, tab 3
text "Saving . . .", 57, 10 136 30 10
text "Select Option:", 74, 96 42 50 10, tab 2
text "Enter Channel Name :", 75, 10 42 60 10, tab 2
text "Select Network :", 78, 10 16 40 10
text "seen", 20, 100 111 11 10, tab 1
text "Select Output :", 91, 10 16 38 10
text "left", 97, 136 83 10 10
text "Enter Nick or Wildcard :",86, 10 36 80 7
text "Delete seen entries older than (days) :",114, 70 48 55 15, Tab 3
text "Enter Trigger Character :",115, 81 98 70 10, Tab 1
}
On *:DIALOG:xSeen:*:*: {
if ( $devent == init ) {
dialog_init
}
elseif ( $devent == sclick ) {
if ( $did == 6 ) {
did -v $dname 57
did -b $dname 6
.timerxSeen.hidesave 1 2 if ( $!dialog(xSeen) ) $({, ) did -h $dname 57 $(|, ) did -e $dname 6 $(}, )
if ( $did(11) ) {
if ( $v1 != xSeen ) {
var %d11 = $did(11)
_writeini %d11 status $did(15).state
_writeini %d11 notify $did(17).state
_writeini %d11 format $did(18)
_writeini %d11 target $did(64)
_writeini %d11 format2 $did(27)
_writeini %d11 format3 $did(65)
if ( $did(19) ) _writeini %d11 trigger $v1
_writeini %d11 private $did(62).state
_writeini %d11 notify $did(59).state
}
else _writeini settings status $did(15).state
_writeini settings smart $did(66).state
_writeini settings wildcards $did(82).state
_writeini settings events.texts $did(101).state
_writeini settings events.actions $did(102).state
_writeini settings events.querys $did(103).state
_writeini settings events.joins $did(104).state
_writeini settings events.parts $did(105).state
_writeini settings events.quits $did(106).state
_writeini settings events.kicks $did(107).state
_writeini settings events.nickchange $did(108).state
_writeini settings add.nicks.onjoin $did(116).state
_writeini settings multiserver $did(117).state
}
if ( $did(12) ) && ( $did(73) ) {
var %d12 = $did(12), %do = $replace($did(73),No Saving, chans.nosave,No Notification,chans.nonotify,No Trigger,chans.notrigger)
$iif($didtok($dname,69,44),writeini,remini) $_seen.file %d12 %do $v1
}
if ( $did(26) == ALL ) {
if ( $did(49) ) {
if ( $v1 isnum 1-1000 ) _writeini settings auto.delete.every $v1
else did -ra $dname 49 $readini($_seen.file,settings,auto.delete.every)
}
if ( $did(50) ) {
if ( $v1 isnum 1-1000 ) _writeini settings auto.delete.old $v1
else did -ra $dname 50 $readini($_seen.file,settings,auto.delete.old)
}
_writeini settings auto.delete $did(45).state
.timerxSeen.autodelete $iif($did(45).state,-o 0 $calc($iif($did(49) isnum 1-1000,$v1,$readini($_seen.file,ALL,auto.delete.every)) * 3600) seen.delold ALL $iif($did(50) isnum 1-1000,$v1,$readini($_seen.file,ALL,auto.save.old)),off) 1
}
if ( $did(39) ) {
if ( $v1 isnum 1-100 ) _writeini settings flood.lines $v1
else did -ra $dname 39 $readini($_seen.file,settings,flood.lines)
}
if ( $did(40) ) {
if ( $v1 isnum 1-1000 ) _writeini settings flood.time $v1
else did -ra $dname 40 $readini($_seen.file,settings,flood.time)
}
if ( $did(48) ) {
if ( $v1 isnum 1-1000 ) _writeini settings flood.ignore $v1
else did -ra $dname 48 $readini($_seen.file,settings,flood.ignore)
}
_writeini settings flood.pro $did(67).state
if ( $did(92) ) set $+(%,xseenmsg.,$remove($did(92),$chr(32))) $did93
}
elseif ( $did == 8 ) {
xseen.save
.timerxSeen.savedata 1 0 _blankinput Data Saved!
}
elseif ( $did == 9 ) {
seen.delold $did(26) $did(113)
did -r $dname 113
}
elseif ( $did == 10 ) {
.timerxSeen.seenstats 1 0 _blankinput $seen.stats($me,$did(26))
}
elseif ( $did == 11 ) {
did11
}
elseif ( $did == 12 ) {
var %d12 = $did(12)
did -e $dname 73
}
elseif ( $did == 26 ) {
did26
}
elseif ( $did == 45 ) {
did $iif($did(45).state,-e,-b) $dname 51,52
did $iif($did(45).state,-era,-br) $dname 49 $readini($_seen.file,settings,auto.delete.every)
did $iif($did(45).state,-era,-br) $dname 50 $readini($_seen.file,settings,auto.delete.old)
}
elseif ( $did == 54 ) .timerxSeenresetdatacheck 1 0 resetdatacheck
elseif ( $did == 67 ) {
if ( $did(67).state ) {
did -e $dname 39,40,48
}
else did -b $dname 39,40,48
}
elseif ( $did == 68 ) {
var %ee = $sfile(*.bak,Load xSeen Data,Load)
if ( $istok($nopath($_seen.log) $nopath($_seen.bak),$nopath(%ee),32) ) {
hload xSeen $+(",%ee,")
.timerxSeen.loaddata 1 0 _blankinput Loaded $hget(xSeen,0).item entries from $nopath(%ee)
}
elseif ( !%ee ) return
else .timerxSeenerrorinvalidfile 1 0 _blankinputerror Could not load $+(",$nopath(%ee),",$chr(44)) not a valid xSeen file.
}
elseif ( $did == 71 ) {
if ( $did(70) ) {
var %d70 = $gettok($v1,1,32)
if ( $chr(35) != $left(%d70,1) ) %d70 = $+($v1,%d70)
if ( !$istok($didtok($dname,69,44),%d70,44) ) did -a $dname 69 %d70
did -r $dname 70
}
}
elseif ( $did == 72 ) {
if ( $did(69).seltext ) {
did -d $dname 69 $did(69).sel
}
}
elseif ( $did == 73 ) {
did73
}
elseif ( $did == 87 ) {
if ( $did(79) ) {
did -b $dname 87
.timerxSeen.hidesearch 1 2 if ( $!dialog(xSeen) ) $({, ) did -e $dname 87 $(}, )
did -ra $dname 80 $seenpar($me,$+(seen:,$iif($did(77) == All,*,$v1),:,$did(79)))
did -rf $dname 79
}
}
elseif ( $did == 92 ) {
did -ram $dname 93 $($+(%,xseenmsg.,$remove($did($dname,92),$chr(32))),2)
did -ue $dname 94
did -ra $dname 96 $count93
did -v $dname 96,97,98,99
}
elseif ( $did == 94 ) did $iif($did(94).state,-n,-m) $dname 93
elseif ( $did == 95 ) .timerxSeendefoutput_check 1 0 defoutputcheck
elseif ( $did == 99 ) && ( $did(92) ) echo $+(-,$lower($left($did(98),1))) 3Output Preview: $did93
}
elseif ( $devent == edit ) {
if ( $did == 79 ) did -t $dname 87
elseif ( $did == 113 ) did -t $dname 9
elseif ( $did == 93 ) did -ra $dname 96 $count93
}
elseif ( $devent == menu ) {
if ( $did == 83 ) {
did -h $dname $_ids
did -h $dname 90,91,92,93,94,95,96,97,98,99
did -v $dname 77,78,79,80,85,86,87,88
did -b $dname 85,88
did -c $dname 83
did -u $dname 84,89
did -m $dname 80
did -f $dname 79
; if ( !$istok($didtok($dname,77,44),All Data,44) ) did -ac $dname 77 All Data
var %k = 1, %se
while $ini($_seen.file,%k) {
%se = $v1
if ( !$istok($didtok($dname,77,44),%se,44) ) && ( %se != settings ) did -a $dname 77 %se
inc %k
}
if ( !$istok($didtok($dname,77,44),ALL,44) ) did -ac $dname 77 ALL
}
elseif ( $did == 84 ) {
did -v $dname $_ids
did -u $dname 83,89
dialog_init
}
elseif ( $did == 89 ) {
did -c $dname 89
did -u $dname 83,84
did -h $dname $_ids
did -h $dname 77,78,79,80,85,86,87,88
did -v $dname 6,91,92,93,94,95,96,97,98,99
did -bv $dname 90
}
}
}
alias -l _ids return 1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,22,23,24,25,26,27,28,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,57,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,100,101,102,103,104,105,106,107,108,109,115
;####################### OUTPUT #######################
alias -l seenmsg.text return $replace(%xseenmsg.talking,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<time>,$5,<on_chan>,$6)
alias -l seenmsg.act return $replace(%xseenmsg.acting,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<time>,$5,<on_chan>,$6)
alias -l seenmsg.quit return $replace(%xseenmsg.quitting,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<time>,$5,<quit_msg>,$6)
alias -l seenmsg.part return $replace(%xseenmsg.parting,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<time>,$5,<part_msg>,$6)
alias -l seenmsg.join return $replace(%xseenmsg.joining,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<time>,$5,<on_chan>,$6)
alias -l seenmsg.nick return $replace(%xseenmsg.nickchange,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<newnick>,$5,<time>,$6,<on_chan>,$7)
alias -l seenmsg.kicking return $replace(%xseenmsg.kicking,<nick>,$1,<seen_nick>,$2,<address>,$3,<knick>,$4,<channel>,$5,<time>,$6,<kick_msg>,$7,<on_chan>,$8)
alias -l seenmsg.kick return $replace(%xseenmsg.kicked,<nick>,$1,<seen_nick>,$2,<address>,$3,<channel>,$4,<kickedby>,$5,<time>,$6,<kick_msg>,$7)
alias -l seenmsg.manymatch return $replace(%xseenmsg.manymatches,<nick>,$1,<number>,$2)
alias -l seenmsg.nomatch return $replace(%xseenmsg.nomatch,<nick>,$1)
alias -l seenmsg.notseen return $replace(%xseenmsg.notseen,<nick>,$1,<seen_nick>,$2)
alias -l seenmsg.me return $replace(%xseenmsg.me,<nick>,$1)
alias -l seenmsg.self return $replace(%xseenmsg.self,<nick>,$1)
alias -l seenmsg.here return $replace(%xseenmsg.here,<nick>,$1,<seen_nick>,$2)
alias -l seenmsg.nseen return $replace(%xseenmsg.nseen,<nick>,$1,<address>,$2,<channel>,$3,<time>,$4)
alias -l seen.onchan { if ( $1 ison $2 ) return $replace(%xseenmsg.onchan,<seen_nick>,$1) }
alias -l seenmsg.load return $replace(%xseenmsg.load,<nick>,$1,<seen_nick>,$2,<address>,$3,<time>,$4)
alias -l seenmsg.joined return $replace(%xseenmsg.joined,<nick>,$1,<seen_nick>,$2,<address>,$3,<time>,$4,<channel>,$5)
alias -l seenmsg.longnick return $replace(%xseenmsg.longnick,<nick>,$1)
alias -l seenmsg.nowildcards return $replace(%xseenmsg.nowildcards,<nick>,$1)
alias -l seenmsg.found return $replace(%xseenmsg.found,<number>,$1,<number2>,$2,<seen_nicks>,$3,<seen_msg>,$4-)
alias -l seenmsg.query return $replace(%xseenmsg.query,<nick>,$1,<seen_nick>,$2,<address>,$3,<time>,$4)
alias -l def_output {
set %xseenmsg.joining <nick>, <seen_nick> (<address>) was last seen joining <channel> <time> ago. <on_chan>
set %xseenmsg.talking <nick>, <seen_nick> (<address>) was last seen talking on <channel> <time> ago. <on_chan>
set %xseenmsg.acting <nick>, <seen_nick> (<address>) was last seen acting on <channel> <time> ago. <on_chan>
set %xseenmsg.quitting <nick>, <seen_nick> (<address>) was last seen quiting on <channel> <time> ago stating: <quit_msg>.
set %xseenmsg.parting <nick>, <seen_nick> (<address>) was last seen leaving <channel> <time> ago stating: <part_msg>.
set %xseenmsg.nickchange <nick>, <seen_nick> (<address>) was last seen changing nick on <channel> to <newnick> <time> ago. <on_chan>
set %xseenmsg.kicking <nick>, <seen_nick> (<address>) was last seen kicking <knick> from <channel> <time> ago with the reason: <kick_msg>. <on_chan>
set %xseenmsg.kicked <nick>, <seen_nick> (<address>) was last seen kicked from <channel> by <kickedby> <time> ago with the reason: <kick_msg>.
set %xseenmsg.manymatches <nick>, I found <number> matches to your query; please refine it to see any output.
set %xseenmsg.nomatch <nick>, No matches were found.
set %xseenmsg.notseen <nick>, I have not seen <seen_nick>.
set %xseenmsg.me <nick>, you found me!
set %xseenmsg.self <nick>, Looking for yourself, eh?!
set %xseenmsg.here <nick>, <seen_nick> is right here!
set %xseenmsg.nseen <nick> (<address>) was looking for you on <channel> <time> ago.
set %xseenmsg.onchan <seen_nick> is still there.
set %xseenmsg.joined <nick>, <seen_nick> (<address>) was last seen <time> ago when I joined <channel>.
set %xseenmsg.load <nick>, <seen_nick> (<address>) was last seen <time> ago when I loaded this script.
set %xseenmsg.longnick <nick>, that nick is too long. Nick length is limited in this network.
set %xseenmsg.nowildcards <nick>, Wildcards are not allowed.
set %xseenmsg.found I found <number> matches to your query. Here are the <number2> most recent (sorted): <seen_nicks>. <seen_msg>
set %xseenmsg.query <nick>, <seen_nick> (<address>) was last seen sending me a private message <time> ago.
if ( !$1 ) .timerxSeen.setdefoutputs 1 0 _blankinput Loaded Default Outputs!
}
;####################### EOF #######################