;================================================ ;SEEN SCRIPT ++++++ ;SCRITPED by Trevor^ ; ;================================================ ;####################### EVENTS ####################### On *:START: { if ( !$hget(xSeen) ) hmake xSeen 100 if ($isfile($_seen.log)) hload xSeen $_seen.log } On *:EXIT: if ( $hget(xSeen) ) hsave -o xSeen $_seen.log #xSeen on ON *:TEXT:*:#: { xseen.add $+(seen.,$network,.,$address($nick,5)) text $ctime $chan if ($1 == !seen) && ( $$2 ) { if ( $2 == $me ) msg $chan $seenmsg.me($nick) elseif ( $2 == $nick ) msg $chan $seenmsg.self2($nick) elseif ($2 ison $chan) msg $chan $seenmsg.here($nick,$2) else msg $chan $nick $+ , $seenpar($+(seen.,$network,.,$2),$+(nseen.,$network,.,$2,.,$nick) $nick $ctime $chan $address) } } ON *:ACTION:*:#: xseen.add $+(seen.,$network,.,$address($nick,5)) act $ctime $chan ON *:QUIT: xseen.add $+(seen.,$network,.,$address($nick,5)) quit $ctime $comchan($nick,1) $1- on *:PART:#: xseen.add $+(seen.,$network,.,$address($nick,5)) part $ctime $chan $1- on *:JOIN:#: { xseen.add $+(seen.,$network,.,$address($nick,5)) join $ctime $chan $1- nseen $+($network,.,$nick) } ON *:NICK: { xseen.add $+(seen.,$network,.,$nick,!,$address) nick $ctime $comchan($newnick,1) $newnick nseen $+($network,.,$newnick) } ON *:KICK:#: { xseen.add $+(seen.,$network,.,$address($nick,5)) kicking $ctime $chan $knick $1- xseen.add $+(seen.,$network,.,$address($knick,5)) kick $ctime $chan $nick $1- } #xSeen end ;####################### ALIASES ####################### alias -l xseen.add { if ( $hfind(xSeen,$+($deltok($1,2,33),!*),1,w) ) { if ( $v1 != $1 ) hdel xSeen $v1 } hadd -m xSeen $1- } alias -l nseen { var %n3 = $1, %n = $hfind(xSeen,$+(nseen.,$1,.,*),0,w), %n2, %n4 = 1 while %n { %n2 = $hfind(xSeen,$+(nseen.,%n3,.,*),%n,w) tokenize 32 $hget(xSeen,%n2) .timer 1 $calc(%n3 * 2) .notice $gettok(%n3,2,46) $seenmsg.nseen($1,$4,$3,$!seentime( $2 )) hdel xSeen %n2 inc %n4 dec %n } } alias -l seenpar { if ( $count($1,*,?) ) { return $seenparse2($1,$iif($2,$2-)) } else return $seenparse3($1,$iif($2,$2)) } alias -l seenparse { tokenize 32 $1- var %y = $hfind(xSeen,$+($1,!*),1,w), %x = $hget(xSeen,%y), %n = $deltok($gettok(%y,3,46),2,33), %m = $gettok(%y,2,33) if (!%x) return $seenmsg.notseen($deltok($gettok($1,3,46),2,32)) if ( %n == $me ) return $seenmsg.me2 if ( $2 ) { if ( $gettok($2,3,46) == $gettok($gettok($2,4,46),1,32) ) return $seenmsg.self hadd xSeen $2- } tokenize 32 %x if ($1 = text) { return $seenmsg.text(%n ,%m,$3,$seentime($2),$seen.onchan(%n,$3)) } if ($1 = act) { return $seenmsg.act(%n,%m,$3,$seentime($2),$seen.onchan(%n,$3)) } if ($1 = quit) { return $seenmsg.quit(%n,%m,$3,$seentime($2),$iif($4,stating $+($chr(40),$4-,$chr(41)))) } if ($1 = part) { return $seenmsg.part(%n,%m,$3,$seentime($2),$iif($4,stating $+($chr(40),$4-,$chr(41)))) } if ($1 = join) { return $seenmsg.join(%n,%m,$3,$seentime($2),$seen.onchan(%n,$3)) } if ($1 = nick) { return $seenmsg.nick(%n,%m,$3,$4,$seentime($2),$seen.onchan($4,$3)) } if ($1 = kicking) { return $seenmsg.kicking(%n,%m,$4,$3,$seentime($2),$+($5-,.),$seen.onchan(%n,$3)) } if ($1 = kick) { return $seenmsg.kick(%n,%m,$3,$4,$seentime($2),$5-) } } alias -l seenparse2 { tokenize 32 $1- var %s3 = $1, %s = $hfind(xSeen,$1,0,w), %s2 = $deltok($hfind(xSeen,$1,1,w),2,33) if ( !%s ) return $seenmsg.nomatch elseif ( %s == 1 ) return $seenparse(%s2,$2-) elseif ( %s < 40 ) { return $seenparse.filter($+(%s,.,%s3),$2) } else return $seenmsg.manymatch(%s) } alias -l seenparse3 { var %g5 = $1-, %r = $hfind(xSeen,$+($1,!*),1,w), %g3 = $+($gettok(%r,1-2,46),.,*!,$gettok($deltok($gettok(%r,3-,46),1,33),1,64),@*) var %g = $hfind(xSeen,%g3,0,w) if ( %g == 1 ) || ( !%r ) return $seenparse(%g5) elseif ( %g < 40 ) { return $seenparse.filter($+(%g,.,%g3),$2) } else return $seenmsg.manymatch(%g) } alias -l seenparse.filter { var %j = $gettok($1,1,46), %j3 = $gettok($1,2-4,46), %sfile = _stemp, %j2, %j9, %j4 btrunc %sfile 0 while %j { %j2 = $hfind(xSeen,%j3,%j,w) write %sfile $deltok($gettok(%j2,3,46),2,33) $gettok($hget(xSeen,%j2),2,32) dec %j } filter -cteuff 2 32 %sfile %sfile var %k = 1, %k1 while $read(%sfile,%k) { %k1 = $addtok(%k1,$gettok($v1,1,32),32) inc %k } .remove %sfile %j9 = $numtok(%k1,32) %j4 = $gettok(%k1,1,32) return $iif(%j9 > 1, I found %j9 matches to your query $+ $iif(%j9 > 1,$iif(%j9 >= 5,. Here are the 5 most recent) $& (sorted): $iif(%j9 > 5, $gettok(%k1,1-5,32) $+ ., %k1 $+ .))) $seenparse($+(seen.,$network,.,%j4),$iif($2,$reptok($2,$gettok($2,3,46),%j4,1,46))) } alias seen { if ( $1 ) echo $colour(info) -a *** $seenpar($+(seen.,$network,.,$1)) else echo $colour(info) -a * /seen: insufficient parameters } alias -l seen.version return 2.7 alias -l _seen.file return $+(",$scriptdirxSeen.ini,") alias -l _seen.log return $+(",$scriptdirxSeen.dat,") alias -l seentime return $replace($duration($calc($ctime - $1)),wk,$+($chr(32),week),day,$+($chr(32),day),hr,$+($chr(32),hour),min,$+($chr(32),minute),sec,$+($chr(32),second)) ;####################### MENU ####################### menu * { - xSeen v $+ $seen.version .$iif($group(#xSeen) == on,Disable,Enable) { $iif($group(#xSeen) == on,.Disable,.Enable) #xSeen echo $colour(info) -a ** xSeen $seen.version $iif($group(#xSeen) != on,DisableD,EnableD) } } ;####################### MESSAGES ####################### alias -l seenmsg.text return $1 ( $+ $2 $+ ) was last seen talking on $3 $4 ago. $5 alias -l seenmsg.act return $1 ( $+ $2 $+ ) was last seen acting on $3 $4 ago. $5 alias -l seenmsg.quit return $1 ( $+ $2 $+ ) was last seen quiting on $3 $4 ago $+($5,.) alias -l seenmsg.part return $1 ( $+ $2 $+ ) was last seen leaving $3 $4 ago. alias -l seenmsg.join return $1 ( $+ $2 $+ ) was last seen joining $3 $4 ago. $5 alias -l seenmsg.nick return $1 ( $+ $2 $+ ) was last seen changing nick on $3 to $4 $5 ago. $6 alias -l seenmsg.kicking return $1 ( $+ $2 $+ ) was last seen kicking $3 from $4 $5 ago with the reason: $+($6,.) $7 alias -l seenmsg.kick return $1 ( $+ $2 $+ ) was last seen kicked from $3 by $4 $5 with the reason: $+($6,.) alias -l seenmsg.manymatch return I found $1 matches to your query; please refine it to see any output. alias -l seenmsg.nomatch return No matches were found. alias -l seenmsg.notseen return I have not seen $1 $+ . alias -l seenmsg.me return $1 $+ , you found me! alias -l seenmsg.me2 return I'm right here so quit wasting my time. alias -l seenmsg.self return Looking for yourself, eh?! alias -l seenmsg.self2 return $1 $+ , go look in the mirror! alias -l seenmsg.here return $1 $+ , $2 is right here! alias -l seenmsg.nseen return $1 ( $+ $2 $+ ) was looking for you on $3 $4 ago. alias -l seen.onchan { if ( $1 ison $2 ) return $1 is still there. } ;####################### EOF #######################