Peace and Protection — File Browser
PeaceandProtectionv4.22.8 / PeaceandProtectionv4.22.8 / Peace-and-Protection-master / script / notice.mrc
notice.mrc — 14.11 KB — Download this file
; #= P&P -rs
; ########################################
; Peace and Protection
; Notice and mass-message routines
; ########################################
;
; Notices windows
;
on *:INPUT:@Events*:_getcc | if (($left($1,1) != %.cmdchar) || (?me iswm $1) || ($mouse.key & 2)) { onotice $mid($target,$calc($pos($target,-,1) + 1)) $1- | halt }
on *:INPUT:@Notices*:_getcc | if ($left($1,1) == %.cmdchar) { .timer -mo 1 0 editbox -p $active $iif($istok(n msg notice onotice ohnotice ovnotice omsg,$right($1,-1),32),$1-2,$1) | if (?notice iswm $1) { ntc $2- | halt } }
menu @Notices {
Text options...:textopt
}
;
; Recent notices (includes onotice support) also notice flood support
;
on ^*:NOTICE:*:*:{
if (($level($fulladdress) == $dlevel) && (!$_isserv($nick))) {
if ($hget(pnp.flood. $+ $cid,noticehalt.mass)) { hadd -u60 pnp.flood. $+ $cid noticehalt.mass 1 | halt }
if ($hget(pnp.flood. $+ $cid,noticehalt. $+ $site)) { hadd -u60 pnp.flood. $+ $cid noticehalt. $+ $site 1 | halt }
if ($hget(pnp.flood. $+ $cid,noticemass)) {
if ($_genflood(notice.mass,$hget(pnp.config,xnotice.cfg))) {
hadd -u60 pnp.flood. $+ $cid noticehalt.mass 1
hadd -u60 pnp.flood. $+ $cid noticemass 1
var %site = (all)
_alert Flood Notice flood detected- Further notices from %site won't be shown
halt
}
}
if ($_genflood(notice. $+ $site,$hget(pnp.config,xnotice.cfg))) {
hadd -u60 pnp.flood. $+ $cid noticehalt. $+ $site 1
hadd -u60 pnp.flood. $+ $cid noticemass 1
_alert Flood Notice flood detected- Further notices from $site won't be shown
halt
}
}
if (($target ischan) || ($1 == DCC)) return
if (((@* iswm $target) && (@%* !iswm $target) && (@+* !iswm $target)) || (%.opnotice)) _recseen 10 notice $right($target,-1) +
else _recseen 10 notice $nick
}
;
; Notice msg formatting
;
alias _naction if ($gettok($1,1,32) == /me) return * $me $gettok($1-,2-,32) | else return $1-
alias _mnmsg {
var %msg = $_msg($1)
if (&msg& !isin %msg) %msg = %msg &msg&
if ($me ison $2) return $msg.compile(%msg,&chan&,$2,&ops&,$nick($2,0,o),&hops&,$nick($2,0,h),&vocs&,$nick($2,0,v),&users&,$nick($2,0),&ohs&,$nick($2,0,oh),&ovs&,$nick($2,0,ohv),&nops&,$nick($2,0,r),&msg&,$_naction($3-))
else return $msg.compile(%msg,&chan&,$2,&ops&,??,&hops&,??,&vocs&,??,&users&,??,&ohs&,??,&ovs&,??,&nops&,??,&msg&,$_naction($3-))
}
alias _abmsg {
var %msg = $_msg($1)
if (&msg& !isin %msg) %msg = %msg &msg&
return $msg.compile(%msg,&chan&,$2,&nick&,$3,&targets&,$calc($nick($2,0) - $numtok($3,44)),&msg&,$_naction($4-))
}
alias _pvmsg {
var %msg = $_msg($1)
if (&msg& !isin %msg) %msg = %msg &msg&
return $msg.compile(%msg,&nick&,$2,&targets&,$3,&msg&,$_naction($4-))
}
;
; Mass notices (op/etc)
;
; Used to send a notice, shows to @Notices/@Events-* if active, else channel window
; _show.send.notice #chan target text
alias -l _show.send.notice {
set -u %::text $3-
set -u %::target $2
set -u %::nick $me
set -u %::address $gettok($hget(pnp. $+ $cid,-myself),2-,33)
set -u %::chan $1
set -u %:echo echo $color(own) $iif((@Notices* iswm $active) || (@Events* iswm $active),-qati2,-qti2 $1)
theme.text NoticeSelfChan c
}
alias o onotice $1-
alias wall onotice $1-
alias onotice {
if ($1 == $null) _qhelp /onotice | _simsplit mn /onotice $1- | if (%.msg.mn == $null) _qhelp /onotice $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
var %sendto,%target = @ $+ %.chan.mn,%send = $_mnmsg(onotice,%.chan.mn,%.msg.mn)
_show.send.notice %.chan.mn @ $+ %.chan.mn %send
if ((@ isin $hget(pnp. $+ $cid,-feat)) && (($me isop %.chan.mn) || (o !isin $hget(pnp. $+ $cid,-feat)))) { _qnotice %target %send | return }
var %num = $nick(%.chan.mn,0,o)
if (%num == 0) return
:loop
if ($nick(%.chan.mn,%num,o) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop }
if (%sendto) _qnotice $_s2c(%sendto) %send
}
alias oh ohnotice $1-
alias ohnotice {
if ($1 == $null) _qhelp /ohnotice | _simsplit mn /ohnotice $1- | if (%.msg.mn == $null) _qhelp /ohnotice $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
var %num,%sendto,%target = @% $+ %.chan.mn,%send = $_mnmsg(ohnotice,%.chan.mn,%.msg.mn)
_show.send.notice %.chan.mn @% $+ %.chan.mn %send
if ((+ isin $hget(pnp. $+ $cid,-feat)) && (($me ishop %.chan.mn) || ($me isop %.chan.mn) || (o !isin $hget(pnp. $+ $cid,-feat)))) { _qnotice %target %send | return }
if ((@ isin $hget(pnp. $+ $cid,-feat)) && (($me isop %.chan.mn) || (o !isin $hget(pnp. $+ $cid,-feat)))) _qnotice @ $+ %.chan.mn %send
else {
%num = $nick(%.chan.mn,0,o)
if (%num == 0) goto hop
:loop1
if ($nick(%.chan.mn,%num,o) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop1 }
}
:hop
%num = $nick(%.chan.mn,0,h,o)
if (%num == 0) goto done
:loop2
if ($nick(%.chan.mn,%num,h,o) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop2 }
:done
if (%sendto) _qnotice $_s2c(%sendto) %send
}
alias ov ovnotice $1-
alias ovnotice {
if ($1 == $null) _qhelp /ovnotice | _simsplit mn /ovnotice $1- | if (%.msg.mn == $null) _qhelp /ovnotice $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
var %num,%sendto,%target = @+ $+ %.chan.mn,%send = $_mnmsg(ovnotice,%.chan.mn,%.msg.mn)
_show.send.notice %.chan.mn @+ $+ %.chan.mn %send
if ((+ isin $hget(pnp. $+ $cid,-feat)) && (($me isvoice %.chan.mn) || ($me ishop %.chan.mn) || ($me isop %.chan.mn) || (o !isin $hget(pnp. $+ $cid,-feat)))) { _qnotice %target %send | return }
if ((@ isin $hget(pnp. $+ $cid,-feat)) && (($me isop %.chan.mn) || (o !isin $hget(pnp. $+ $cid,-feat)))) _qnotice @ $+ %.chan.mn %send
else {
%num = $nick(%.chan.mn,0,o)
if (%num == 0) goto voice
:loop1
if ($nick(%.chan.mn,%num,o) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop1 }
}
:voice
%num = $nick(%.chan.mn,0,vh,o)
if (%num == 0) goto done
:loop2
if ($nick(%.chan.mn,%num,vh,o) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop2 }
:done
if (%sendto) _qnotice $_s2c(%sendto) %send
}
; (no ops OR hops)
alias rnotice peon $1-
alias nnotice peon $1-
alias peon {
if ($1 == $null) _qhelp /peon | _simsplit mn /peon $1- | if (%.msg.mn == $null) _qhelp /peon $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
var %sendto,%send = $_mnmsg(peon,%.chan.mn,%.msg.mn)
_show.send.notice %.chan.mn nonop/ $+ %.chan.mn %send
var %num = $nick(%.chan.mn,0,a,oh)
if (%num == 0) return
:loop
if ($nick(%.chan.mn,%num,a,oh) != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop }
if (%sendto) _qnotice $_s2c(%sendto) %send
}
alias allbut {
if ($2 == $null) _qhelp /allbut | _split mn /allbut $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
var %sendto,%chan = %.chan.mn,%msg = %.msg.mn,%target = $_nccs(44,%chan,%.targ.mn),%send = $_abmsg(allbut,%chan,%target,%msg),%ctarget = - $+ %target
_show.send.notice %chan %chan %send
var %num = $nick(%chan,0)
if (%num == 1) return
:loop
if ($nick(%chan,%num) != $me) if ($istok(%target,$ifmatch,44) == $false) %sendto = %sendto $nick(%chan,%num)
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %send | var %sendto }
if (%num > 1) { dec %num | goto loop }
if (%sendto) _qnotice $_s2c(%sendto) %send
}
alias fnotice {
if ($2 == $null) _qhelp /fnotice | _split mn /fnotice $1-
if ($len(%.msg.mn) > 300) _error Please use a smaller message.You must enter a message under 300 characters for mass notices.
if ($me !ison %.chan.mn) _error Please specify a channel you are in.You cannot send mass notices to channels you are not currently in.
_show.send.notice %.chan.mn %.targ.mn %.msg.mn
var %sendto,%num = $ialchan(%.targ.mn,%.chan.mn,0)
if (%num < 1) return
:loop
if ($ialchan(%.targ.mn,%.chan.mn,%num).nick != $me) %sendto = %sendto $ifmatch
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len(%send)) > 450)) { _qnotice $_s2c(%sendto) %.msg.mn | var %sendto }
if (%num > 1) { dec %num | goto loop }
if (%sendto) _qnotice $_s2c(%sendto) %.msg.mn
}
alias n ntc $1-
alias ntc {
if ($show == $false) { _qnotice $1- | return }
if ($2 == $null) _qhelp /ntc $1
var %sendto = $_ncs(44,$1)
if (, isin %sendto) {
if ($numtok(%sendto,44) < 6) var %msg = $_pvmsg(snotice,%sendto,$ifmatch,$2-)
else var %msg = $_pvmsg(lnotice,$numtok(%sendto,44),$numtok(%sendto,44),$2-)
}
elseif ($_ischan($1)) var %msg = $_mnmsg(cnotice,$1,$2-)
else var %msg = $_pvmsg(pnotice,%sendto,%sendto,$2-)
notice %sendto %msg
}
;
; All channel/etc messages
;
alias ame if ($chan(0) == 0) ame $1- | elseif ($1 == $null) _qhelp /ame | else _domm -c describe $1-
alias amsg if ($chan(0) == 0) amsg $1- | elseif ($1 == $null) _qhelp /amsg | else _domm -c msg $1-
alias aame if ($1 == $null) _qhelp /aame | else _domm -dqc describe $1-
alias aamsg if ($1 == $null) _qhelp /aamsg | else _domm -dqc msg $1-
alias acme if ($1 == $null) _qhelp /acme | else _domm -dq describe $1-
alias acmsg if ($1 == $null) _qhelp /acmsg | else _domm -dq msg $1-
; _domm -cqda msg|describe message - massmsg chans/queries/dccs
; -a means don't msg chans in away exclusion list or that have reaced idle exclusion status (according to away options)
alias _domm {
var %num
if (($chat(0)) && (d isin $1)) {
%num = $chat(0)
:loopD
if ($chat(%num).status == active) $2 = $+ $chat(%num) $3-
if (%num > 1) { dec %num | goto loopD }
}
var %sendto,%how = $iif($2 == msg,_privmsg,_qca)
if (($server) && ($chan(0)) && (c isin $1)) {
%num = $chan(0)
:loopC
; Skip?
if (a isin $1) {
if (($_cfgi(away.ignchan)) && ($istok($_cfgi(away.ignchanlist),$chan(%num),44))) goto skipC
; If idle block on, compare idle to current ctime or ctime of when we set away
if (($_cfgi(away.ignidle)) && ($calc($hget(pnp. $+ $cid,-chanidle. $+ $chan(%num)) + 60 * $_cfgi(away.ignidletime)) < $iif($hget(pnp. $+ $cid,away),$gettok($ifmatch,2,32),$ctime))) goto skipC
}
if ($me !ison $chan(%num)) goto skipC
if ($2 == msg) theme.msg Text $chan(%num) $color(own) $3-
else theme.msg Action $chan(%num) $color($iif($color(own) == $color(norm),action,own)) $3-
%sendto = %sendto $chan(%num)
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len($3-)) > 450)) { %how $_s2c(%sendto) $3- | var %sendto }
:skipC
if (%num > 1) { dec %num | goto loopC }
}
if (($query(0)) && (q isin $1)) {
%num = $query(0)
:loopQ
if (($hget(pnp. $+ $cid,-queryni. $+ $query(%num))) || ($query(%num) == $active)) {
if ($2 == msg) theme.msg Text $query(%num) $color(own) $3-
else theme.msg Action $query(%num) $color($iif($color(own) == $color(norm),action,own)) $3-
%sendto = %sendto $query(%num)
if (($numtok(%sendto,32) >= $hget(pnp. $+ $cid,-target)) || ($calc($len(%sendto) + $len($3-)) > 450)) { %how $_s2c(%sendto) $3- | var %sendto }
}
if (%num > 1) { dec %num | goto loopQ }
}
if (%sendto) %how $_s2c(%sendto) $3-
}
;
; Tracks idleness of queries/chans for /acme/acmsg
; (purposely allows all cmdline activity to reset idle)
;
on *:TEXT:*:?:hadd -u120 pnp. $+ $cid -queryni. $+ $nick 1
on *:ACTION:*:?:hadd -u120 pnp. $+ $cid -queryni. $+ $nick 1
on *:INPUT:?:hadd -u120 pnp. $+ $cid -queryni. $+ $target 1
on *:CLOSE:?:if ($window(Status Window)) hdel pnp. $+ $cid -queryni. $+ $target
on *:UNOTIFY:hdel pnp. $+ $cid -queryni. $+ $nick
on *:QUIT:hdel pnp. $+ $cid -queryni. $+ $nick
raw 401:*no such*:hdel pnp. $+ $cid -queryni. $+ $2
; (only update channel idle times if not away- IE while we're away, idle channels is exactly the channels we were idle in before)
on *:INPUT:#:if (!$hget(pnp. $+ $cid,away)) hadd pnp. $+ $cid -chanidle. $+ $target $ctime
on me:*:JOIN:#:if (!$hget(pnp. $+ $cid,away)) hadd pnp. $+ $cid -chanidle. $+ $chan $ctime
on me:*:PART:#:hdel pnp. $+ $cid -chanidle. $+ $chan
on *:KICK:#:if ($knick == $me) hdel pnp. $+ $cid -chanidle. $+ $chan