;/********************************************************************** ; * ; * 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 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 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 } 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 } 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] } } } alias _irc.com.ctcp { if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /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 } 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] } 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] } alias _irc.com.describe { if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /describe } 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 <#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,,%c,,%user) inc %i } if (%m != $null) { _recent.add kickreason 20 $replace(%m,%c,) } return :kick.error _irc.error.a Usage: /kick [#channel] [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 } } else { _irc.error.a /me: can't use /me in this window } } alias _irc.com.mode { if ($1 == $null) { _irc.error.a Usage: /mode [[+|-]modes [parameters]] } else { _irc.sw MODE $1- } } alias _irc.com.msg { if ($1 == $null) || ($2- == $null) { _irc.error.a Usage: /msg } 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 } 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] } 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 [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] } 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 ( !isin %style) { %style = _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 }