Peace & Protection 4.00 — File Browser

PeaceProtection4.00v4.0 / PeaceProtection4.00v4.0 / SCRIPT / BANLIST.MRC

BANLIST.MRC — 17.17 KB — Download this file

; #= P&P -rs
; ########################################
; Peace & Protection
; Banlist / etc. editing, and blacklist
; ########################################

;
; Banlist/etc. editing
;
alias -l _openlist if ($window($1)) clear $1 | else _window 2.6 -nhl -t3,30,39,50 $1 -1 -1 -1 -1 @banlist | _windowreg $1 _closebanlist
alias -l _addlist if ($3) aline $1  	 $+ $2 $+ 	 $_round($calc(($ctime - $4) / 86400),2) $+ 	 $+ $3 | else aline $1  	 $+ $2 $+ 	 	 
alias -l _finlist {
  .disable #- $+ $1list
  if ($window(@ [ $+ [ $1 ] $+ -list- $+ [ $2 ] ] ) == $null) {
    if ($halted) return
    <empty.list> $2 $1
    halt
  }
  iline @ $+ $1 $+ -list- $+ $2 1 Double-click to toggle an entry. (right-click for other options)
  iline @ $+ $1 $+ -list- $+ $2 2 Any changes will $:b(not) be made until you close the window.
  iline @ $+ $1 $+ -list- $+ $2 3  
  iline @ $+ $1 $+ -list- $+ $2 4  	 $+ $1 $+ 	Days old	Set by
  iline @ $+ $1 $+ -list- $+ $2 5  	 $+ $_ultab(6,8,6)
  window -awb @ $+ $1 $+ -list- $+ $2
  _banupd @ $+ $1 $+ -list- $+ $2
  halt
}

#-banlist off
raw &367:*:if ($window(@Ban-list- [ $+ [ $2 ] ] ) == $null) _openlist @Ban-list- $+ $2 | _addlist @Ban-list- $+ $2- | halt
#-banlist end
raw 367:*:{
  if ($2 == %-scanchan) {
    var %num = $numtok(%-scanunban,32)
    :loop
    if (($gettok(%-scanunban,%num,32) iswm $3) || ($3 iswm $gettok(%-scanunban,%num,32))) %-scanhit = %-scanhit $3
    if (%num > 1) { dec %num | goto loop }
  }
  else {
    if ($halted) return | .enable #-banlist | _openlist @Ban-list- $+ $2 | _addlist @Ban-list- $+ $2-
  }
  halt
}
raw 368:*:{
  if ($2 == %-scanchan) { _scanu4 $2 | halt }
  else _finlist Ban $2
}
#-invitelist off
raw &346:*:if ($window(@Invite-list- [ $+ [ $2 ] ] ) == $null) _openlist @Invite-list- $+ $2 | _addlist @Invite-list- $+ $2- | halt
#-invitelist end
raw &346:*:.enable #-invitelist | _openlist @Invite-list- $+ $2 | _addlist @Invite-list- $+ $2- | halt
raw 347:*:_finlist Invite $2
#-exceptionlist off
raw &348:*:if ($window(@Exception-list- [ $+ [ $2 ] ] ) == $null) _openlist @Exception-list- $+ $2 | _addlist @Exception-list- $+ $2- | halt
#-exceptionlist end
raw &348:*:.enable #-exceptionlist | _openlist @Exception-list- $+ $2 | _addlist @Exception-list- $+ $2- | halt
raw 349:*:_finlist Exception $2

