aIRC — File Browser
aIRCv0.8.69 / aIRCv0.8.69 / addons / irc5.mrc
irc5.mrc — 19.11 KB — Download this file
;/**********************************************************************
; *
; * aIRC
; * IRC Client file 5
; *
; **********************************************************************/
;
alias _: {
if (:* iswm $1) { return $right($1-,-1) }
return $1-
}
alias _irc.actwin {
if ($_irc.ircnum($active,1) != $_irc.ircnum) { return - $+ $iif($remove($1,-,a,s) != $null,$remove($1,-,a,s)) @Status $+ $_irc.ircnum }
return -a $+ $iif($remove($1,-,a,s,e) != $null,$remove($1,-,a,s,e))
}
alias _irc.winwin {
var %n = $_irc.ircnum
if ($_ischan($2)) { var %w = @CH_ $+ %n $+ Â $+ $2 }
else { var %w = @Q_ $+ %n $+ Â $+ $2 }
if ($window(%w)) {
if ($remove($1,-,a,s) != $null) { return - $+ $remove($1,-,a,s) %w }
else { return %w }
}
if ($_irc.ircnum($active,1) != %n) { return - $+ $iif($remove($1,-,a,s) != $null,$remove($1,-,a,s)) @Status $+ %n }
return -a $+ $iif($remove($1,-,a,s,e) != $null,$remove($1,-,a,s,e))
}
alias _irc.echo.snotice {
if ($1- == $null) { return }
if ($_getsetup(script,_snotice.show) <= 2) { _irc.echo.a $colour(notice) $1- }
else { _irc.echo.s $colour(notice) $1- }
}
alias _irc.error.raw {
%:echo = echo2 $^errcolor -eit @Status $+ %::ircnum
var %alias = ^ $+ %::numeric
if ($isalias(%alias)) { %alias $1- }
else { %:echo $^error($2-) }
}
alias _irc.echo.raw { return _irc.lechol.s $colour(info) $1- }
alias _irc.echo.a { echo2 $iif($1 isnum,$1) $_irc.actwin(it) $iif($1 isnum,$2-,$1-) }
alias _irc.echo.w { echo2 $iif($1 isnum,$1) $_irc.winwin(it,$iif($1 isnum,$2,$1)) $iif($1 isnum,$3-,$2-) }
alias _irc.echo.s { echo2 $iif($1 isnum,$1) -it @Status $+ $_irc.ircnum $iif($1 isnum,$2-,$1-) }
alias _irc.lechol.a { echo2 $iif($1 isnum,$1) $_irc.actwin(eit) $iif($1 isnum,$2-,$1-) }
alias _irc.lechol.s { echo2 $iif($1 isnum,$1) -eit @Status $+ $_irc.ircnum $iif($1 isnum,$2-,$1-) }
alias _irc.lechol.w { echo2 $iif($1 isnum,$1) $_irc.winwin(eit,$iif($1 isnum,$2,$1)) $iif($1 isnum,$3-,$2-) }
alias _irc.error.a { echo2 $^errcolor $_irc.actwin(eit) $^error($1-) }
alias _irc.error.s { echo2 $^errcolor -eit @Status $+ $_irc.ircnum $^error($1-) }
alias _irc.error.w { echo2 $^errcolor $_irc.winwin(eit,$1) $^error($2-) }
alias _irc.info.a { echo2 $colour(info) $_irc.actwin(eit) $^*** $1- }
alias _irc.info.s { echo2 $colour(info) -eit @Status $+ $_irc.ircnum $^*** $1- }
alias _irc.info.w { echo2 $colour(info) $_irc.winwin(eit,$1) $^*** $2- }
alias _irc.ctcp.a { echo2 $colour(ctcp) $_irc.actwin(eit) $^*** $1- }
alias _irc.ctcp.s { echo2 $colour(ctcp) -eit @Status $+ $_irc.ircnum $^*** $1- }
alias _irc.ctcp.w { echo2 $colour(ctcp) $_irc.winwin(eit,$1) $^*** $2- }
alias _irc.echo.who {
var %n = $_irc.ircnum
if ($_irc.ircnum($active,1) != %n) { return echo2 $colour(normal) -ti @Status $+ %n }
return echo2 $colour(normal) -ati
}
alias _irc.echo.whois {
var %n = $_irc.ircnum
if ($_minio(2,26)) && ($_irc.ircnum($active,1) == %n) { return echo2 $colour(whois) -ati }
return echo2 $colour(whois) -ti @Status $+ %n
}
alias _irc.echo.rawstatus { return echo2 $colour(info) -ti @Status $+ $_irc.ircnum $1- }
alias _irc.echo.userhost {
if ($1- == $null) { return }
%:echo = _irc.echo.a $colour(info)
^userhost $1-
}
alias _onclosewin.status {
if ($window($2)) { _irc.com quit }
else {
if ($sock(IRC [ $+ [ $_irc.ircnum($2) ] ] )) {
info.a Closing IRC session $_irc.ircnum($2)
sockwrite -n IRC [ $+ [ $_irc.ircnum($2) ] ] QUIT : $+ $_verinf
}
_timeremote _irc.mequit $_irc.ircnum($2)
}
}
alias _windowopts.status { return 1 0 0 }
alias _onclosewin.channel {
var %sock = IRC [ $+ [ $_irc.ircnum($2) ] ]
if ($sock(%sock)) { sockwrite -n %sock PART $gettok($window($2),2,160) : $+ $_verinf }
}
alias _windowopts.channel { return 1 0 0 }
alias _onclosewin.DCCÂ CHAT {
sockclose $remove($2,@)
sockclose $replace($remove($2,@),DCCÂ CHAT,DCCCHAT)
.timer $+ $remove($2,@) off
}
alias _windowopts.DCCÂ CHAT { return 1 0 0 }
alias _onclosewin.DCCÂ SEND {
var %m = DCCSEND*,%i = $sock(%m,0),%s
while (%i) {
%s = $sock(%m,%i)
if ($_sockmark(%s,2) == $2) {
sockclose %s
break
}
dec %i
}
var %m = DCCÂ SEND*,%i = $sock(%m,0),%s
while (%i) {
%s = $sock(%m,%i)
if ($_sockmark(%s,2) == $2) {
sockclose %s
break
}
dec %i
}
}
alias _windowopts.DCCÂ SEND { return 1 0 0 }
alias _onclosewin.DCCÂ GET {
var %m = DCCGET*,%i = $sock(%m,0),%s
while (%i) {
%s = $sock(%m,%i)
if ($_sockmark(%s,2) == $2) {
sockclose %s
break
}
dec %i
}
var %m = DCCÂ GET*,%i = $sock(%m,0),%s
while (%i) {
%s = $sock(%m,%i)
if ($_sockmark(%s,2) == $2) {
sockclose %s
break
}
dec %i
}
}
alias _windowopts.DCCÂ GET { return 1 0 0 }
;
alias _irc.com {
unset %::*
%::ircnum = $_irc.ircnum
%::ircsock = IRC $+ %::ircnum
%::me = $_irc.me(%::ircnum)
%::@status = @Status $+ %::ircnum
var %alias = _irc.com. $+ $1
if ($isalias(%alias)) { %alias $2- }
elseif ($istok(abook beep clipboard clear clearall close copy creq dde dqwindow echo editbox exit filter finger flash flushini font fsend fserve ial identd load loadbuf log mkdir perform remini remove rename resetidle rmdir run save savebuf set sline speak splay sreq strip timestamp titlebar unload unset url window winhelp write writeini,$1,32)) { $1- }
elseif (timer* iswm $1) { $1- }
else { _irc.sw $upper($1) $2- }
unset %::*
}
alias _irc.com.chat { .timer -o 1 0 _irc.com dcc chat $1 }
alias _irc.com.dcc {
if ($ip == $null) {
_irc.error.a Your IP is unknown. Try again in a few seconds... (or press "ALT+O", go to "Local Info" and configure your I.P.)
localinfo -h
return 1
}
if ($1 == chat) {
if ($2 == $null) {
_irc.error.a Usage: /dcc chat <nick>
return 1
}
if (. isin $2) {
dcc chat $2
return 0
}
var %t = DCCCHAT $+ %::ircnum $+ Â $+ $$2,%s = DCCÂ CHAT $+ %::ircnum $+ Â $+ $$2,%w = @ $+ %s
if ($sock(%t) == %t) { sockclose %t }
if ($sock($replace(%t,DCCCHAT,DCCÂ CHAT))) {
_irc.error.a You already have a DCC Chat session with $2
return 1
}
socklisten %t
.timer $+ %s -o 1 $_minio(2,11) _closesocket $colour(ctcp) %t DCC chat with $2 timeout...
sockmark %t $2 $+ $chr(9) $+ %::me $+ $chr(9) $+ %w $+ $chr(9) $+ %::ircsock
_irc.sw NOTICE $$2 :DCC Chat ( $+ $ip $+ )
_irc.sw PRIVMSG $$2 :DCC CHAT chat $longip($ip) $sock(%t).port $+
if ($window(%w) == $null) { _irc.openwin wchat %w }
echo2 $colour(info2) -it %w Chat with $2
echo2 $colour(ctcp) -it %w Waiting for acknowledgement...
}
elseif ($1 == send) {
if ($2 == $null) {
_irc.error.a Usage: /dcc send <nick> <file>
return 1
}
if (. isin $2) {
dcc send $2-
return 1
}
var %a = $remove($3-,$chr(34))
if (%a == $null) {
_timeremote _irc.askdccsendfile $2
return 0
}
if ($isfile(%a) == $false) {
_irc.error.a File not found: $^'(%a)
return 1
}
var %t = DCCSEND $+ %::ircnum $+  $+ $$2 $+  $+ $replace($nopath(%a),$chr(32), )
var %w = @ $+ $replace(%t,DCCSEND,DCCÂ SEND)
if ($sock(%t)) { sockclose %t }
if ($sock($replace(%t,DCCSEND,DCCÂ SEND))) {
_irc.error.a You are already sending $^'($nopath(%a)) to $2
return 1
}
if ($window(%w)) { close -@ %w }
socklisten %t
var %sockmark = %a $+ $chr(9) $+ %w $+ $chr(9) $+ $ctime $+ $chr(9) $+ $file(%a).size $+ $chr(9) $+ %t $+ $chr(9) $+ $2 $+ $chr(9) $+ 0 $+ $chr(9) $+ 0
sockmark %t %sockmark
.timer $+ %t -mo 1 800 _irc.send.chtimer %t
close -@ %w
_irc.openwin wdccs %w
_irc.send.rwin %t
_irc.send.rcwin %t Sending request...
_irc.send.rcwin %t Waiting for acknowledgment...
_irc.sw NOTICE $$2 :DCC Send $nopath(%a) ( $+ $ip $+ )
_irc.sw PRIVMSG $$2 :DCC SEND " $+ %a $+ " $longip($ip) $sock(%t).port $file(%a).size $+
}
return 0
}
alias _irc.com.ame {
if ($1- == $null) { _irc.error.a Usage: /ame <message> }
else {
var %a = @CH_ $+ %::ircnum,%i = $window(0),%tmp,%win
while (%i) {
%win = $window(%i)
if ($gettok(%win,1,160) == %a) { %tmp = $addtok(%tmp, $gettok(%win,2,160),44) }
dec %i
}
if (%tmp != $null) { _irc.com.describe %tmp $1- }
}
}
alias _irc.com.amsg {
if ($1- == $null) { _irc.error.a Usage: /amsg <message> }
else {
var %a = @CH_ $+ %::ircnum,%i = $window(0),%tmp,%win
while (%i) {
%win = $window(%i)
if ($gettok(%win,1,160) == %a) { %tmp = $addtok(%tmp,$gettok(%win,2,160),44) }
dec %i
}
if (%tmp != $null) { _irc.com.msg %tmp $1- }
}
}
alias _irc.com.away {
if ($1- == $null) { _irc.com.back }
else { _irc.sw AWAY : $+ $1- }
}
alias _irc.com.back { _irc.sw AWAY }
alias _irc.com.ban {
if ($1) {
if ($_ischan($1)) && ($2) { _irc.mmode $1 +b $2- }
elseif ($_irc.ischan($active)) { _irc.mmode $gettok($window($active),2,160) +b $1- }
else { _irc.error.a Usage: /ban [#channel] <Nick[s]> }
}
}
alias _irc.com.ctcp {
if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /CTCP <Nick|#channel> <CTCP> }
else {
if ($2- == ping) {
_irc.sw PRIVMSG $1 :PING $ticks $+
tokenize 32 $1-2
}
else { _irc.sw PRIVMSG $1 : $+ $2- $+ }
%:echo = _irc.echo.a $colour(ctcp)
%:echo $^ctcpsend($1,$2-,%::me)
}
}
alias _irc.com.ctcpreply {
if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /CTCPREPLY <Nick|#channel> <CTCP> }
else {
_irc.sw NOTICE $1 : $+ $2- $+
%:echo = _irc.echo.a $colour(ctcp)
%:echo $^ctcpreplysend($1,$2-,%::me)
}
}
alias _irc.com.devoice {
if ($1) {
if ($_ischan($1)) && ($2) { _irc.mmode $1 -v $2- }
elseif ($_irc.ischan($active)) { _irc.mmode $gettok($window($active),2,160) -v $1- }
else { goto devoice.error }
return
}
:devoice.error
_irc.error.a Usage: /devoice [#channel] <Nick[s]>
}
alias _irc.com.deop {
if ($1) {
if ($_ischan($1)) && ($2) { _irc.mmode $1 -o $2- }
elseif ($_irc.ischan($active)) { _irc.mmode $gettok($window($active),2,160) -o $1- }
else { goto deop.error }
return
}
:deop.error
_irc.error.a Usage: /deop [#channel] <Nick[s]>
}
alias _irc.com.describe {
if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /describe <Nick|#channel> <message> }
else {
var %me = %::me,%target = $1,%i = $numtok(%target,44),%p,%irc,%showsend,%flags = y
if ($_minio(2,30)) { %flags = yp }
else { %flags = y }
%::msg = $2-
%::nick = %::me
while (%i) {
unset %::chan %::target
%p = $gettok(%target,%i,44)
if (=* iswm %p) { !describe %p %msg }
else {
var %chanwin = @CH_ $+ %::ircnum $+ $chr(160) $+ %p,%querywin = @Q_ $+ %::ircnum $+ $chr(160) $+ %p
if ($window(%chanwin)) {
%::target = %p
%::chan = %p
%::flags = %flags $+ $_irc.chanickopvoice(%::me,%chanwin)
%:echo = echo2 $colour(action) -tiq %chanwin
^actionchan
}
elseif ($window(%querywin)) {
%::target = %p
%::flags = %flags
%:echo = echo2 $colour(action) -tiq %querywin
^actionuser
}
else { %showsend = $addtok(%showsend,%p,44) }
%irc = $addtok(%irc,%p,44)
}
dec %i
}
if (%showsend != $null) {
%:echo = echo2 $colour(action) -ait
%:echo $^actionsend(%showsend,%::msg,%::me)
}
if (%irc != $null) { _irc.sw PRIVMSG %irc :ACTION %::msg $+ }
%::me = %me
unset %::nick %::chan %::flags
}
}
alias _irc.com.invite {
if ($1 == $null) || ($2 == $null) { _irc.error.a Usage: /invite <Nick> <#channel> }
else { _irc.sw INVITE $1- }
}
alias _irc.com.j { _irc.com join $1- }
alias _irc.com.join {
if ($1- == $null) { _irc.error.a Usage: /join <#channel> [Password] }
else { _irc.sw JOIN $_fixchans(#$1) $2- }
}
alias _irc.com.k { _irc.com kick $1- }
alias _irc.com.kick {
var %c,%ns,%m,%i,%user,%defmsg
if ($1) {
if ($_ischan($1)) && ($2) { var %c = $1,%ns = $2,%m = $3- }
elseif ($_irc.ischan($active)) { var %c = $_irc.active,%ns = $1,%m = $2- }
else { goto kick.error }
}
else { goto kick.error }
if (%m == $null) { var %m }
%i = 1
%defmsg = $_defmsg(kick,%m)
while ($gettok(%ns,%i,44) != $null) {
%user = $ifmatch
_irc.sw KICK %c %user : $+ $replace(%defmsg,<CHAN>,%c,<NICK>,%user)
inc %i
}
if (%m != $null) { _recent.add kickreason 20 $replace(%m,%c,<CHAN>) }
return
:kick.error
_irc.error.a Usage: /kick [#channel] <Nick> [reason]
}
alias _irc.com.me {
if ($_irc.ischan($active)) || ($_irc.isquery($active)) {
if ($1-) { _irc.com describe $_irc.active $1- }
else { _irc.error.a Usage: /me <message> }
}
else { _irc.error.a /me: can't use /me in this window }
}
alias _irc.com.mode {
if ($1 == $null) { _irc.error.a Usage: /mode <Nick|#channel> [[+|-]modes [parameters]] }
else { _irc.sw MODE $1- }
}
alias _irc.com.msg {
if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /msg <Nick|#channel> <message> }
else {
var %me = %::me,%target = $1,%i = $numtok(%target,44),%p,%irc,%showsend,%flags = y
if ($_minio(0,23)) { %flags = ym }
if ($_minio(2,30)) { %flags = %flags $+ p }
%::msg = $2-
%::nick = %::me
while (%i) {
unset %::chan %::target
%p = $gettok(%target,%i,44)
if (=* iswm %p) { !msg %p %msg }
else {
var %chanwin = @CH_ $+ %::ircnum $+ $chr(160) $+ %p,%querywin = @Q_ $+ %::ircnum $+ $chr(160) $+ %p
if ($window(%chanwin)) {
%::target = %p
%::chan = %p
%::flags = %flags $+ $_irc.chanickopvoice(%::me,%chanwin)
%:echo = echo2 $colour(own) -tiq %chanwin
^textchan
}
elseif ($window(%querywin)) {
%::target = %p
%::flags = %flags
%:echo = echo2 $colour(own) -tiq %querywin
^textuser
}
else { %showsend = $addtok(%showsend,%p,44) }
%irc = $addtok(%irc,%p,44)
}
dec %i
}
if (%showsend != $null) {
%:echo = echo2 $colour(own) -ait
%:echo $^textsend(%showsend,%::msg,%::me)
}
if (%irc != $null) { _irc.sw PRIVMSG %irc : $+ %::msg }
%::me = %me
unset %::nick %::chan %::flags
}
}
alias _irc.com.names {
if ($1 == $null) {
if ($_irc.ischan($active)) { _irc.sw NAMES $_irc.active }
else { _irc.error.a Usage: /names <#channel> }
}
else { _irc.sw NAMES $_fixchans(#$1) }
}
alias _irc.com.notice {
if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /notice <Nick|#channel> <notice> }
else {
%:echo = echo2 $colour(own) -ait
%:echo $^noticesend($1,$2-,%::me)
_irc.sw NOTICE $1 : $+ $2-
}
}
alias _irc.com.notify {
if ($1- != $null) { notify $1- }
elseif ($_irc._notify.getlist != $null) {
_irc._notify.flush %::ircnum
_irc._notify.timer %::ircnum
}
else { _irc.lechol.s $colour(info2) $^*** Your notify list is empty }
}
alias _irc.com.op {
if ($1) {
if ($_ischan($1)) && ($2) { _irc.mmode $1 +o $2- }
elseif ($_irc.ischan($active)) { _irc.mmode $gettok($window($active),2,160) +o $1- }
else { goto op.error }
return
}
:op.error
_irc.error.a Usage: /op [#channel] <Nick[s]>
}
alias _irc.com.p { _irc.com part $1- }
alias _irc.com.part {
if ($1 == $null) {
if ($_irc.ischan($active)) { _irc.sw PART $_irc.active : $+ $_verinf }
else { _irc.error.a Usage: /PART <#channel> }
}
else { _irc.sw PART $_fixchans(#$1) : $+ $iif($2- != $null,$2-,$_verinf) }
}
alias _irc.com.partall {
var %a = @CH_ $+ %::ircnum,%i = $window(0),%win,%d
while (%i) {
%win = $window(%i)
if ($gettok(%win,1,160) == %a) { _irc.sw PART $gettok(%win,2,160) : $+ $iif($1- != $null,$1-,$_verinf) }
dec %i
}
}
alias _irc.com.query {
if ($1 == $null) { _irc.error.a Usage: /query <nick> [msg] }
else {
var %win = @Q_ $+ %::ircnum $+ Â $+ $1
_irc.openwin wquery %win
window -a %win
if ($2- != $null) { _irc.com msg $1- }
}
}
alias _irc.com.quit {
_irc.sw QUIT : $+ $_quitmsg(0,$1-)
sockclose %::ircsock
_irc.mequit %::ircnum
}
alias _irc.com.server {
var %s = $1,%p = $2,%n = $3
if (%s == $null) { var %s = $gettok($window(%::@status).title,4,32) }
if (%p == $null) { var %p = $sock(%::ircsock).port }
if (%n == $null) { var %n = %::me }
irc %s %p %n
}
alias _irc.com.topic {
if ($1 == $null) {
if ($_irc.ischan($active)) { _irc.sw TOPIC $_irc.active }
else { _irc.error.a Usages: /topic <#channel> [topic] }
}
else { _irc.sw TOPIC #$1 : $+ $2- }
}
alias _irc.com.voice {
if ($1) {
if ($_ischan($1)) && ($2) { _irc.mmode $1 +v $2- }
elseif ($_irc.ischan($active)) { _irc.mmode $gettok($window($active),2,160) +v $1- }
else { goto voice.error }
return
}
:voice.error
_irc.error.a Usage: /voice [#channel] <Nick[s]>
}
alias _irc.com.raw { _irc.sw $1 $2 $3- }
alias _irc.com.quote { _irc.sw $1 $2 $3- }
;
alias _irc.setidle { set %+irc.idlem. [ $+ [ $1 ] ] $ctime }
alias _irc._autoaway {
var %sock = IRC $+ $1
if (%_away.autot) && ($sock(%sock)) && ($_irc.away($1) != $true) && ($_irc.idle($1) > $calc(%_away.autot * 60)) {
sockwrite -n %sock AWAY :Autoaway after $_nsingoplur(%_away.autot,minute,minutes)
}
}
;
alias _irc._notify.getlist {
var %i = 1,%n = $notify(0),%r
while (%i <= %n) {
%r = $addtok(%r,$notify(%i),32)
inc %i
}
return %r
}
alias _irc._notify.current { return %+irc.notify. [ $+ [ $1 ] ] }
alias _irc._notify.+ {
var %nicks = $_irc._notify.current($1)
%nicks = $addtok(%nicks,$2,32)
if (%nicks != $null) { set %+irc.notify. [ $+ [ $1 ] ] %nicks }
else { unset % $+ +irc.notify. $+ $1 }
}
alias _irc._notify.- {
var %nicks = $_irc._notify.current($1)
%nicks = $remtok(%nicks,$2,32)
if (%nicks != $null) { set %+irc.notify. [ $+ [ $1 ] ] %nicks }
else { unset % $+ +irc.notify. $+ $1 }
}
alias _irc._notify.flush { unset % $+ +irc.notify. $+ $1 }
alias _irc._notify.timer {
var %sock = IRC $+ $1
if ($sock(%sock)) {
if ($_irc._notify.getlist != $null) { sockwrite -n %sock ISON : $+ $_irc._notify.getlist }
.timer+irc.notify. $+ $1 -o 1 10 _irc._notify.timer $1-
}
}
alias _irc.nickomp {
var %win = $1,%input = $2,%matchn = $left(%input,-1) $+ *,%char = $right(%input,1),%matchg = * $+ %matchn,%i = 1,%n = $fline(%win,%matchg,0,1),%nick,%style = $_getsetup(nickomp,style)
if (<NICK> !isin %style) {
%style = <NICK><CHAR>
_setsetup nickomp style %style
}
while (%i <= %n) {
%nick = $remove($strip($line(%win,$fline(%win,%matchg,%i,1),1)),@,+,.)
if (%matchn iswm %nick) { return $_nickomp.finalnick(%nick,%char,$_getsetup(nickomp,friendly),%style,$_getsetup(nickomp,clan)) $+ }
inc %i
}
return %input
}
alias _irc.protctcp {
var %var = +irc.protctcp. $+ $1,%p
inc % $+ %var
%p = % [ $+ [ %var ] ]
if (%p >= 4) {
if (%p == 4) {
.timer $+ %var -o 1 30 unset % $+ %var
return 1
}
return 2
}
.timer $+ %var -o 1 10 unset % $+ %var
return 0
}