rendered paste body/*
#################################################################################
# #
# mPRE v1.0.6 #
# #
# description: monitor channels for PRE/NUKE/UNNUKE(s) based on your #
# filters and display relevant information in an @window #
# #
# syntax: #
# /pre add -t type filter adds filter for type #
# /pre add filter adds filter for all types #
# /pre chan add #channel adds #channel to monitoring #
# /pre chan del #channel removes #channel from monitoring #
# /pre del N removes filter N #
# /pre list list filters + channels #
# /pre tip toggles tooltips on/off #
# /pre tip delay N sets tooltip delay to N secs #
# /pre tip fade toggles tooltip fade on/off #
# #
# examples: #
# /pre add -t xvid *DiAMOND #
# /pre add *HR?HDTV* #
# /pre add -t tv * #
# /pre add -t tv Heroes?S0?E??HDTV?* #
# /pre add -t mp3 *RNS #
# /pre del 5 #
# /pre del 1 #
# #
# *** REGULAR EXPRESSIONS (ADVANCED) *** #
# if you want to use regular expression filters, use -r/-rt/-tr. here's a #
# few examples to get you started. if you don't know how to use these, it's #
# probably best to avoid them. #
# /pre add -r /(DiAMOND|DEiTY|DoNE|ESPiSE)$/ #
# /pre add -rt tv /(LOL|XOR|CRiMSON|CTU|NBS|DIMENSION|NoTV)$/ #
# /pre add -r /^(The[ .]Simpsons|Family[ .]Guy|American[ .]Dad)/ #
# #
# *** CHANNELS CURRENTLY SUPPORTED *** #
# (FreeQuest) #pre #
# (P2P-NET) #persian-pre, #pre, #pre-rts, #st.pre #
# (SceneAccess) #scc-pre #
# NOTE: i need more channels! find me (via contact info below) and give #
# me some examples of PRE/NUKE/UNNUKE output and the channel name #
# and i will add it into the script for the next update. it's not #
# recommended to code it yourself, unless you know how to do it.. #
# #
# *** CONTACT INFORMATION *** #
# NETWORK: Cyanide-x (irc.cyanide-x.net) #
# CHANNEL: #TorrentHelp #
# IRCNICK: mitch #
# #
#################################################################################
*/
alias -l # return $+($iif(#* !iswm $1,$chr(35)),$1)
alias -l ' return $+(',$1,')
alias -l ; return $+($chr(40),$1,$chr(41))
alias -l [ return $+([,$1,])
alias -l _e echo -ac info $[(pre) $1-
alias -l _error _e syntax: | _e /pre add [-rt] [type] [filter] | _e /pre chan [add|del] #channel | _e /pre del N | _e /pre list | _e /pre tip [delay|fade] [N]
alias -l _filter var %i = $($1), %x = $hget(_mPRE,$+(filter_,%i)) | if (%i == 0) { return $($hfind(_mPRE,filter_*,0,w)) } | tokenize %x 1 | if ($prop == f) { %x = $2 } | if ($prop == t) { %x = $1 } | return %x
alias -l _h {
var %x = _mPRE, %z = $+(%x,.db) | if (!$hget(%x)) { .hmake %x 10 }
if ($1 == add) || ($1 == del) { if ($1 == add) { .hadd %x $2 $3- } | if ($1 == del) { .hdel %x $+(filter_,$$2) } | .hsave %x %z }
if ($1 == init) { if ($isfile(%z)) { .hload %x %z } | else { .hadd %x tooltips 0 | .hsave %x %z } }
if ($isid) { return $hget(%x,$$1) }
}
alias -l _scr return mPRE v1.0.6
alias -l _w {
var %@ = @mPRE, %a = aline -phi10 %@, %tip = $_h(tooltips), %t = $1, %# = $2, %c, %m, %r, %i, %x, %y
if (!$window(%@)) { window -n %@ }
tokenize 32 $1-
while ($($+($,%i),2)) {
%x = $v1 | %y = $($+($,$calc(%i +1)),2)
if (%x == -c) { if (%y != -n) && (%y != -r) { %c = %y } }
if (%x == -n) { if (%y != -r) { %m = %y } }
if (%x == -r) { %r = $($+($,$calc(%i +1),-),2) }
inc %i
}
%a $+([,$time(mm/dd/yy HH:nn:ss),]) %# $[(%t) $iif(%c,$;(%c)) %r $iif(%m,[[ %m ]])
if ($appactive) && (%tip == 1) {
%r = $+(,%r,)
if (%m) { %m = $+(,$iif(%t == U,UN),NUKE ,%m) }
ptip $+(%r,,%m)
}
halt
}
alias pre {
var %c, %t, %f, %n, %r, %x, %l, %i, %ii, %h = _mPRE
_h init
if (!$1) { _error }
if ($1 == add) {
if (!$2) { _error }
if ($2) {
if ($2 == -r) { if (!$3) { _error } | if ($3) { %t = * | %f = $3- | %r = 1 } }
if ($istok(-rt -tr,$2,32)) { if (!$4) { _error } | if ($4) { %t = $3 | %f = $4- | %r = 1 } }
if ($2 == -t) { if (!$3) { _error } | if ($3) { %t = $3 | %f = $iif($4,$4-,*) } }
if (!$istok(-r -rt -t -tr,$2,32)) { if ($#(*) iswm $2) { _error } | else { %t = * | %f = $2- } }
_h add $+(filter_,$calc($_filter(0) +1)) $+(%t,,$iif(%r == 1,$+(%r,,%f),%f))
_e added $'(%f) $iif(%t != *,$;(%t)) to filters $iif(%r == 1,$[(r))
}
}
if ($1 == chan) {
if ($2 == add) {
if ($3) {
if ($istok($_h(channels),$#($3),44)) { _e channel $'($#($3)) exists }
else { _h add channels $addtok($_h(channels),$#($3),44) | _e added $'($#($3)) to channels }
}
else { _error }
}
if ($2 == del) {
if ($3) {
if ($istok($_h(channels),$#($3),44)) { _h add channels $deltok($_h(channels),$findtok($_h(channels),$#($3),1,44),44) | _e removed $'($#($3)) from channels }
else { _e channel $'($#($3)) does not exist }
}
else { _error }
}
}
if ($1 == del) {
%x = $($2) | if ($_filter(%x)) { %t = $gettok($v1,1,1) | %f = $gettok($v1,2,1) | if ($numtok(%f,127) == 2) { %f = $gettok(%f,2,127) } }
if ($_h($+(filter_,%x))) { _h del %x | _e removed $'(%f) $iif(%t != *,$;(%t)) from filters | %i = %x | while ($_filter($calc(%i +1))) { _h add $+(filter_,%i) $_filter($calc(%i +1)) | inc %i } | _h del %i }
else { _e invalid filter }
}
if ($1 == list) {
%x = 1
while ($_filter(%x)) {
%l = $_filter(%x) | %t = $gettok(%l,1,1) | %f = $gettok(%l,2,1) | if ($numtok(%f,127) == 2) { %r = $gettok(%f,1,127) | %f = $gettok(%f,2,127) }
_e $+($#(%x),:) $;($iif(%t == *,---,%t)) %f $iif(%r == 1,$[(r)) | %r = "" | inc %x
}
_e * channels: $numtok($_h(channels),44) $iif($_h(channels),$;($v1)) | _e * filters: $_filter(0)
}
if ($1 == tip) {
if ($2 == delay) {
_h add delay $iif($3 isnum 1-30,$int($3),5)
_e tooltip delay set to: $_h(delay) $+(sec,$iif($_h(delay) != 1,s))
}
if ($2 == fade) {
_h add fade $iif($_h(fade) == 1,0,1)
_e toggled tooltip fade: $iif($_h(fade) == 1,on,off)
}
if (!$2) {
_h add tooltips $iif($_h(tooltips) == 1,0,1)
_e toggled tooltips: $iif($_h(tooltips) == 1,on,off)
}
}
}
/*
# tooltips section
# mPRE Notifications v1
*/
/*
# $trim(text,font,size,length)
# returns 'text' trimmed to 'length' (pixels) for tooltip
*/
alias -l trim {
var %c = 0, %x = $1, %z, %i = $len(%x), %trim
if ($width(%x,$2,$3,0,1) > $$4) { while (%i) { %z = $left(%x,%i) | if ($width(%z,$2,$3,0,1) < $4) { %trim = $+(%z,...) | break } | dec %i } }
if (!%trim) { %trim = %x }
return %trim
}
/*
# /ptip.close
# closes currently open tooltip and opens the next in queue (if any)
# queue idea was borrowed from gr33ny; he uses vars, i use hash tables
*/
alias ptip.close {
var %h = @ptip, %i = 1, %m, %r, %v, %x | window -c %h
if ($hget(%h,1)) { ptip $hget(%h,1) | while ($hget(%h,$calc(%i +1))) { .hadd %h %i $v1 | inc %i } | .hdel %h %i }
if ($hget(%h)) && ($hget(%h,0).item == 0) { .hfree %h }
}
/*
# /ptip releasemessage
# opens tooltip (message is optional; meant for nuke/unnuke)
*/
alias ptip {
tokenize 1 $1-
var %@ = @ptip, %tm = $time(mm/dd/yy HH:nn:ss), %rls = $trim($1,%font,%sz,620), %msg
var %h = 0, %i, %x, %w = 0, %y
var %font = Tahoma, %sz = 14, %bg = 14811135, %bt = 6381921, %tt = 16777215
if ($width(%rls,%font,%sz,0,1) < 220) { %w = 250 }
if (!%w) { %w = $calc(30 +$width(%rls,%font,%sz,0,1)) }
%msg = $trim($2,%font,$calc(%sz -2),$calc(%w -35))
%h = $calc(36 +$height(%rls,%font,%sz) +$height(%msg,%font,$calc(%sz -2)))
%x = $calc((($window(-2).x +$window(-2).w) -%w) -10) | %y = $calc((($window(-2).y +$window(-2).h) -%h) -10)
if ($window(%@)) {
if (!$hget(%@)) { .hmake %@ }
%i = $calc($hget(%@,0).item +1)
.hadd %@ %i $+(%rls,,%msg)
return
}
window -pBhdo +dL %@ %x %y %w %h
drawrect -nrf %@ %bg 1 0 0 %w %h
drawrect -nrf %@ 0 1 0 0 %w 20
drawrect -nr %@ 0 0.5 0 0 %w %h
drawpic -cntros %@ 16711935 5 2 16 16 4 $+(",$mircexe,")
drawtext -npr %@ %tt %font $calc(%sz -2) 26 2 mPRE Notifications
drawtext -npr %@ %tt %font $calc(%sz -4) $calc((%w -5) -$width(%tm,%font,$calc(%sz -4),0,1)) 3 %tm
drawtext -npr %@ %bt %font %sz 10 26 %rls
if ($0 == 2) && (%msg) { drawtext -npr %@ %bt %font $calc(%sz -2) 15 46 %msg }
drawdot %@ | window -a %@ | showmirc -r | .timerptip.close 1 $_h(delay) ptip.close
}
/*
# LOAD/UNLOAD scripts to successfully clean everything up
# removes all necessary files after, you are just left with mPRE.mrc
*/
on *:LOAD:_e Loaded $_scr successfully. | _e To toggle tooltips on/off, type /pre tip | pre
on *:UNLOAD:var %x = mPRE | _e Unloaded $+($_scr,... goodbye!) | if ($window($+(@,%x))) { window -c $+(@,%x) } | .hfree $+($+(_,%x)) | .remove $+(_,%x,.db)
/*
# THIS NEXT PART IS WHERE THE SCRIPT COLLECTS THE INFORMATION!
# IF YOU WANT EVERYTHING TO BE ACCURATE, TEST IT FIRST!
#
# NOTE: v1.1.0 will feature a rewrite + have more channels listed below
*/
on *:TEXT:*:# {
var %f = goto _x, %i = 1, %st = $strip($1-), %x, %z, %cat, %rls, %rsn
tokenize 32 %st | %x = $0
if ($istok($_h(channels),#,44)) {
if (# == #pre) {
; #pre @ FreeQuest
if ($network == FreeQuest) {
if ($1 == PRE) { %cat = $3 | %rls = $5 | %z = P | %f }
if ($istok(NUKE UNNUKE,$1,32)) { %rls = $3 | %rsn = $5 | %z = $iif(U* iswm $1,U,N) | %f }
}
; #pre @ P2P-NET
if ($network == P2P-NET) {
if ($1 == [PRE]) { %cat = $($+($,$calc(%x -3)),2) | %rls = $($+($,3-,$calc(%x -6)),2) | %z = P | %f }
if ($istok([NUKE] [UNNUKE],$1,32)) { %cat = $($+($,$calc(%x -6)),2) | %rls = $($+($,3-,$calc(%x -9)),2) | %rsn = $($+($,$calc(%x -1)),2) | %z = $iif(?U* iswm $1,U,N) | %f }
}
}
; #sex0rs-relay @ P2P-NET
if (# == #sex0rs-relay) && ($network == P2P-NET) {
if ($1 == [PRE]) { %cat = $($+($,$calc(%x -3)),2) | %rls = $($+($,3-,$calc(%x -6)),2) | %z = P | %f }
if ($istok([NUKE] [UNNUKE],$1,32)) { %cat = $($+($,$calc(%x -6)),2) | %rls = $($+($,3-,$calc(%x -9)),2) | %rsn = $($+($,$calc(%x -1)),2) | %z = $iif(?U* iswm $1,U,N) | %f }
}
; #persian-pre @ P2P-NET
if (# == #persian-pre) && ($network == P2P-NET) {
if ($2 == PRE) { %rls = $4 | %cat = $6 | %z = P | %f }
if ($istok(NUKE UNNUKE,$2,32)) { %rls = $4 | %rsn = $6 | %z = $iif(U* iswm $2,U,N) | %f }
}
; #pre-rts @ P2P-NET
if (# == #pre-rts) && ($network == P2P-NET) {
if ($2 == PRE) { %cat = $6 | %rls = $10 | %z = P | %f }
if ($istok(NUKE UNNUKE,$2,32)) { %rls = $6 | %rsn = $10 | %z = $iif(U* iswm $2,U,N) | %f }
}
; #scc-pre @ SceneAccess
if (# == #scc-pre) && ($network == SceneAccess) {
if ($2 == PRE) { %cat = $4 | %rls = $($+($,6-,$calc(%x -1)),2) | %z = P | %f }
if ($istok(NUKE UNNUKE,$2,32)) { %rls = $($+($,4-,$calc(%x -3)),2) | %rsn = $($+($,$calc(%x -1)),2) | %z = $iif(U* iswm $2,U,N) | %f }
}
; #st.pre @ P2P-NET
if (# == #st.pre) && ($network == P2P-NET) {
if ($;(*) iswm $1) && ($2 == -) { %rls = $3 | %cat = $mid($1,2,-1) | %z = P | %f }
if ($istok([NUKE] [UNNUKE],$1,32)) { %rls = $3 | %rsn = $mid($5,2,-1) | %z = $iif(?U* iswm $1,U,N) | %f }
}
; #420-pre @ Cyanide-x (sandbox)
if (# == #420-pre) && ($network == Cyanide-x) {
if ($1 == [PRE]) { %cat = $($+($,$calc(%x -3)),2) | %rls = $($+($,3-,$calc(%x -6)),2) | %z = P | %f }
if ($istok([NUKE] [UNNUKE],$1,32)) { %cat = $($+($,$calc(%x -6)),2) | %rls = $($+($,3-,$calc(%x -9)),2) | %rsn = $($+($,$calc(%x -1)),2) | %z = $iif(?U* iswm $1,U,N) | %f }
}
:_x | var %_x = 1, %_c, %_f, %_r, %_t
while ($_filter(%_x)) {
%_t = $v1 | %_c = $gettok(%_t,1,1) | %_f = $gettok(%_t,2,1)
if ($numtok(%_f,127) == 2) { %_r = $gettok(%_f,1,127) | %_f = $gettok(%_f,2,127) }
if (%_f iswm %rls) || ((%_r == 1) && ($regex(%rls,%_f))) {
if (%_c == *) { _w %z # -c %cat -n %rsn -r %rls }
if (%_c != *) { if ((%cat) && (%cat == %_c)) || ((!%cat) && (%z == P)) { _w %z # -c %cat -n %rsn -r %rls } }
}
inc %_x
}
}
}
/*
#################################################################################
# changelog #
# #
# 1.0.6 (20070628) #
# ! rewrote, redesigned, and renamed tooltip command #
# + added fade/delay to /pre tip [option]; /pre tip still toggles tips #
# + added tooltip queue (tooltips will popup in succession) #
# + $trim(text,font,size,length) for tooltips; trims text to length #
# #
# 1.0.5 (20070614) #
# ! redesigned filter check #
# ! fixed regex/normal randomly missing some filters #
# ! fixed tooltip timer issue #
# ! fixed #st.pre issues (haha i must have been stoned...) #
# #
# 1.0.4 (20070612) #
# ! modified /pre, /_w, and filter-check (now works for normal and regex) #
# ! modified window output slightly again... didnt like the last change #
# ! tweaked tooltips a little #
# + added on UNLOAD cleanup routine #
# #
# 1.0.3 (20070611) #
# ! modified window output slightly #
# + added tooltips (toggle with /pre tip) #
# #
# 1.0.2 (20070608) #
# ! renamed to mPRE #
# ! updated everything in script #
# ! changed /_error output #
# + added contact info, regexp examples, channel info #
# #
# 1.0.1 (20070603) #
# ! updated /_w for adding info to @window #
# + added probable matches (matches if no category, denotes probable match) #
# + -r now accepted for regexp filter match #
# + listing of filters now possible with /pre list #
# - removed /_f (filter-check alias); now inside event #
# #
# 1.0.0 (20070601) #
# + first (semi-)working version #
#################################################################################
*/