menu @Banlist {
  dclick:_bangroup $active _bantog
  $iif($sline($active,1).ln > 5,Toggle):_bangroup $active _bantog
  $iif($sline($active,1).ln > 5,Remove):_bangroup $active _banrem
  Add...:_banadd $active $mid(beI,$pos(bei,$mid($active,2,1),1),1) $_entry(-1,$null,$remove($gettok($active,1,45),@),to add to, [ [ $gettok($active,3-,45) ] $+ ] ?,(You must enter a mask, not a nickname.)) +
  $iif($sline($active,1).ln > 5,Modify...):_bangroup $active _banmod
  -
  Remove
  .Entries matching...:{ 
    var %whom = $_entry(-1,$null,Nickname address or wildcard mask to clear matches for?)
    if ($_ppmask(%whom,1,1,1)) _bancln $active * $ifmatch
    else _Q.userhost _bancln $+ $active $+ *&n!&a dispsUser $+ $:t(%whom) $+ notfoundtocleanentries %whom
  }
  .Nick-based entries:_bancln $active n
  .Single IP entries:_bancln $active i
  .-
  .Entries set by servers:_bancln $active s
  .Entries set by...:_bancln $active b $_entry(-1,$me,Remove all entries set by whom? (wildcards OK))
  .-
  .Entries newer than...:_bancln $active <= $_entry(-2,0.1,Remove all entries younger than how many days?)
  .Entries older than...:_bancln $active >= $_entry(-2,5,Remove all entries older than how many days?)
  .-
  .All entries:_banall $active _banrem
  Backup
  .Export...:var %export = $$dir="File to export to?" *.txt | if ($exists(%export)) _fileopt 1 %export | _banexp $active %export
  .-
  .Import, adding to list...:_banimp $active 0 $$dir="Banlist to import?" *.txt
  .Import, replacing list...:_banimp $active 1 $$dir="Banlist to import?" *.txt
  .-
  .$iif($sline($active,1).ln > 5,Copy to blacklist...):black $active
  .$iif($sline($active,1).ln > 5,Move to blacklist...):var %win = $active | black %win | _bangroup %win _banrem
  -
  $iif($count($window($active).title,-) > 1,Changes)
  .Perform changes:_closebanlist $active
  .-
  .Cancel changes:_banall $active _banok
  .Close and cancel:_windowreg $active | _dowclose $active | window -c $active
}
alias -l _bangroup var %blip = $mid(beI,$pos(bei,$mid($1,2,1),1),1),%num = $sline($1,0) | :loop | if (%num) { if ($sline($1,%num).ln > 5) $2 $1 $ifmatch %blip | dec %num | goto loop } | _banupd $1
alias -l _banall var %blip = $mid(beI,$pos(bei,$mid($1,2,1),1),1),%num = $line($1,0) | :loop | if (%num > 5) { $2 $1 $ifmatch %blip | dec %num | goto loop } | _banupd $1
alias _bancln {
  var %blip = $mid(beI,$pos(bei,$mid($1,2,1),1),1),%num = $line($1,0)
  :loop
  if (%num > 5) {
    var %kill
    goto $2
    :* | var %ban = $gettok($line($1,%num),2,9) | if ((%ban iswm $3) || ($3 iswm %ban)) %kill = 1 | goto next
    :n | if ($remove($gettok($gettok($line($1,%num),2,9),1,33),*,?) != $null) %kill = 1 | goto next
    :i | var %ban = $gettok($gettok($line($1,%num),2,9),2-,64) | if ((* !isin %ban) && (? !isin %ban)) %kill = 1 | goto next
    :b | if ($3 iswm $gettok($line($1,%num),4,9)) %kill = 1 | goto next
    :s | var %whom = $gettok($line($1,%num),4,9) | if ((. isin %whom) && (@ !isin %whom)) %kill = 1 | goto next
    :<= | :>= | if ($gettok($line($1,%num),3,9) $2 $3) %kill = 1
    :next
    if (%kill) _banrem $1 %num %blip
    dec %num | goto loop
  }
  _banupd $1
}
alias -l _bantog {
  if (+ isin $gettok($line($1,$2),1,9)) dline $1 $2
  elseif (- isin $gettok($line($1,$2),1,9)) rline $1 $2  	 $+ $gettok($line($1,$2),2-4,9)
  else rline $1 $2 - $+ $3 $+ 	 $+ $gettok($line($1,$2),2-4,9) $+ 	 (removing $remove($gettok($1,1,45),@) $+ )
}
alias -l _banok {
  if (+ isin $gettok($line($1,$2),1,9)) dline $1 $2
  elseif (- isin $gettok($line($1,$2),1,9)) rline $1 $2  	 $+ $gettok($line($1,$2),2-4,9)
}
alias _banrem {
  if (+ isin $gettok($line($1,$2),1,9)) dline $1 $2
  else rline $1 $2 - $+ $3 $+ 	 $+ $gettok($line($1,$2),2-4,9) $+ 	 (removing $remove($gettok($1,1,45),@) $+ )
}
alias _banadd {
  var %num = $line($1,0)
  :loop
  if ($gettok($line($1,%num),2,9) == $3) {
    if (- isin $gettok($line($1,%num),1,9)) rline $1 %num  	 $+ $gettok($line($1,%num),2-4,9)
    goto done
  }
  if (%num > 5) { dec %num | goto loop }
  aline $1 + $+ $2 $+ 	 $+ $3 $+ 	 0 $+ 	 $+ $me $+ 	 (adding $remove($gettok($1,1,45),@) $+ )
  :done
  if ($4) _banupd $1
}
alias -l _banmake {
  var %num = $line($1,0)
  :loop
  if ($gettok($line($1,%num),2,9) == $2) {
    rline $1 %num  	 $+ $gettok($line($1,%num),2-4,9)
    goto done
  }
  if (%num > 5) { dec %num | goto loop }
  aline $1  	 $+ $2 $+ 	 0 $+ 	 $+ $3
  :done
  _banupd $1
}
alias -l _bankill {
  var %num = $line($1,0)
  :loop
  if ($gettok($line($1,%num),2,9) == $2) dline $1 %num
  if (%num > 5) { dec %num | goto loop }
  _banupd $1
}
alias -l _banmod {
  var %newban = $_entry(-1,$gettok($line($1,$2),2,9),New mask for,$remove($gettok($1,1,45),@),?)) +
  _banrem $1-
  _banadd $1 $3 %newban
}
alias -l _banupd {
  if ($line($1,0) < 6) { titlebar $1 | return }
  var %title = -
  if ($fline($1,+*,0,0)) %title = %title Adding $ifmatch $remove($gettok($1,1,45),@) $+ $iif($ifmatch != 1,s) -
  if ($fline($1,-*,0,0)) %title = %title Removing $ifmatch $remove($gettok($1,1,45),@) $+ $iif($ifmatch != 1,s) -
  var %cur = $calc($line($1,0) - $fline($1,-*,0,0) - 5)
  if (%title == -) %title = - %cur total $remove($gettok($1,1,45),@) $+ $iif(%cur != 1,s)
  else %title = %title Resulting in %cur total $remove($gettok($1,1,45),@) $+ $iif(%cur != 1,s)
  titlebar $1 %title
}
alias _closebanlist {
  var %channel = $mid($1,$calc($pos($1,-,2) + 1),$len($1))
  _init.mass %channel
  if (($fline($1,-*,1,0)) || ($fline($1,+*,1,0))) {
    if ($me !isop %channel) { disprs %channel $:cl(%channel) Changes to $remove($gettok($1,1,45),@) $+ list canceled- You are not opped | return }
  }
  :loopu
  if ($fline($1,-*,1,0)) {
    _add.mass - $mid($line($1,$ifmatch),3,1) $gettok($line($1,$ifmatch),2,9)
    dline $1 $fline($1,-*,1,0)
    goto loopu
  }
  :loopb
  if ($fline($1,+*,1,0)) {
    _add.mass + $mid($line($1,$ifmatch),3,1) $gettok($line($1,$ifmatch),2,9)
    dline $1 $fline($1,+*,1,0)
    goto loopb
  }
  _flush.mass
}
alias -l _banimp {
  if ($2) _banall $1 _banrem
  var %read,%num = 1,%last = $lines($3-),%type = $mid(beI,$pos(bei,$mid($1,2,1),1),1)
  :loop
  %read = $read -nl [ $+ [ %num ] ] $3-
  if ($matchtok($matchtok(%read,*,1,9),*,1,32)) _banadd $1 %type $ifmatch
  if (%num < %last) { inc %num | goto loop }
  _banupd $1
}
alias _banexp {
  write " $+ $2- $+ " $remove($gettok($1,1,45),@) $+ list from $mid($1,$calc($pos($1,-,2) + 1),$len($1)) / %!net / $me ( $+ $_datetime $+ )
  var %line,%num = 6
  :loop
  %line = $line($1,%num)
  if (%line) {
    if (- !isin $gettok(%line,1,9)) {
      if ($gettok(%line,3,9)) write " $+ $2- $+ " $gettok(%line,2,9) 	set by $gettok(%line,4,9) $gettok(%line,3,9) days ago
      else write " $+ $2- $+ " $gettok(%line,2,9)
    }
    inc %num | goto loop
  }
}
on *:BAN:#:if ($window(@Ban-list- [ $+ [ $chan ] ] )) _banmake @Ban-list- $+ $chan $banmask $nick
on *:UNBAN:#:if ($window(@Ban-list- [ $+ [ $chan ] ] )) _bankill @Ban-list- $+ $chan $banmask

