rendered paste bodyTim|Dark;; PVT blocker
dialog pvtblock {
title "PVT blocker"
size -1 -1 266 259
option pixels
button "Ok", 14, 159 236 50 20, ok
button "Cancel", 15, 211 236 50 20, cancel
tab "Hostmasks", 25, 5 5 255 232
check "Enable pvt blocking", 1, 13 35 160 20, tab 25
list 19, 12 59 240 117, tab 25 size
check "Block everyone", 23, 13 181 96 16, tab 25
button "Add", 20, 112 179 45 20, tab 25
button "Delete", 21, 159 179 45 20, tab 25
button "Clear", 22, 206 179 45 20, tab 25
text "", 16, 13 211 236 16, disable tab 25
edit "", 13, 12 204 239 2, tab 25
tab "Options", 26
text "Exempt from blocking if user is:", 3, 13 35 237 16, disable tab 26
edit "", 4, 14 58 239 2, tab 26
check "Notify", 5, 15 63 56 16, tab 26
check "Auto-voice", 8, 15 82 78 16, tab 26
check "Users list", 9, 101 82 71 16, tab 26
check "Protect", 6, 101 63 64 16, tab 26
check "Auto-op", 7, 183 63 65 16, tab 26
check "Service", 24, 183 82 65 16, tab 26
edit "", 10, 14 120 239 2, tab 26
check "Keep a log of the blocked queries", 12, 15 144 236 16, tab 26
check "Warn users that they've been blocked", 11, 15 182 224 16, tab 26
edit "", 17, 14 202 239 2, tab 26
check "psyBNC", 2, 15 101 70 16, tab 26
check "IRCop", 18, 101 101 70 16, tab 26
check "Notify me when somebody gets blocked", 27, 15 163 226 16, tab 26
check "Block DCC chats as well", 28, 15 125 222 16, tab 26
text "Message:", 29, 13 209 50 16, tab 26
edit "", 30, 65 207 188 21, tab 26 autohs
button "", 40, 0 0 0 0 hide
}
on *:dialog:pvtblock:*:*:{
if ($devent == init) {
seticon 45
setmdx
sethelp 40
mdx SetControlMDX $dname 19 listview rowselect report single showsel > $views
mdx SetBorderStyle $dname 4,10,13,17 staticedge
mdx SetBorderStyle $dname 20,21,22 clientedge
mdx SetFont $dname 3,16 ANSI 13 700 Tahoma
did -i $dname 19 1 headerdims 210
did -i $dname 19 1 headertext Hostmasks to block:
did -a $dname 16 $fkeyt(blocklog) to view logs
.fopen pvtblock $utilpath(pvtblock.ac)
while (1) {
var %t = $fread(pvtblock)
if (!%t) break
did -a $dname 19 $lv(%t)
}
.fclose pvtblock
if ($hget(pvtblock,pvtblock)) did -c $dname 1
if ($hget(pvtblock,notify)) did -c $dname 5
if ($hget(pvtblock,protect)) did -c $dname 6
if ($hget(pvtblock,autoop)) did -c $dname 7
if ($hget(pvtblock,autovoice)) did -c $dname 8
if ($hget(pvtblock,userslist)) did -c $dname 9
if ($hget(pvtblock,service)) did -c $dname 24
if ($hget(pvtblock,psybnc)) did -c $dname 2
if ($hget(pvtblock,ircop)) did -c $dname 18
if ($hget(pvtblock,chat)) did -c $dname 28
if ($hget(pvtblock,notice)) did -c $dname 27
if ($hget(pvtblock,warn)) did -c $dname 11
if ($hget(pvtblock,log)) did -c $dname 12
if ($hget(pvtblock,everyone)) did -c $dname 23
did -a $dname 30 $hget(pvtblock,msg)
}
elseif ($devent == sclick) {
if ($did == 14) {
utilsave pvtblock pvtblock $did($dname,1).state
utilsave pvtblock notify $did($dname,5).state
utilsave pvtblock protect $did($dname,6).state
utilsave pvtblock autoop $did($dname,7).state
utilsave pvtblock autovoice $did($dname,8).state
utilsave pvtblock userslist $did($dname,9).state
utilsave pvtblock service $did($dname,24).state
utilsave pvtblock psybnc $did($dname,2).state
utilsave pvtblock ircop $did($dname,18).state
utilsave pvtblock chat $did($dname,28).state
utilsave pvtblock notice $did($dname,27).state
utilsave pvtblock warn $did($dname,11).state
utilsave pvtblock log $did($dname,12).state
utilsave pvtblock everyone $did($dname,23).state
utilsave pvtblock msg $dlgnotnull(30,Your query/dcc chat has been rejected (pvt blocker))
.fopen -no pvtblock $utilpath(pvtblock.ac)
var %i = 2
while ($did($dname,19,%i)) {
.fwrite -n pvtblock $nolv($v1)
inc %i
}
.fclose pvtblock
}
elseif ($did == 20) {
var %t = $anainp(Hostmask:)
if (* !isin %t) && ($chr(33) !isin %t) var %t = %t $+ !*@*
did -a $dname 19 %t
}
elseif ($did == 21) {
if ($did($dname,19).sel) {
var %t = $v1
did -d $dname 19 %t
if ($did($dname,19,2)) {
if ($did($dname,19).lines >= %t) did -c $dname 19 %t
else did -c $dname 19 $calc(%t - 1)
}
}
}
elseif ($did == 22) did -r $dname 19
elseif ($did == 40) adoc utilities 6
}
}
alias ispvtb {
if ($hget(pvtblock,isblocked)) return 1
elseif (!$hget(pvtblock,pvtblock)) return
elseif ($hget(pvtblock,notify)) && ($notify($nick)) return
elseif ($hget(pvtblock,protect)) && (($protect($fulladdress)) || ($protect($nick))) return
elseif ($hget(pvtblock,autoop)) && (($aop($fulladdress)) || ($aop($nick))) return
elseif ($hget(pvtblock,autovoice)) && (($avoice($fulladdress)) || ($avoice($nick))) return
elseif ($hget(pvtblock,userslist)) && ($level($fulladdress) != $dlevel) return
elseif ($hget(pvtblock,service)) && ($netret($anet,smask) iswm $fulladdress) return
elseif ($hget(pvtblock,psybnc)) && ($nick == -psyBNC) return
elseif ($hget(pvtblock,ircop)) && ($netret($anet,sircop) iswm $fulladdress) return
else {
if ($hget(pvtblock,everyone)) {
hadd -m pvtblock isblocked 1
var %t = 1
}
else {
.fopen pvtblock $utilpath(pvtblock.ac)
while (1) {
var %n = $fread(pvtblock)
if (!%n) break
if (%n iswm $fulladdress) {
hadd -m pvtblock isblocked 1
var %t = 1
break
}
}
.fclose pvtblock
}
return %t
}
}
on ^*:OPEN:?:{
if ($ispvtb) blockit $1-
}
ctcp *:*:?:{
if ($1 == DCC) && ($2 == CHAT) && (($3 == chat) || ($3 == talk)) && ($4 isnum) && ($5 isnum) && ($hget(pvtblock,chat)) && ($ispvtb) blockit (DCC CHAT request)
}
alias -l blockit {
hdel pvtblock isblocked
if (!$halted) {
if ($hget(pvtblock,warn)) .notice $nick $hget(pvtblock,msg)
if ($hget(pvtblock,notice)) actdisp $iif($event == OPEN,Query,DCC chat) from $+ $nick ( $+ $address $+ ) has been blocked ( $+ $fkeyt(blocklog) to view log $+ )
if ($hget(pvtblock,log)) write $utilpath(pvtblock.log) $atime $anet (CID $cid $+ ) $nick $address $1-
$iif($event == OPEN,haltdef,halt)
}
}
alias blocklog {
var %f = $utilpath(pvtblock.log)
if ($lines(%f)) {
if ($window(@pvtblock)) window -c @pvtblock
window -hk[0] @pvtblock
mircustom Titlebar -w $window(@pvtblock).hwnd Pvt blocking log ( $+ $fkeyt(blockerase) to clear this log $+ )
loadbuf -p @pvtblock %f
window -a @pvtblock
}
else actdisp No entries on pvtblocker log
}
alias blockerase {
write -c $utilpath(pvtblock.log)
clear @pvtblock
}