aIRC — File Browser
aIRCv0.8.69 / aIRCv0.8.69 / addons / irc3.mrc
irc3.mrc — 25.77 KB — Download this file
;/**********************************************************************
; *
; * aIRC
; * IRC Client file 3
; *
; **********************************************************************/
;
alias _irc.sr.nor {
unset %::*
%::ircnum = $remove($sockname,IRC)
if (:* iswm $1) { tokenize 32 $right($1-,-1) }
if (:* iswm $2) { tokenize 32 $1 $right($2-,-1) }
if ($1 == ping) || ($1 == error) { %::event = $1 }
else { %::event = $2 }
if (:* iswm $3) && ($istok(error join nick quit topic wallops,%::event,32)) { tokenize 32 $1-2 $right($3-,-1) }
if (:* iswm $4) && ($istok(invite mode notice part privmsg topic,%::event,32)) { tokenize 32 $1-3 $right($4-,-1) }
if (%::event == kick) {
if (:* iswm $5) { tokenize 32 $1-4 $right($5-,-1) }
%::knick = $4
}
if (%::event == nick) { %::newnick = $3 }
%::nick = $gettok($1,1,33)
if (%::event == invite) && ($_ischan($4)) { %::chan = $4 }
elseif ($_ischan($3)) { %::chan = $3 }
elseif (@#* iswm $3) { %::chan = $right($3,-1) }
%::fulladdress = $1
%::site = $gettok($1,2,64)
%::address = $gettok($1,2,33)
%::target = $3
%::me = $_irc.me
%::@status = @Status $+ %::ircnum
%::@chan = @CH_ $+ %::ircnum $+ Â $+ %::chan
%::@query = @Q_ $+ %::ircnum $+ Â $+ %::nick
if (%::event == ping) { _irc.sw PONG $2 }
elseif (%::event == error) { _irc.on.error $3- }
elseif (%::event == invite) { _irc.on.invite }
elseif (%::event == join) { _irc.on.join }
elseif (%::event == kick) { _irc.on.kick $5- }
elseif (%::event == mode) {
if (%::chan) { _irc.on.rawmode $4- }
else { _irc.on.usermode $4- }
}
elseif (%::event == nick) { _irc.on.nick }
elseif (%::event == notice) {
if (* iswm $4-) { _irc.on.ctcpreply $left($right($4-,-1),-1) }
elseif (. isin %::nick) { _irc.on.snotice $4- }
else { _irc.on.notice $4- }
}
elseif (%::event == part) { _irc.on.part $4- }
elseif (%::event == privmsg) {
if (ACTION * iswm $4-) { _irc.on.action $left($5-,-1) }
elseif (* iswm $4-) { _irc.on.ctcp $left($right($4-,-1),-1) }
else { _irc.on.text $4- }
}
elseif (%::event == quit) {
if (%::nick == %::me) { _irc.on.disconnect $3- }
else { _irc.on.quit $3- }
}
elseif (%::event == topic) { _irc.on.topic $4- }
elseif (%::event == wallops) { _irc.on.wallops $3- }
else { echo2 -t %::@status $2- }
if (*!*@* iswm %::fulladdress) {
if (%::newnick != $null) { _irc.checkquery %::fulladdress %::newnick }
else { _irc.checkquery %::fulladdress }
}
unset %::*
}
alias _irc.on.error {
_irc.on.disconnect $1-
_hook.call irc_onerror $1-
}
alias _irc.on.disconnect {
_irc.mequit %::ircnum $1-
_hook.call irc_ondisconnect $1-
}
alias _irc.on.quit {
var %halt = 0,%i,%short = $_minio(2,19),%show,%showstatus = 0,%chan,%status,%win,%match
%::reason = $1-
_hook.call irc_onquit $1-
if ($result) { %halt = 1 }
%match = @CH_ $+ %::ircnum $+ Â *
if (%halt == 0) {
if (%short) { %::flags = cs }
else { %::flags = c }
%chan = $^quit
}
%i = $window(%match,0)
unset %:echo
while (%i) {
%win = $window(%match,%i)
if ($_irc.linick(%::nick,%win)) {
dline -l %win $_irc.linick(%::nick,%win)
_irc.chanmembers2title %win
if (%halt == 0) {
%show = $_chanevent(quits,$gettok(%win,2-,160))
if ($_not(%show)) || (%show == 2) { echo2 $colour(quit) -t %win %chan }
if (%show isin 1-2) { %showstatus = 1 }
}
}
dec %i
}
if (%halt == 0) {
unset %::flags
if ($window(%::@status)) && (%showstatus) {
%:echo = echo2 $colour(quit) -et %::@status
%:echo $^quit
}
if ($window(%::@query)) {
%:echo = echo2 $colour(quit) -t %::@query
%:echo $^quit
}
}
}
alias _irc.on.wallops {
_hook.call irc_onwallops $1-
if ($result == $null) {
%:echo = echo2 $colour(wallops) -eit %::@status
%::text = $1-
^wallops
}
}
alias _irc.on.topic {
var %r,%show = $_chanevent(topics,%::chan)
_hook.call irc_ontopic $1-
if ($result == $null) {
if (%show == 2) { }
else {
%::flags = _
%::topic = $1-
if ($1- == $null) && ($len($1-) == 0) { %::flags = %::flags $+ u }
if (%show) { %:echo = echo2 $colour(topic) -et %::@status }
else {
%::flags = %::flags $+ c
%:echo = echo2 $colour(topic) -t %::@chan
}
^topic
}
}
if ($window(%::@chan)) {
var %members,%modes,%tmodes = $_irc.chan(0,%::chan).mode,%topic
%members = [[ $+ $line(%::@chan,0,1) $+ ]]
if ($remove(%tmodes,+) != $null) { %modes = [+ $+ $ifmatch $+ ] }
if ($1- != $null) || ($len($1-)) {
%topic = $strip($1-)
if (%modes != $null) { %modes = %modes $+ : }
else { %members = %members $+ : }
}
titlebar %::@chan %members %modes %topic
}
}
alias _irc.on.text {
var %win,%nick = %::nick
_hook.call irc_ontext $1-
if ($result != $null) { return }
%::msg = $1-
if (%::chan) {
var %win = %::@chan
%::flags = _
if (@* iswm %::target) { %::flags = %::flags $+ o }
if ($len($1-) == 0) { %::flags = %::flags $+ n }
if ($_minio(2,30)) { %::flags = %::flags $+ p }
%::flags = %::flags $+ $_irc.chanickopvoice(%::nick,%win)
if ($window(%win)) {
%:echo = echo2 $colour(text) -lti %win
%::flags = %::flags $+ c
window -g %win 2
}
else {
%:echo = echo2 $colour(text) -elti %::@status
window -g %::@status 2
}
^textchan
_irc.remotechantext $1-
}
else {
var %query = 1,%win = %::@query
if ($len($1-)) { %::flags = _ }
else { %::flags = n }
%::msg = $1-
if ($window(%win) == $null) {
if ($_minio(4,5)) { %query = 0 }
else { _irc.openwin wquery %win $iif($_minio(1,18),-n) }
}
if (%query) {
%::flags = %::flags $+ q
%:echo = echo2 $colour(text) -lti %win
window -g %win 2
}
else {
%::flags = %::flags $+ a
var %w = $_irc.actwin(lti)
%:echo = echo2 $colour(text) %w
if (a !isin %w) { window -g %::@status 2 }
}
^textuser
}
}
alias _irc.on.action {
var %win,%nick = %::nick
_hook.call irc_onaction $1-
if ($result != $null) { return }
if (%::chan) {
%win = %::@chan
%::flags = _
%::msg = $1-
if ($len($1-) == 0) { %::flags = %::flags $+ n }
if ($_minio(2,30)) { %::flags = %::flags $+ p }
%::flags = %::flags $+ $_irc.chanickopvoice(%::nick,%win)
if ($window(%win)) {
%:echo = echo2 $colour(action) -lti %win
%::flags = %::flags $+ c
window -g %win 2
}
else {
%:echo = echo2 $colour(action) -elti %::@status
window -g %::@status 2
}
^actionchan
_irc.remotechantext $1-
}
else {
var %query = 1,%win = %::@query
if ($len($1-) == 0) { %::flags = n }
else { %::flags = _ }
%::msg = $1-
if ($window(%win) == $null) {
if ($_minio(4,5)) { %query = 0 }
else { _irc.openwin wquery %win $iif($_minio(1,18),-n) }
}
if (%query) {
%::flags = %::flags $+ q
%:echo = echo2 $colour(action) -lti %win
window -g %win 2
}
else {
%::flags = %::flags $+ a
var %w = $_irc.actwin(lti)
%:echo = echo2 $colour(action) %w
if (a !isin %w) { window -g %::@status 2 }
}
^actionuser
}
}
alias _irc.on.notice {
var %win,%nick
_hook.call irc_onnotice $1-
if ($result != $null) { return }
var %chan,%echo,%string,%act = $_minio(5,13),%noticeactiveecho
%::flags = _
%::msg = $1-
if ($len($1-) == 0) { %::flags = %::flags $+ n }
if (%::chan) {
%win = %::@chan
if ($_minio(2,30)) { %::flags = %::flags $+ p }
%::flags = %::flags $+ $_irc.chanickopvoice(%::nick,%win)
if ($window(%win)) { var %echo = echo2 $colour(notice) -ti %win,%noticeactiveecho = $iif($active == %win,0,1) }
elseif (%act) { %noticeactiveecho = 1 }
else { %echo = echo2 $colour(notice) -eti %::@status }
if (%act) && (%noticeactiveecho) && ($active != %win) {
%:echo = echo2 $colour(notice) $_irc.actwin(ti)
^noticechan
}
%:echo = %echo
^noticechan
}
else {
var %string
%:echo = echo2 $colour(notice) -eti %::@status
%string = $^noticeuser
if ($1 == dcc) {
echo2 $colour(notice) -eti %::@status %string
return
}
var %i = 1,%chanwin,%tmp
while ($_irc.comchan(%::ircnum,%::nick,%i) != $null) {
var %chanwin = $_irc.chan(%::ircnum,$ifmatch).win,%tmp = $addtok(%tmp,%chanwin,44)
echo2 $colour(notice) -ti %chanwin %string
inc %i
}
if (%i > 1) && (%act) && ($_irc.ircnum($active) == %::ircnum) && ($istok(%tmp,$active,44) == $false) { echo2 $colour(notice) $_irc.actwin(ti) %string }
else {
if (%act) && ($_irc.ircnum($active) == %::ircnum) && ($active != %::@status) { echo2 $colour(notice) $_irc.actwin(ti) %string }
echo2 $colour(notice) -eti %::@status %string
}
}
}
alias _irc.on.snotice {
_hook.call irc_onsnotice $1-
if ($result == $null) {
if ($_snoticefilter(%::nick,%::me,$1-) != $null) { _irc.echo.snotice $ifmatch }
}
}
alias _irc.on.ctcp {
var %win,%nick
if (%::chan != $null) && ($window(%::@chan) == $null) { return }
_hook.call irc_onctcp $1-
if ($result != $null) { return }
if ($_irc.protctcp(%::ircnum)) {
if ($ifmatch == 1) { _irc.ctcp.a CTCP Flood detected! Ignoring all CTCPs (30 secs) }
return 1
}
tokenize 32 $upper($1) $2-
if ($1 == dcc) && ($istok(chat send accept resume,$2,32)) && (%::chan == $null) {
var %size,%longip,%ip,%port,%file,%badcc
if ($2 == chat) { var %longip = $4,%ip = $longip($4),%port = $5 }
elseif ($2 == send) { var %size = $gettok($1-,$0,32),%longip = $gettok($1-,$calc($0 - 2),32),%ip = $longip(%longip),%port = $gettok($1-,$calc($0 - 1),32),%file = $remove($gettok($1-,3- [ $+ [ $calc($0 - 3) ] ] ,32),$chr(34)) }
elseif ($istok(accept resume,$2,32)) { var %size = $gettok($1-,$0,32),%port = $gettok($1-,$calc($0 - 1),32),%file = $remove($gettok($1-,3- [ $+ [ $calc($0 - 2) ] ] ,32),$chr(34)) }
if (($istok(send chat,$2,32)) && (%ip == $null)) || (%port == $null) || (($2 != chat) && ((%size == $null) || (%file == $null))) { %badcc = parameters }
elseif (. isin %port) || ($_not($_isint(%port))) || (%port < 1024) || (%port > 65535) { %badcc = port }
elseif ($istok(accept resume send,$2,32)) && (($nopath(%file) != %file) || ($_fixfilename(%file,m) == $null)) { %badcc = file }
elseif ($istok(accept resume send,$2,32)) && ((. isin %size) || ($_not($_isint(%size)))) { %badcc = size }
elseif ($istok(send chat,$2,32)) && (($_not($_isip(%ip))) || (127.* iswm %ip) || (*.255 iswm %ip) || (*.0 iswm %ip)) { %badcc = ip }
if (%badcc != $null) {
_irc.error.a Invalid DCC $2 request from %::nick $^bp(%::address) - Invalid $^b($upper(%badcc))
return 1
}
if ($2 == accept) {
var %t = DCCGET $+ %::ircnum $+ Â $+ %::nick $+ Â *,%i = 1,%mark
while ($sock(%t,%i)) {
if ($_sockmark($sock(%t,%i),12) == %port) {
.timer $+ $sock(%t,%i) off
%mark = $puttok($sock(%t,%i).mark,%size,7,9)
sockclose $sock(%t,%i)
_irc.dccget %mark
return
}
inc %i
}
}
elseif ($2 == chat) {
var %t = DCCCHAT $+ %::ircnum $+ Â $+ %::nick,%s = DCCÂ CHAT $+ %::ircnum $+ Â $+ %::nick,%w = @ $+ DCCÂ CHAT $+ %::ircnum $+ Â $+ %::nick
if ($sock(%t)) { sockclose %t }
if ($sock(%s)) {
_irc.error.s %::nick wants to DCC Chat with you, but there is an existing session.
return
}
if ($creq == ignore) { _irc.echo.a $colour(ctcp) $^*** DCC Chat request from %::nick rejected }
elseif ($creq == ask) { _timeremote _irc.askdccchatrequest %::me %s %::nick %::site %ip %port %w $sockname }
else {
sockopen %s %ip %port
sockmark %s %::nick $+ $chr(9) $+ %::me $+ $chr(9) $+ %w $+ $chr(9) $+ $sockname $+ $chr(9) $+ $iif($_minio(0,20),1,0)
_irc.openwin.chat %s
}
}
elseif ($2 == resume) {
var %t = DCCSEND $+ %::ircnum $+ Â $+ %::nick $+ Â *,%i = 1,%s
while ($sock(%t,%i)) {
%s = $ifmatch
if ($sock(%s).port == %port) {
sockmark %s $puttok($sock(%s).mark,%size,7,9)
_irc.send.rcwin %s Resuming at %size bytes
_irc.sw PRIVMSG %::nick :DCC ACCEPT $3- $+
return
}
inc %i
}
}
elseif ($2 == send) {
var %l = $getdir(%file) $+ %file,%t = DCCGET $+ %::ircnum $+  $+ %::nick $+  $+ $replace(%file,$chr(32), ),%s = $replace(%t,DCCGET,DCC GET),%w = @ $+ %s,%sockmark = %l $+ $chr(9) $+ %w $+ $chr(9) $+ $ctime $+ $chr(9) $+ %size $+ $chr(9) $+ $sockname $+ $chr(9) $+ %::nick $+ $chr(9) $+ 0 $+ $chr(9) $+ 0 $+ $chr(9) $+ 1 $+ $chr(9) $+ 0 $+ $chr(9) $+ %ip $+ $chr(9) $+ %port $+ $chr(9) $+ %::site $+ $chr(9) $+ $iif($_minio(0,16),1,0)
if ($sock(%t)) { sockclose %t }
if ($sreq == ignore) { _irc.ctcp.a DCC Send request from %::nick rejected }
elseif ($sock(%s)) { _irc.error.s %::nick wants to send you $^'(%file) $+ , but there's a get session with the same file with that user. }
elseif ($sreq == ask) { _timeremote _irc.askdccsendrequest1 %sockmark }
else { _timeremote _irc.dccget %sockmark }
return
}
}
else {
_onctcp $1-
if (%+ctcp.reply) && (%+ctcp.replymsg != $null) { _irc.sw NOTICE %::nick : $+ %+ctcp.replymsg $+ }
if (%+ctcp.show) {
var %chan,%act = $_minio(4,19)
%::flags = _
%::ctcp = $upper($1)
%::parms = $2-
if (%+ctcp.hideparms) { %::flags = %::flags $+ h }
if (@* iswm %::target) { %::flags = %::flags $+ o }
if (%chan) {
if ($_minio(2,30)) { %::flags = %::flags $+ p }
%::flags = %::flags $+ $_irc.chanickopvoice(%::nick,%::@chan)
if ($window(%::@chan)) { %:echo = echo2 $colour(ctcp) -ti %::@chan }
elseif (%act) { %:echo = _irc.echo.a $colour(ctcp) }
else { %:echo = echo2 $colour(ctcp) -eit %::@status }
^ctcpchan
}
else {
if (%act) { %:echo = _irc.echo.a $colour(ctcp) }
else { %:echo = echo2 $colour(ctcp) -eit %::@status }
^ctcpuser
}
}
}
}
alias _irc.on.ctcpreply {
_hook.call irc_onctcpreply $1-
if ($result == $null) {
if ($1 == ping) && ($2- isnum) && ($2- < $ticks) && ($2- > 0) {
var %p = $calc(($ticks - $2) / 1000)
if (%p < 1) { %p = $_duration(%p,3) }
elseif (%p < 60) { %p = $_duration(%p,2) }
else { %p = $_duration(%p,0) }
_irc.echoctcpreply PING %p
}
else { _irc.echoctcpreply $1- }
}
}
alias _irc.echoctcpreply {
if ($_minio(4,19)) { %:echo = _irc.echo.a $colour(ctcp) }
else { %:echo = echo2 $colour(ctcp) -eit %::@status }
%::ctcp = $upper($1)
%::parms = $2-
%::flags = _
^ctcpreply
}
alias _irc.on.nick {
var %halt = 0
_hook.call irc_onnick $1-
if ($result != $null) { %halt = 1 }
if (%::nick == %::me) {
sockmark $sockname $puttok($sock($sockname).mark,%::newnick,1,9)
titlebar %::@status %::newnick $gettok($window(%::@status).title,2-,32)
if (%halt == 0) {
%:echo = echo2 $colour(nick) -et %::@status
%::flags = y
^nick
}
_recent.add nick 10 %::newnick
var %n = DCCÂ CHAT $+ %::ircnum $+ Â *,%i = 1
while ($sock(%n,%i)) {
if ($_sockmark($ifmatch,2) == %::nick) { sockmark $sock(%n,%i) $puttok($sock($ifmatch).mark,%::newnick,2,9) }
inc %i
}
var %n = DCCCHAT $+ %::ircnum $+ Â *,%i = 1
while ($sock(%n,%i)) {
if ($_sockmark($ifmatch,2) == %::nick) { sockmark $sock(%n,%i) $puttok($sock($ifmatch).mark,%::newnick,2,9) }
inc %i
}
}
unset %:echo
%::flags = c
tokenize 32 $^nick
var %win,%chan,%match = @CH_ $+ %::ircnum $+ Â *,%i = $window(%match,0)
while (%i) {
%win = $window(%match,%i)
if ($_irc.linick(%::nick,%win)) {
%chan = $gettok(%win,2,160)
if ($_irc.Wisowner(%::nick,%win)) { rline -l %win $_irc.linick(%::nick,%win) 1. $+ %::newnick }
elseif ($_irc.Wisop(%::nick,%win)) { rline -l %win $_irc.linick(%::nick,%win) 2@ $+ %::newnick }
elseif ($_irc.Wisvo(%::nick,%win)) { rline -l %win $_irc.linick(%::nick,%win) 3+ $+ %::newnick }
else { rline -l %win $_irc.linick(%::nick,%win) 4 $+ %::newnick }
if (%halt == 0) && ($_not($_chanevent(nicks,%chan))) { echo2 $colour(nick) -t %win $1- }
}
dec %i
}
}
alias _irc.on.usermode {
_hook.call irc_onusermode $1-
if ($result == $null) {
%:echo = echo2 $colour(mode) -et %::@status
%::modes = $1-
^usermode
}
var %wt1 = $gettok($window(%::@status).title,1,32),%wtm = $remove($gettok($window(%::@status).title,2,32),[,],+),%wt3 = $gettok($window(%::@status).title,3-,32),%signo = +,%i = 1,%ordalf
while ($mid($1,%i,1) != $null) {
if ($mid($1,%i,1) == +) || ($mid($1,%i,1) == -) { var %signo = $ifmatch }
else {
if (%signo == -) { %wtm = $remove(%wtm,$mid($1,%i,1)) }
else {
%ordalf = $mid($1,%i,1) $+ %wtm
%wtm = $_order(%ordalf)
}
}
inc %i
}
%wtm = $remove(%wtm,+)
if (%wtm == $null) { var %wtm }
titlebar %::@status %wt1 [+ $+ %wtm $+ $chr(93) %wt3
}
alias _irc.on.rawmode {
if ($window(%::@chan) == $null) { return }
_hook.call irc_onrawmode $1-
if ($result == $null) {
var %show = $_chanevent(modes,%::chan)
if (%show == 2) { }
else {
%::modes = $1-
if (%show) && ($window(%::@chan)) { %:echo = echo2 $colour(mode) -et %::@status }
else { %:echo = echo2 $colour(mode) -t %::@chan }
^mode
}
}
var %signo = +,%wtmodos = $_irc.chan(0,%::chan).mode,%wtm = $remove($gettok(%wtmodos,1,32),+),%inc,%tnick,%l = 1,%wtp,%wtl,%tt
if (%wtm == $null) { var %wtm }
if ($gettok(%wtmodos,3,32)) {
%wtp = $gettok(%wtmodos,2,32)
%wtl = $gettok(%wtmodos,3,32)
}
else {
if (k isin %wtm) { %wtp = $gettok(%wtmodos,2,32) }
if (l isin %wtm) { %wtl = $gettok(%wtmodos,2,32) }
}
while ($mid($1,%l,1) != $null) {
%tt = $ifmatch
if (%tt == +) || (%tt == -) { var %signo = $ifmatch }
else {
var %t = %signo $+ %tt
if (%tt isin obhv) {
inc %inc
var %tnick = $gettok($2-,%inc,32)
if (%t == +o) { rline -l %::@chan $_irc.linick(%tnick,%::@chan) 2@ $+ %tnick }
if (%t == -o) && ($_irc.Wisop(%tnick,%::@chan)) { rline -l %::@chan $_irc.linick(%tnick,%::@chan) 4 $+ $remove(%tnick,@) }
if (%t == +v) && ($_not($_irc.Wisop(%tnick,%::@chan))) { rline -l %::@chan $_irc.linick(%tnick,%::@chan) 3+ $+ %tnick }
if (%t == -v) && ($_irc.Wisvo(%tnick,%::@chan)) { rline -l %::@chan $_irc.linick(%tnick,%::@chan) 4 $+ $remove(%tnick,+) }
}
elseif (%tt isin lk) {
if (%signo == -) {
var %wtm = $removecs(%wtm,%tt)
if (%tt == k) { var %wtp }
if (%tt == l) { var %wtl }
}
else {
inc %inc
if (%wtm != $null) { %wtm = $removecs(%wtm,%tt) }
if (%tt == k) { %wtp = $gettok($2-,%inc,32) }
if (%tt == l) { %wtl = $gettok($2-,%inc,32) }
if (%wtm != $null) { %wtm = %tt $+ %wtm }
else { %wtm = %tt }
}
}
elseif (%signo == -) { var %wtm = $remove(%wtm,%tt) }
else {
if (%wtm != $null) { %wtm = $removecs(%wtm,%tt) }
if (%wtm != $null) { %wtm = %tt $+ %wtm }
else { %wtm = %tt }
}
if (%wtm == $null) { var %wtm }
var %r = %r $+ %t
}
inc %l
}
%wtm = $remove(%wtm,[,],+)
if (%wtm != $null) { %wtm = $_order(%wtm) }
else { var %wtm }
var %members,%modes,%tmodes,%topic = $_irc.chan(0,%::chan).topic
if ($remove(%wtm,+) != $null) {
%tmodes = + $+ $ifmatch
if (k isincs %wtm) { %tmodes = %tmodes %wtp }
if (l isincs %wtm) { %tmodes = %tmodes %wtl }
}
%members = [[ $+ $line(%::@chan,0,1) $+ ]]
if (%tmodes != $null) { %modes = [[ $+ $ifmatch $+ ]] }
if (%topic != $null) || ($len(%topic)) {
if (%modes != $null) { %modes = %modes $+ : }
else { %members = %members $+ : }
}
titlebar %::@chan %members %modes %topic
}
alias _irc.on.kick {
var %halt = 0
_hook.call irc_onkick $1-
if ($result != $null) { %halt = 1 }
if ($window(%::@chan) == $null) { return }
%::reason = $1-
if (%::knick == %::me) {
close -@ %::@chan
if (%halt == 0) {
%:echo = echo2 $colour(kick) -t %::@status
%::flags = y
^kick
}
_irc.sw JOIN %::chan
}
else {
if (%halt == 0) {
var %show = $_chanevent(kicks,%::chan)
%:echo = echo2 $colour(kick) -t %::@status
%::flags = y
if (%show == 2) { }
elseif (%show) {
%:echo = echo2 $colour(kick) -t %::@status
%::flags = _
^kick
}
else {
%:echo = echo2 $colour(kick) -t %::@chan
%::flags = c
^kick
}
}
dline -l %::@chan $_irc.linick(%::knick,%::@chan)
_irc.chanmembers2title %::@chan
}
}
alias _irc.on.join {
var %halt = 0
_hook.call irc_onjoin $1-
if ($result != $null) { %halt = 1 }
var %show = $_chanevent(joins,%::chan),%short = $_minio(2,19),%addr = $_minio(0,2)
if (%::nick == %::me) {
_synchtime.set %::ircnum %::chan
_irc.openwin wchannel %::@chan
titlebar %::@chan [0]
_irc.sw MODE %::chan
_recent.add channel 10 %::chan
if (%halt == 0) && (%show != 2) {
%:echo = echo2 $colour(join) -t %::@chan
%::flags = y
^join
}
_irc.chanmembers2title %::@chan
}
else {
if ($window(%::@chan) == $null) { return }
aline -l %::@chan 4 $+ %::nick
_irc.chanmembers2title %::@chan
if (%halt == 0) {
%::flags = _
if (%short) { %::flags = %::flags $+ s }
if (%addr) { %::flags = %::flags $+ a }
if (%show) { %:echo = echo2 $colour(join) -et %::@status }
else {
%::flags = %::flags $+ c
%:echo = echo2 $colour(join) -t %::@chan
}
^join
}
}
}
alias _irc.on.part {
var %halt = 0
_hook.call irc_onpart $1-
if ($result != $null) { %halt = 1 }
var %show = $_chanevent(parts,%::chan),%short = $_minio(2,19),%addr = $_minio(0,2)
if ($window(%::@chan) == $null) { return }
dline -l %::@chan $_irc.linick(%::nick,%::@chan)
_irc.chanmembers2title %::@chan
if (%halt == 0) {
if (%show == 2) { }
else {
%::flags = _
if (%short) { %::flags = %::flags $+ s }
if (%addr) { %::flags = %::flags $+ a }
if ($len($1-)) { %::flags = %::flags $+ p }
%::reason = $1-
if (%show) { %:echo = echo2 $colour(part) -et %::@status }
else {
%::flags = %::flags $+ c
%:echo = echo2 $colour(part) -t %::@chan
}
^part
}
}
if (%::nick == %::me) { close -@ %::@chan }
}
alias _irc.on.invite {
_hook.call irc_oninvite $1-
if ($result == $null) {
if ($_minio(3,26)) && ($_irc.ircnum($active,1) == $_irc.ircnum) && (@Status* !iswm $active) { %:echo = echo2 $colour(invite) -at }
else { %:echo = echo2 $colour(invite) -et %::@status }
^invite
}
}
alias _irc.remotechantext {
if ($_wordisinstring(%::me,$1-)) {
if ($_rchini(_warnyournick,%::chan)) { _irc.lechol.s $^*** < $+ %::nick $+ : $+ %::chan $+ > $1- }
}
}
;;
; /_irc.dccget <same as /_irc.askdccsendrequest1>
; 1 - local file
; 2 - dcc get window
; 3 - $ctime (start)
; 4 - file size
; 5 - IRC session socket
; 6 - remote nick
; 7 - transfer begins from byte ... (0 for the complete file)
; 8 - Current byte in transfer
; 9 - local file 1=not erased 0=erased
; 10 - 1=resume 0=no resume
; 11 - remote IP
; 12 - remote port
; 13 - remote site
; 14 - open window minimized
;
alias _irc.dccget {
var %i,%d,%r,%s = DCCGET $+ $remove($gettok($1-,5,9),IRC) $+  $+ $gettok($1-,6,9) $+  $+ $replace($nopath($gettok($1-,1,9)),$chr(32), ),%t = $replace(%s,DCCGET,DCC GET)
if ($isfile($gettok($1-,1,9)) == $true) && ($gettok($1-,10,9) == 0) {
unset %c.irc.askdccsendrequest2.*
while (1) {
inc %i
%d = irc.askdccsendrequest2 $+ %i
if ($dialog(%d) == $null) { break }
}
%c.irc.askdccsendrequest2.file = File: $nopath($gettok($1-,1,9))
%c.irc.askdccsendrequest2.size = Size: $gettok($1-,4,9)
showmirc -s
%r = $dialog(%d,irc.askdccsendrequest2,-4)
if ($gettok(%r,1,32) == rename) {
.timer -o 1 0 _irc.askdccsendrequest1 $1-
return
}
if ($gettok(%r,1,32) == resume) {
sockwrite -n $gettok($1-,5,9) PRIVMSG $gettok($1-,6,9) :DCC RESUME file.ext $gettok($1-,12,9) $file($gettok($1-,1,9)).size $+
socklisten %s
sockmark %s $puttok($1-,1,10,9)
.timer $+ %s -o 1 $_minio(2,11) _closesocket %s
return
}
}
.timer $+ $gettok($1-,2,9) off
close -@ $gettok($1-,2,9)
_irc.openwin wdccg $gettok($1-,2,9) $iif($gettok($1-,14,9),-n)
sockopen %t $gettok($1-,11,9) $gettok($1-,12,9)
sockmark %t $1-
_irc.get.rwin %t
_irc.get.rcwin %t Acknowledging...
}
dialog irc.askdccsendrequest2 {
title "aIRC DCC Get"
size -1 -1 105 62
option dbu
text "The file you are about to download exists in your hard disk.",10,6 6 94 20,center
text %c.irc.askdccsendrequest2.file,50,21 24 117 10
text %c.irc.askdccsendrequest2.size,60,19 32 117 10
button "Overwrite",100,5 45 31 13,ok
button "Resume",101,38 45 31 13
button "Rename",102,71 45 31 13,cancel
edit "overwrite",400,3 67 136 11,autohs hide result
}
ON *:DIALOG:irc.askdccsendrequest2*:init:0:{
_mdx.init $_icofile(question.ico)
did -f $dname 102
unset %c.irc.askdccsendrequest2.*
}
ON *:DIALOG:irc.askdccsendrequest2*:sclick:101:{
did -o $dname 400 1 resume
dialog -k $dname
}
ON *:DIALOG:irc.askdccsendrequest2*:sclick:102:{
did -o $dname 400 1 rename
dialog -k $dname
}