;
; Blacklist
;
alias blacklist blackedit
alias blackedit {
  if ($window(@Blacklist)) clear @Blacklist
  else _window 2.7 -sl -t10,25,40 @Blacklist $_winpos(8,12,10,10) @Blacklist
  var %file,%num,%line,%nick,%chan,%note
  %file = $_cfg(userinfo.ini)
  %num = $ulist(*,black,0)
  :loop
  if (%num) {
    %line = $ulist(*,black,%num)
    %nick = $readini -n %file %line nick
    %chan = $readini -n %file %line chan
    %note = $readini -n %file %line note
    aline @Blacklist $iif(%nick == $null,-,%nick) $+ 	 $+ %line $+ 	 $+ ( $+ $iif(%chan == $null,all,%chan) $+ ) $+ 	 $+ $_readprep(%note)
    dec %num | goto loop
  }
  iline @Blacklist 1 The following addresses will be banned and kicked where you are op.
  iline @Blacklist 2 You will also ignore private messages and CTCPs from them.
  iline @Blacklist 3 Double-click to edit a user, or right-click for options.
  iline @Blacklist 4  
  iline @Blacklist 5 Nickname	Address	Channel	Reason
  iline @Blacklist 6 $_ultab(8,7,7,7)
  window -b @Blacklist
}

