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 #
#################################################################################
*/
suggestions;
1. treeview of the mPre window, for example:
- release1
|______nuke
|______unnuked
|______nuked
+ release2
- release3
|____nuke
|____delpre
2. ability to work from addpre source,
this would then allow the ability to add
more info into the tooltip such as file
info and genre. obviously with this it
would have to re-popup or refresh the
data after ~2 seconds to ensure any file
information or genre information was
recieved.
also, as shown above in the - release3
treebar view, it would enable the ability
for delpre and any other commands like
that.
3. on-the-fly colour changing abilities to
maximise potential and so that the user
can fully enjoy a this script.
4. perhaps a dialog window for editting all
of the settings and stuff like this also
so that the naabs, or just people who
prefer guis and such can do it this way,
which would enable the on-the-fly colour
change to take place also.