rendered paste bodyon *:START: {
echo -a /BLIST v2.0 - Creating and loading hashtables
if (!$hget(blist)) {
hmake blist 100
if ($isfile(blist.hsh)) { hload blist blist.hsh }
echo -a Hashtable "blist" created $iif($isfile(blist.hsh),and loaded,$null)
}
if (!$hget(chan)) {
hmake chan 50
if ($isfile(chan.hsh)) { hload chan chan.hsh }
echo -a Hashtable "chan" created $iif($isfile(chan.hsh),and loaded,$null)
}
if (%blist.chan == $null) { set %blist.chan 0 }
if (%blist.banmsk == $null) { set %blist.banmsk 2 3 }
}
on *:LOAD: {
echo -a /BLIST v2.0 - Load Successfull
echo -a Now creating and loading hashtables
if (!$hget(blist)) {
hmake blist 100
if ($isfile(blist.hsh)) { hload blist blist.hsh }
echo -a Hashtable "blist" created $iif($isfile(blist.hsh),and loaded,$null)
}
if (!$hget(chan)) {
hmake chan 50
if ($isfile(chan.hsh)) { hload chan chan.hsh }
echo -a Hashtable "chan" created $iif($isfile(chan.hsh),and loaded,$null)
}
if (%blist.chan == $null) { set %blist.chan 0 }
if (%blist.banmsk == $null) { set %blist.banmsk 2 3 }
}
alias blist { $dialog(blist,blist) }
#blacklist on
on *:JOIN:#: {
if ((%blist.chan == 1) && ($chan !isin %blist.chans)) { halt }
var %bmask = $gettok(%blist.banmsk,1,32)
if (($me isop $chan) && ($hget(blist,$address($nick,%bmask)))) {
mode $chan -o+b $nick $address($nick,%bmask)
kick $chan $nick $gettok($hget(blist,$address($nick,%bmask)),2-,32) Blacklisted
}
}
#blacklist end
alias -l blist.add {
var %bmask = $gettok(%blist.banmsk,1,32)
if (%blist.chan == 0) {
var %x = $chan(0)
while (%x) {
mode $chan(%x) +b $1
if ($2 != nomsg) { msg $chan(%x) Blacklisted: $1 }
var %y = $nick($chan(%x),0)
while (%y) {
if (($address($nick($chan(%x),%y),%bmask) == $1) && ($me isop $chan(%x))) {
kick $chan(%x) $nick($chan(%x),%y) $gettok($hget(blist,$1),2-,32) Blacklisted
}
dec %y 1
}
dec %x 1
}
listpop
}
else {
var %x = $hget(chan,0).data
while (%x) {
if ($me isop $hget(chan,%x).data) {
mode $hget(chan,%x).data +b $1
var %y = $nick($hget(chan,%x).data,0)
}
while (%y) {
if ($2 != nomsg) { msg $hget(chan,%x).data Blacklisted: $1 }
if (($address($nick($hget(chan,%x).data,%y),%bmask) == $1) && ($me isop $hget($chan,%x))) {
kick $chan(%x) $nick($chan(%x),%y) $gettok($hget(blist,$1),2-,32) Blacklisted
}
dec %y 1
}
dec %x 1
}
listpop
}
}
alias -l blist.enf {
var %x = $chan(0)
while (%x) {
var %y = $nick($chan(%x),0)
while (%y) {
if ($hget(blist,$address($nick($chan(%x),%y),2))) {
if ($me isop $chan(%x)) {
mode $chan(%x) -o+b $nick($chan(%x),%y) $address($nick($chan(%x),%y),2)
kick $chan(%x) $nick($chan(%x),%y) $gettok($hget(blist,$address($nick($chan(%x),%y),2)),2-,32) Blacklisted
}
}
dec %y 1
}
dec %x 1
}
}
alias -l blist.del {
var %x = $chan(0)
var %y = $hget(blist,$did(blist,1).seltext).item
while (%x) {
mode $chan(%x) -b $hget(blist,%y).item
dec %x 1
}
hdel blist $hget(blist,%y).item
listpop
}
alias -l listpop {
did -r blist 1
var %x = $hget(blist,0).data
if (!%x) { did -b blist 13,15 }
else { did -e blist 13,15 }
while (%x) {
did -a blist 1 $gettok($hget(blist,%x).data,1,32)
dec %x 1
}
hsave blist blist.hsh $scriptdir
}
alias -l clistpop {
did -r blist.set 4
unset %blist.chans
var %x = $hget(chan,0).data
if (!%x) { did -b blist.set 6,7 }
else { did -e blist.set 6,7 }
while (%x) {
did -a blist.set 4 $hget(chan,%x).item
set %blist.chans %blist.chans $hget(chan,%x).item
dec %x 1
}
hsave chan chan.hsh $scriptdir
}
alias -l err {
set %msg Error: $1-
$dialog(err,err,-4)
}
dialog blist {
title "Blacklist [/blist]"
size -1 -1 164 88
option dbu
list 1, 2 2 134 84, sort size vsbar
button "Add", 2, 138 4 23 12
button "Edit", 3, 138 20 23 12
button "Del", 4, 138 36 23 12
button "Ok", 5, 138 74 23 12, ok
menu "&File", 6
item "&Close", 7, 6
menu "&Options", 8
item "&Add Entry", 9, 8
item "&Edit Entry", 10, 8
item break, 11, 8
item "&Delete Entry", 12, 8
item "&Clear List", 13, 8
item break, 14, 8
item "&Enforce", 15, 8
item break, 16, 8
item "&Settings", 17, 8
}
dialog blist.ae {
title "Blacklist"
size -1 -1 140 64
option dbu
text "Nickname:", 1, 8 8 25 8
edit "", 2, 38 6 94 10
text "Address:", 3, 8 22 21 8
edit "", 4, 38 20 94 10
text "Kick Msg:", 5, 8 36 23 8
edit "", 6, 38 34 94 10 autohs
button "&Ok", 7, 62 50 37 12,
button "&Cancel", 8, 102 50 37 12, cancel
}
dialog blist.set {
title "Blacklist Settings"
size -1 -1 138 102
option dbu
text "Ban mask", 1, 4 4 25 8
combo 2, 74 2 60 50, drop
check "Only blacklist in the following channels", 3, 4 16 128 10
list 4, 4 28 102 44, size vsbar
button "Add", 5, 110 28 25 12
button "Del", 6, 110 44 25 12
button "Clear", 7, 110 60 25 12
box "Blacklist Status", 8, 4 76 90 24
radio "Enabled", 9, 14 86 36 10
radio "Disabled", 10, 54 86 36 10
button "&Ok", 13, 98 88 37 12, ok cancel
}
dialog err {
title "Blacklist"
size -1 -1 182 40
option dbu
text "", 1, 2 2 177 22
button "Ok", 2, 142 26 37 12, ok cancel
}
dialog clear {
title "Blacklist"
size -1 -1 182 40
option dbu
text "Are you sure you want to clear the blacklist?", 1, 2 2 177 22
button "Yes", 2, 102 26 37 12, ok
button "No", 3, 142 26 37 12, cancel
}
on *:DIALOG:blist:*:*: {
if (!$did(blist,1).seltext) { did -b blist 3,4,10,12 }
if ($did(blist,1).seltext) { did -e blist 3,4,10,12 }
if ($devent == init) { listpop }
if ($devent == sclick) {
if ($did == 2) { $dialog(blist.a,blist.ae,-4) }
elseif ($did == 3) { $dialog(blist.e,blist.ae,-4) }
elseif ($did == 4) { blist.del }
}
if ($devent == menu) {
if ($did == 7) { dialog -c blist }
elseif ($did == 9) { $dialog(blist.a,blist.ae,-4) }
elseif ($did == 10) { $dialog(blist.e,blist.ae,-4) }
elseif ($did == 12) { blist.del }
elseif ($did == 13) { $dialog(clear,clear,-4) }
elseif ($did == 15) { blist.enf }
elseif ($did == 17) { $dialog(blist.set,blist.set,-4) }
}
}
on *:DIALOG:blist.a:*:*: {
if (($devent == sclick) && ($did == 7)) {
if (!$did(blist.a,2).text) { err You forgot to enter a nickname! }
elseif (!$did(blist.a,4).text) { err You forgot to enter an address! }
elseif ($hget(blist,$did(blist.a,4).text)) { err You already have that address blacklisted! }
elseif ($did(blist.a,4).text == *!*@*) { err Invalid address! You cannot blacklist everyone. }
elseif ($did(blist.a,4).text == $address($me,2)) { err Invalid address! You cannot blacklist yourself. }
else {
hadd blist $did(blist.a,4).text $did(blist.a,2).text $did(blist.a,6).text
blist.add $did(blist.a,4).text
dialog -c blist.a
}
}
}
on *:DIALOG:blist.e:*:*: {
if ($devent == init) {
var %x = $hget(blist,$did(blist,1).seltext).item
did -a blist.e 2 $gettok($hget(blist,%x).data,1,32)
did -a blist.e 4 $hget(blist,%x).item
did -a blist.e 6 $gettok($hget(blist,%x).data,2-,32)
}
if (($devent == sclick) && ($did == 7)) {
if (!$did(blist.e,2).text) { err You forgot to enter a nickname! }
elseif (!$did(blist.e,4).text) { err You forgot to enter an address! }
elseif ($did(blist.e,4).text == *!*@*) { err Invalid address! You cannot blacklist everyone. }
elseif ($did(blist.e,4).text == $address($me,2)) { err Invalid address! You cannot blacklist yourself. }
else {
var %x = $hget(blist,$did(blist,1).seltext).item
hdel blist $hget(blist,%x).item
hadd blist $did(blist.e,4) $did(blist.e,2) $did(blist.e,6)
blist.add $did(blist.e,4) nomsg
dialog -c blist.e
}
}
}
on *:DIALOG:blist.set:*:*: {
if (!$did(blist.set,4).seltext) { did -b blist.set 6 }
if ($did(blist.set,4).seltext) { did -e blist.set 6 }
if ($devent == init) {
clistpop
if (%blist.chan == 1) { did -c blist.set 3 }
if ($group(#blacklist).status == on) { did -c blist.set 9 }
elseif ($group(#blacklist).status == off) { did -c blist.set 10 }
did -a blist.set 2 0: *!user@host
did -a blist.set 2 1: *!*user@host
did -a blist.set 2 2: *!*@host
did -a blist.set 2 3: *!*user@*.host
did -a blist.set 2 4: *!*@*.host
did -a blist.set 2 5: nick!user@host
did -a blist.set 2 6: nick!*user@host
did -a blist.set 2 7: nick!*@host
did -a blist.set 2 8: nick!*user@*.host
did -a blist.set 2 9: nick!*@*.host
did -c blist.set 2 $gettok(%blist.banmsk,2,32)
}
if ($devent == sclick) {
if ($did == 3) { set %blist.chan $did(blist.set,3).state }
if ($did == 5) {
set %chan $input(Channel Name:,-e,Blacklist)
hadd chan %chan yes
unset %chan
clistpop
}
if ($did == 6) {
hdel chan $hget(chan,$did(blist.set,4).seltext).item
clistpop
}
if ($did == 7) {
hfree chan
hmake chan 50
clistpop
}
if ($did == 9) { enable #blacklist }
if ($did == 10) { disable #blacklist }
if ($did == 13) { set %blist.banmsk $left($gettok($did(blist.set,2).seltext,1,32),1) $did(blist.set,2).sel }
}
}
on *:DIALOG:err:*:*:{
if ($devent == init) {
did -ra err 1 %msg
unset %msg
}
}
on *:DIALOG:clear:*:*:{
if (($devent == sclick) && ($did == 2)) {
var %y = $hget(blist,0).item, %x = $chan(0)
while (%y) {
set %blist.un %blist.un $hget(blist,%y).item
dec %y 1
set %b $+(%b,b)
}
while (%x) {
mode $chan(%x) $+(-,%b) %blist.un
dec %x 1
}
unset %blist.un
unset %b
hfree blist
hmake blist
listpop
}
}