menu @Blacklist {
  dclick:if ($sline($active,1).ln > 6) black $gettok($sline($active,1),2,9)
  Add user...:black $_entry(-1,$null,Nickname or address to blacklist?)
  $iif($sline($active,1).ln > 6,Remove)::loop | black -r $gettok($sline($active,1),2,9) | if ($sline($active,1).ln) goto loop
  -
  $iif($sline($active,1).ln > 6,Edit...):black $gettok($sline($active,1),2,9)
}

dialog blackedit {
  title "Blacklist"
  size -1 -1 300 260

  box "Blacklisting:", 101, 10 10 280 79
  text "&Nick:", 106, 20 34 25 20
  edit "", 1, 50 30 120 22
  text "(for reference only)", 107, 175 34 100 20
  text "&Mask:", 108, 20 59 30 20
  combo 2, 51 56 230 120, edit drop

  box "Where:", 102, 10 93 280 86
  radio "&All channels", 5, 20 113 80 16
  radio "&Only in:", 6, 20 133 55 16
  edit "", 7, 75 130 205 22, disable
  text "(multiple channels OK)", 103, 79 156 205 20

  text "&Reason:", 104, 20 191 40 20
  combo 8, 65 187 215 140, edit drop

  button "&Blacklist", 201, 10 225 80 25, OK default
  button "&Cancel", 202, 110 225 80 25, cancel
  button "R&emove", 203, 210 225 80 25, disable

  edit "", 241, 1 1 1 1, hide autohs
  edit "", 242, 1 1 1 1, hide autohs result
}
on *:DIALOG:blackedit:sclick:5:did -b $dname 7
on *:DIALOG:blackedit:sclick:6:did -e $dname 7
on *:DIALOG:blackedit:init:*:{
  var %reason
  if (@* iswm %.who) {
    did -ae $dname 7 $gettok(%.who,3-,45)
    did -cf $dname 6
    did -abc $dname 2 (banlist transfer from $gettok(%.who,3-,45) $+ )
    did -a $dname 242 %.who
  }
  else {
    if ($istok($level(%.addr),=black,44)) {
      ; saves original address
      did -a $dname 241 %.addr
      did -e $dname 203
      var %file = $_cfg(userinfo.ini)
      did -a $dname 1 $readini -n %file %.addr nick
      %reason = $readini -n %file %.addr note
      var %chan = $readini -n %file %.addr chan
      if (%chan) { did -ae $dname 7 %chan | did -c $dname 6 }
      else did -c $dname 5
    }
    else {
      did -c $dname 5
      if ($gettok(%.who,1,33) != *) did -a $dname 1 $ifmatch
    }
    if ($did(7) == $null) {
      if ($active ischan) did -a $dname 7 $active
      elseif ($comchan($did(1),1)) did -a $dname 7 $ifmatch
    }
    did -ac $dname 2 %.addr
    if (* !isin %.who) {
      if (*!*@* iswm %.who) _ddaddm $dname 2 %.who 022 030 100 002 001 111
      elseif ($address(%.who,5)) _ddaddm $dname 2 $ifmatch 022 030 100 002 001 111
    }
  }
  _fillrec $dname 8 0 $_cfg(black.lis) 0 $_readprep(%reason)
  if (%reason == $null) did -u $dname 8
  unset %.who %.addr
}
on *:DIALOG:blackedit:sclick:201:{
  if ($did(8) == $null) { _juryrig2 _blackconfirm | halt }
  ; remove old?
  if (($did(241) != $did(2)) && ($did(241) != $null)) .black -r $did(241)
  ; add new
  if ($did(8) == -) did -r $dname 8
  ; (transfer?)
  if ($did(242) != $null) {
    var %num = 1
    if (($did(6).state) && ($left($did(7),1) isin &#)) var %where = $_s2c($did(7))
    else var %where = *
    var %other = = $+ $gettok($did(1),1,32) $did(8)
    :loop
    if ($sline($did(242),%num)) {
      black %where $gettok($ifmatch,2,9) %other
      inc %num | goto loop
    }
  }
  else {
    if (($did(6).state) && ($left($did(7),1) isin &#)) black $_s2c($did(7)) $did(2) = $+ $gettok($did(1),1,32) $did(8)
    else black * $did(2) = $+ $gettok($did(1),1,32) $did(8)
  }
}
on *:DIALOG:blackedit:sclick:203:black -r $did(241) | dialog -c $dname
alias _blackconfirm if ($_okcancel(1,You have not entered a blacklist reason- Continue?)) { did -ca blackedit 8 - | dialog -k blackedit }

; /black [-r|#channel(s)|*] nick|addr|@window [=nick] [reason]
; pops up dialog only if just nick/addr is given
alias black {
  var %num,%nick,%line,%line2
  if (($left($1,1) isin -&#) || ($1 == *)) { var %where = $1,%who = $2,%why = $3- }
  else { var %where,%who = $1,%why = $2- }
  if (%who == $null) _qhelp /black $1-

  if (@* iswm %who) { set %.who %who | return $$dialog(blackedit,blackedit,-4) }

  var %dialog = $iif($1- == %who,1,0)

  %who = $_nc(%who)
  var %addr = $_ppmask(%who,$_stmask(3),1)
  if (%addr == $null) {
    disp Looking up address of $:t(%who) $+ ...
    _Q.userhost black $+ %where $+ &n!&a $+ $iif(%why != $null,$_s2p(%why)) dispNouser $+ $:t(%who) $+ foundtoblacklist. %who
    halt
  }

  ; dialog
  if (%dialog) { set %.who %who | set %.addr %addr | _dialog -ma blackedit blackedit | return }

  var %file = $_cfg(userinfo.ini)
  if (%where == -r) {
    if ($window(@Blacklist)) {
      %num = 7 | :loop1 | if ($line(@Blacklist,%num)) { if ($gettok($ifmatch,2,9) == %addr) dline @Blacklist %num | else inc %num | goto loop1 }
    }
    else {
      if ($istok($level(%addr),=black,44)) dispa Removing $:s(%addr) from blacklist.
      else dispa $:s(%addr) is not in blacklist.
    }
    .ruser black %addr
    if ($level(%addr) == $dlevel) .ruser %addr
    upd.nick.nickbit %addr
    remini %file %addr
  }
  else {
    if (=* iswm $gettok(%why,1,32)) { %nick = $right($gettok(%why,1,32),-1) | %why = $gettok(%why,2-,32) }
    elseif ((* !isin $gettok(%who,1,33)) && ($gettok(%who,1,33) != $null)) %nick = $ifmatch
    else %nick = $readini -n %file %addr nick
    if (%why == $null) { %why = $readini -n %file %addr note | %why = $_readprep(%why) }
    if (%where == $null) %where = $readini -n %file %addr chan
    if (%where == *) var %where
    if ($window(@Blacklist)) {
      %line = $iif(%nick == $null,-,%nick) $+ 	 $+ %addr $+ 	 $+ ( $+ $iif(%where == $null,all,%where) $+ ) $+ 	 $+ %why
      %num = 7 | :loop2
      if ($line(@Blacklist,%num)) {
        if ($gettok($ifmatch,2,9) == %addr) _ridline @Blacklist %num %line
        else { inc %num | goto loop2 }
      }
      else iline @Blacklist $calc($line(@Blacklist,0) + 1) %line
    }
    else {
      if (%nick) %line = $:t(%nick) ( $+ $:s(%addr) $+ ) | else %line = $:s(%addr)
      if (%where == $null) %line2 = $:s(all channels) | else %line2 = $:s(%where)
      dispa $iif($istok($level(%addr),=black,44),Modifying,Adding) blacklist entry- %line in %line2 (reason- $iif(%why == $null,none,$:s(%why)) $+ )
    }
    if ($level(%addr) == $dlevel) .auser -a $dlevel %addr
    .auser -a black %addr
    if (%nick) writeini %file %addr nick %nick | else remini %file %addr nick
    if (%why) { writeini %file %addr note $_writeprep(%why) | _recent2 black 9 %why } | else remini %file %addr note
    if (%where) writeini %file %addr chan %where | else remini %file %addr chan
    upd.nick.nickbit %addr
    set -u %.punishwait 1
    %num = $chan(0)
    :loopC
    if (($me isop $chan(%num)) && ($ialchan(%addr,$chan(%num),0))) {
      if ((%where == $null) || ($istok(%where,$chan(%num),44))) {
        disprs $chan(%num) $:cl($chan(%num)) Blacklisted $:s(%addr) $+ - Kickbanning...
        %line = $_msg(black) | if (&reason !isin %line) %line = %line &reason&
        kb $chan(%num) %addr $replace(%line,&reason&,%why,&addr&,%addr)
      }
    }
    if (%num > 1) { dec %num | goto loopC }
  }
}