Yahoo! for mIRC — File Browser
YahooformIRCv0.0.18 / YahooformIRCv0.0.18 / yahoo.mrc
yahoo.mrc — 36.15 KB — Download this file
;// mIRC script for yahoo chat (YCHT) protocol
;// version: 0.0.18 (alpha)
;// home: http://sourceforge.net/projects/mirc-yahoo/
;// contact: flipster12345@users.sourceforge.net
on *:exit:hsave -io yahdata $scriptdiryahoo.ini yahoo | hsave -io yahroom $scriptdiryahoo.ini rooms
on *:start:hmake yahdata 100 | hmake yahroom 100 | if ($scriptdiryahoo.ini) { hload -i yahdata $ifmatch yahoo | hload -i yahroom $ifmatch rooms }
;// Yahoo HTTP requests
alias -l yahoo.get.cookie.classic return $+(GET /config/login?.src=&login=,$hget(yahoo,user),&passwd=,$hget(yahoo,pass),&n=1 HTTP/1.0,$crlf,$yahoo.common.http.headers(edit),$crlf,$crlf)
alias -l yahoo.get.cookie.secure return $+(POST /config/login HTTP/1.0,$crlf,Content-Length: $calc(26 + $len($hget(yahoo,user)) + $len($hget(yahoo,pass))),$yahoo.common.http.headers(edit),$crlf,.src=&login=,$hget(yahoo,user),&passwd=,$hget(yahoo,pass),&n=1,$crlf)
alias -l yahoo.get.buddies return $+(GET /config/get_buddylist?.src=bl $yahoo.referer(edit),$yahoo.common.http.headers(edit),Cookie: $hget(yahoo,auth),; CHT=chid=,$hget(yahoo,user),&face=,$crlf,$crlf)
alias -l yahoo.get.catagories return $+(GET /c/roomlist/catfeed.html $yahoo.referer(chat),$yahoo.common.http.headers(chat),Cookie: $hget(yahoo,auth),; CHT=chid=,$hget(yahoo,user),&face=,$crlf,$crlf)
alias -l yahoo.get.rooms return $+(GET /c/roomlist/feed.html?.rmcat=,$hget(yahoo,get.room),&chat_client=Voice $yahoo.referer(chat),$yahoo.common.http.headers(chat),Cookie: $hget(yahoo,auth),; CHT=chid=,$hget(yahoo,user),&face=,$crlf,$crlf)
alias -l yahoo.common.http.headers return $+($crlf,Host:,$chr(32),$1,.yahoo.com,$crlf,Accept-Language: en,$crlf,Accept: */*,$crlf,User-Agent: Mozilla Compatible/2.0 (WinNT; I; NCC/2.0),$chr(32),$crlf,Cache-Control: no-cache,$crlf,Connection: close,$crlf)
alias -l yahoo.referer return $+(HTTP/1.0,$crlf,Referer: http://,$1,.yahoo.com)
;// Opens Yahoo!
alias yahoo {
window -aek0l15mSwz @Yahoo!
if ($hget(yahoo)) hfree yahoo
if (!$hget(yahoo.ignores)) hmake yahoo.ignores 100
if ($exists($scriptdiryahoo.dat)) hload yahoo.ignores $scriptdiryahoo.dat
if ($hget(yahdata,auto.connect)) && ($hget(yahdata,auto.user)) && ($hget(yahdata,password)) tokenize 32 $hget(yahdata,auto.user) $hget(yahdata,password)
if (!$2) { dialog -m yahoo.login yahoo.login | return }
hadd -m yahoo user $1
hadd -m yahoo pass $2
hadd -m yahoo auth.server $hget(yahdata,auth.server)
hadd -m yahoo auth.port $hget(yahdata,auth.port)
sockopen yahoo.check $hget(yahdata,auth.server) $hget(yahdata,auth.port)
}
;// Get auth code (cookie)
on *:sockopen:yahoo.check:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
if ($hget(yahoo,auth)) hdel yahoo auth
yahoo.echo Authenticating...
if ($hget(yahdata,secure.server)) sockwrite -tn $sockname $yahoo.get.cookie.secure
else sockwrite -tn $sockname $yahoo.get.cookie.classic
}
on *:sockread:yahoo.check:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread %t | if ($sockbr == 0) return | if (%t == $null) continue | tokenize 32 %t
if ($1- == HTTP/1.1 200 OK) {
yahoo.echo Invalid Yahoo! id or password
sockclose $sockname
yahoo
return
}
if ($1 == Set-Cookie:) hadd -m yahoo auth $addtok($hget(yahoo,auth),$2,32)
}
}
on *:sockclose:yahoo.check:{
if (!$hget(yahoo,auth)) {
if ($hget(yahdata,auto.connect)) hdel yahdata auto.connect
yahoo.echo Please try another Yahoo! server
yahoo
return
}
yahoo.echo OK ( $+ $hget(yahoo,auth.server) $+ )
hadd -m yahoo auth $left($hget(yahoo,auth),-1)
if ($hget(yahoo.identities)) {
yahoo.echo Done.
dialog -m yahoo.start yahoo.start
}
else sockopen yahoo.buddy $hget(yahoo,auth.server) $hget(yahoo,auth.port)
}
;// Get buddy list
on *:sockopen:yahoo.buddy:{
yahoo.echo Loading Nameslists...
sockwrite -tn $sockname $yahoo.get.buddies
}
on *:sockread:yahoo.buddy:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread %t
if (%t == BEGIN BUDDYLIST) { sockrename $sockname yahoo.buddies | return }
}
}
on *:sockread:yahoo.buddies:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread -n &bud
if ($bvar(&bud,1,13).text == END BUDDYLIST) continue
if ($bvar(&bud,1,16).text == BEGIN IGNORELIST) { sockrename $sockname yahoo.ignores | return }
var %title = $bvar(&bud,1,$calc($bfind(&bud,1,:) - 1)).text
bcopy -c &bud 1 &bud $calc($bfind(&bud,1,:) + 1) -1
while ($bfind(&bud,1,44)) {
var %n = $bvar(&bud,1,$calc($bfind(&bud,1,44) - 1)).text
hadd -m yahoo.friends $+(%title,.,%n) %n
bcopy -c &bud 1 &bud $calc($bfind(&bud,1,44) + 1) -1
}
var %n = $bvar(&bud,1,$calc($bvar(&bud,0) - 1)).text
hadd -m yahoo.friends $+(%title,.,%n) %n
}
}
on *:sockread:yahoo.ignores:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread -n &bud
if ($bvar(&bud,1,14).text == END IGNORELIST) continue
if ($bvar(&bud,1,16).text == BEGIN IDENTITIES) { sockrename $sockname yahoo.identities | return }
while ($bfind(&bud,1,44)) {
var %n = $bvar(&bud,1,$calc($bfind(&bud,1,44) - 1)).text
hadd -m yahoo.ignores %n %n
bcopy -c &bud 1 &bud $calc($bfind(&bud,1,44) + 1) -1
}
var %n = $bvar(&bud,1,$calc($bvar(&bud,0) - 1)).text
hadd -m yahoo.ignores %n %n
}
}
on *:sockread:yahoo.identities:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread -n &bud
if ($bvar(&bud,1,14).text == END IDENTITIES) continue
if ($bvar(&bud,1,6).text == Login=) {
hadd -m yahoo login $bvar(&bud,$calc($bfind(&bud,1,=) + 1),$calc($bvar(&bud,0) - 6)).text
continue
}
if ($bvar(&bud,1,5).text == Mail=) {
var %email = $bvar(&bud,$calc($bfind(&bud,1,=) + 1),$calc($bvar(&bud,0) - 5)).text
if (%email == 0) continue
if ($hget(yahdata,show.emails)) yahoo.echo You have %email $+(email,$iif((%email > 1),s)) on your Yahoo! mailbox
continue
}
while ($bfind(&bud,1,44) > 0) {
var %n = $bvar(&bud,1,$calc($ifmatch - 1)).text
bcopy -c &bud 1 &bud $calc($ifmatch + 1) -1
hadd -m yahoo.identities %n %n
}
var %n = $bvar(&bud,1,$calc($bvar(&bud,0) - 1)).text
hadd -m yahoo.identities %n %n
}
}
on *:sockclose:yahoo.identities:{
yahoo.echo Done.
dialog -m yahoo.start yahoo.start
}
dialog yahoo.login {
title "Yahoo Chat Login"
size -1 -1 136 145
option dbu
combo 2, 10 15 115 65, sort edit drop
edit "", 4, 10 40 115 10, pass
check "Remember password", 5, 10 55 60 10, flat left
check "&Auto Connect", 6, 80 55 45 10, disable flat left
text "&Password", 1, 10 30 40 8, group
text "&Name", 3, 10 5 55 8
check "Erase personal info at program exit", 7, 20 65 95 10, disable flat left
box "", 9, 10 80 115 45
button "Lo&gin >>>", 10, 90 130 37 12, default
text "Please Login to Yahoo!", 11, 15 85 105 8, center
text "Enter a Yahoo login name and password. After login you can select a Chat ID and start chatting on Yahoo!", 12, 15 100 105 23, center
button "Delete name from list", 13, 10 80 117 12, hide disable
text "Login mode:", 14, 10 96 30 8, hide
radio "Classic", 15, 45 95 25 10, hide group flat left
radio "More Secure", 16, 80 95 40 10, hide flat left
combo 17, 10 115 70 40, hide edit drop
text "Authentication Server", 18, 10 105 65 8, hide
text "Port", 19, 85 105 25 8, hide
combo 20, 85 115 40 25, hide edit drop
text "Password is saved", 21, 10 40 115 8, hide center
check "More Options", 8, 40 130 45 12, flat push
}
on *:dialog:yahoo.login:init:0:{
if ($hget(yahdata,login.method)) did -c $dname 16 | else did -c $dname 15
if ($hget(yahdata,remember.password)) { did -c $dname 5 | if ($hget(yahdata,password)) did -a $dname 4 $ifmatch | did -h $dname 4 | did -v $dname 21 }
if ($hget(yahdata,auto.connect)) did -c $dname 6
if ($hget(yahdata,erase.data)) did -c $dname 7
if ($hget(yahdata,secure.server)) { did -c $dname 16 | did -u $dname 15 } | else did -c $dname 15
var %names = $hget(yahdata,names),%servers = $yahoo.login.servers($hget(yahdata,auth.servers)),%ports = $yahoo.login.ports($hget(yahdata,auth.ports))
while (%names) { did -a $dname 2 $gettok(%names,1,32) | %names = $deltok(%names,1,32) }
while (%servers) { did -a $dname 17 $gettok(%servers,1,32) | %servers = $deltok(%servers,1,32) }
while (%ports) { did -a $dname 20 $gettok(%ports,1,32) | %ports = $deltok(%ports,1,32) }
if ($hget(yahoo,user)) { var %q = 1 | while (%q <= $did(2).lines) { if ($hget(yahoo,user) == $did(2,%q)) did -c $dname 2 %q | inc %q } }
if ($hget(yahdata,auth.server)) did -c $dname 17 $didwm($dname,17,$ifmatch)
else did -c $dname 17 1
if ($hget(yahdata,auth.port)) did -c $dname 20 $didwm($dname,20,$ifmatch)
else did -c $dname 20 1
if ($did($dname,2,1)) did -c $dname 2 1
did -f $dname 2
if ($hget(yahdata,auto.connect)) did -e $dname 6
if ($hget(yahdata,login.more)) { did -c $dname 8 | did -h $dname 9,11,12 | did -v $dname 13,14,15,16,17,18,19,20 | did -f $dname 17 }
}
on *:dialog:yahoo.login:close:0:{
var %q = yahoo.login yahoo.start yahoo.rooms
while (%q) { if ($dialog($gettok(%q,1,32))) dialog -x $ifmatch | %q = $deltok(%q,1,32) }
sockclose yahoo.*
hsave -o yahoo.ignores $scriptdiryahoo.dat
if ($hget(yahoo)) hfree yahoo
if ($window(@Yahoo!)) window -c @Yahoo!
}
on *:dialog:yahoo.login:*:2:if ($did(5).state) && ($did(2)) did -e $dname 6 | else did -b $dname 6
on *:dialog:yahoo.login:sclick:5:{
if (!$did(4)) || (!$did(5).state) { did -u $dname 5 | did -h $dname 21 | did -rv $dname 4 | did -b $dname 6 }
else { did -c $dname 5 | did -h $dname 4 | did -v $dname 21 | if ($did(2)) did -e $dname 6 }
}
on *:dialog:yahoo.login:sclick:8:{
if ($did(8).state) { did -h $dname 9,11,12 | did -v $dname 13,14,15,16,17,18,19,20 | did -f $dname 17 | hadd -m yahdata login.more 1 }
else { did -v $dname 9,11,12 | did -h $dname 13,14,15,16,17,18,19,20 | hadd -m yahdata login.more 0 }
}
on *:dialog:yahoo.login:sclick:10:{
if ((!$did(2).sel)) && (!$did(4)) return
hadd -m yahdata remember.password $did(5).state
if ($did(5).state) hadd -m yahdata password $did(4)
else hdel yahdata password
hadd -m yahdata auto.connect $did(6).state
if ($did(6).state) hadd -m yahdata auto.user $did(2)
else hdel yahdata auto.user
hadd -m yahdata erase.data $did(7).state
hadd -m yahdata secure.server $did(16).state
var %names = $didtok($dname,2,32),%servers = $didtok($dname,17,32),%ports = $didtok($dname,20,32)
hadd -m yahdata names $iif((!$istok(%names,$did(2),32)),$addtok(%names,$did(2),32),%names)
hadd -m yahdata auth.servers $iif((!$istok(%servers,$did(17),32)),$addtok(%servers,$did(17),32),%servers)
hadd -m yahdata auth.ports $iif((!$istok(%ports,$did(20),32)),$addtok(%ports,$did(20),32),%ports)
hadd -m yahdata auth.server $did(17)
hadd -m yahdata auth.port $did(20)
hadd -m yahoo user $did(2)
hadd -m yahoo pass $did(4)
hadd -m yahoo auth.server $did(17)
hadd -m yahoo auth.port $did(20)
sockopen yahoo.check $did(17) $did(20)
dialog -x $dname
}
dialog yahoo.start {
title "Yahoo Chat Connect"
size -1 -1 136 145
option dbu
combo 2, 10 15 115 45, sort edit drop
text "&Start in Room", 1, 10 30 40 8, group
text "&Your Chat Name", 3, 10 5 55 8
button "&Chat >>>", 10, 90 130 37 12, default
combo 4, 10 40 115 55, size edit drop
button "Get the list of Yahoo &Rooms", 5, 10 55 117 12
button "Chat protocol", 6, 10 70 37 12, disable
check "Auto connect", 7, 80 70 45 10, disable flat left
edit "YCHT", 9, 50 70 25 12, read center
button "<<< Lo&gin", 11, 7 130 30 12
button "Server (&Fasthost/Scan)", 12, 10 85 77 12, hide
text "Port", 13, 90 85 25 8, hide
combo 14, 10 100 80 45, hide size drop
combo 15, 90 100 35 30, hide size drop
check "Yahoo advertisement when closing chat", 16, 15 115 105 10, hide disable flat left
text "Yahoo! Chat for mIRC was made completly by qwert (qwert` on dalnet, damn nickserv) It' is designed after the look and feel of Yahelite, a 3rd party Yahoo! Chat client.", 17, 0 85 135 23, center
text "Any Comments, email:", 18, 10 110 115 8, center
link "flipster12345@users.sourceforge.net", 19, 25 120 89 8
check "More Options", 8, 40 130 45 12, flat push
}
on *:dialog:yahoo.start:init:0:{
var %q = $hget(yahoo.identities,0).item
while (%q) { did -a $dname 2 $hget(yahoo.identities,%q).data | dec %q }
var %q = $hget(yahroom,0).item
while (%q) { did -a $dname 4 $hget(yahroom,%q).data | dec %q }
var %servers = $yahoo.chat.servers($hget(yahdata,chat.servers)),%ports = $yahoo.chat.ports($hget(yahdata,chat.ports))
while (%servers) { did -a $dname 14 $gettok(%servers,1,32) | %servers = $deltok(%servers,1,32) }
while (%ports) { did -a $dname 15 $gettok(%ports,1,32) | %ports = $deltok(%ports,1,32) }
did -c $dname 2,4 1
if ($hget(yahdata,chat.server)) did -c $dname 14 $didwm($dname,14,$ifmatch)
else did -c $dname 14 5
if ($hget(yahdata,chat.port)) did -c $dname 15 $didwm($dname,15,$ifmatch)
else did -c $dname 15 1
if ($hget(yahdata,start.more)) { did -c $dname 8 | did -v $dname 12,13,14,15,16 | did -h $dname 17,18,19 | did -f $dname 14 }
}
on *:dialog:yahoo.start:sclick:5:yahoo.rooms
on *:dialog:yahoo.start:sclick:8:{
if ($did(8).state) { did -v $dname 12,13,14,15,16 | did -h $dname 17,18,19 | did -f $dname 14 | hadd -m yahdata start.more 1 }
else { did -h $dname 12,13,14,15,16 | did -v $dname 17,18,19 | hadd -m yahdata start.more 0 }
}
on *:dialog:yahoo.start:sclick:10:{
if ($did($dname,4).sel) hadd -m yahoo join $did($dname,4,$ifmatch)
var %servers = $didtok($dname,14,32),%ports = $didtok($dname,15,32)
hadd -m yahdata chat.servers $iif((!$istok(%servers,$did(14),32)),$addtok(%servers,$did(14),32),%servers)
hadd -m yahdata chat.ports $iif((!$istok(%ports,$did(15),32)),$addtok(%ports,$did(15),32),%ports)
hadd -m yahoo chat.server $did(14)
hadd -m yahoo chat.port $did(15)
hadd -m yahdata chat.server $did(14)
hadd -m yahdata chat.port $did(15)
if (!$hget(yahoo,inchan)) yahoo.chat
else yahoo.join yahoo.chat $did(4)
dialog -x $dname
}
on *:dialog:yahoo.start:sclick:11:dialog -m yahoo.login yahoo.login | dialog -x $dname
on *:dialog:yahoo.start:sclick:12:{
yahoo.echo Scanning for fast YCHT hosts...
if ($hget(yahoo,ticks)) hdel yahoo ticks
sockclose yahoo.scan.*
var %servers = $didtok(yahoo.start,14,32)
while (%servers) { sockopen $+(yahoo.scan.,$numtok(%servers,32)) $gettok(%servers,1,32) $did(yahoo.start,15) | %servers = $deltok(%servers,1,32) }
}
on *:dialog:yahoo.start:sclick:19:run mailto: $+ $did($dname,19)
on *:sockopen:yahoo.scan.*:{
if ($sockerr > 0) return
bset &scan 1 Y C H T 0 0 1 0 0 0 0 113 0 0 0 4 h e l p
hadd -m yahoo $+(scan.,$gettok($sockname,3,46)) $ticks
sockwrite $sockname &scan
}
on *:sockread:yahoo.scan.*:{
sockread -f %tmp
if (%tmp == YCHT) {
var %ticks = $calc($ticks - $hget(yahoo,$+(scan.,$gettok($sockname,3,46)))),%server = $+(cs,$gettok($sockname,3,46),.chat.sc5.yahoo.com)
yahoo.echo %ticks $+ ms %server $+([,$sock($sockname).ip,])
if ($hget(yahoo,ticks) < %ticks) return
hadd -m yahoo ticks %ticks
did -c yahoo.start 14 $didwm(yahoo.start,14,%server)
sockclose $sockname
}
}
;// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;// Get room list
alias yahoo.rooms sockopen yahoo.catagories chat.yahoo.com 80
on *:sockopen:yahoo.catagories:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
hfree -w yahoo.channel.*
if (!$dialog(yahoo.rooms)) dialog -m yahoo.rooms yahoo.rooms
sockwrite -tn $sockname $yahoo.get.catagories
}
on *:sockread:yahoo.catagories:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
if (!$dialog(yahoo.rooms)) return
while ($sock($sockname).rq) {
sockread %t
if ($sockbr == 0) return
if (%t == $null) continue
tokenize 32 %t
if ($numtok($1-,9) == 3) {
tokenize 9 %t
hadd -m yahoo.channel $+(name.,$1) $3
did -a yahoo.rooms 5 $+($iif(($2 == 2),$str(Â ,2),$iif(($2 == 3),$str(Â ,4))),$3)
}
}
}
on *:sockclose:yahoo.catagories:{
if ($dialog(yahoo.rooms)) did -ra $ifmatch 11 Loaded $did($ifmatch,5).lines catagories, $did($ifmatch,6).lines Yahoo rooms, $did($ifmatch,7).lines User rooms.
}
on *:sockopen:yahoo.rooms:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
sockwrite -tn $sockname $yahoo.get.rooms
}
on *:sockread:yahoo.rooms:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
while ($sock($sockname).rq) {
sockread %t
if ($sockbr == 0) return
if (%t == $null) continue
tokenize 32 %t
if ($1- == PRIVATE_ROOMS) hadd -m yahoo private 1
if ($numtok($1-,9) == 4) {
tokenize 9 %t
var %room = $4,%roomname = $2
if (!$hget(yahoo,private)) {
hadd -m yahoo.channel $+(name.,$1) $2
hadd -m yahoo.channel $+(parent,$1) $hget(yahoo,get.room)
}
while (%room) {
tokenize 44 %room
var %list = $+(%roomname,:,$gettok($1,1,58),$chr(160),$chr(40),$gettok($1,2,58),$chr(41),$iif(($numtok($1,58) == 3),$+($chr(32),[v,$gettok($1,3,58),])))
if (!$hget(yahoo,private)) did -a yahoo.rooms 6 %list
else did -a yahoo.rooms 7 %list
var %room = $deltok(%room,1,44)
}
}
}
}
on *:sockclose:yahoo.rooms:{
hdel yahoo private
if ($dialog(yahoo.rooms)) did -ra $ifmatch 11 Loaded $did($ifmatch,5).lines catagories, $did($ifmatch,6).lines Yahoo rooms, $did($ifmatch,7).lines User rooms.
}
dialog yahoo.rooms {
title "Yahoo Room List"
size -1 -1 315 165
option dbu
button "&Refresh Catagories", 1, 5 5 57 12
combo 2, 110 5 100 50, disable size drop
button "L&ocale Listing", 3, 215 5 97 12, disable flat
text "Locale &Server", 4, 65 5 45 8
list 5, 5 20 100 125, size
list 6, 110 20 100 125, sort size hsbar vsbar
list 7, 215 20 95 125, size hsbar vsbar
button "To Clipboard", 8, 5 150 42 12, disable
button "Join Room", 9, 275 150 37 12, disable default ok
box "", 10, 50 145 220 15
text "", 11, 55 150 210 8, center
edit "", 12, 50 155 220 10, hide
}
on *:dialog:yahoo.rooms:init:0:did -ra $dname 11 Loading catagories...
on *:dialog:yahoo.rooms:sclick:1:did -ra $dname 11 Loading catagories... | did -r $dname 5,6,7,12 | did -b $dname 8,9 | yahoo.rooms
on *:dialog:yahoo.rooms:sclick:5:var %room = $remove($did($dname,5,$did(5).sel),$chr(160)),%room = $+(%room,::,$gettok($hfind(yahoo.channel,%room,1).data,2,46)) | did -e $dname 8,9 | did -ra $dname 11,12 %room
on *:dialog:yahoo.rooms:dclick:5:{
var %room = $remove($did($dname,5,$did(5).sel),$chr(160)),%id = $gettok($hfind(yahoo.channel,%room,1).data,2,46) | hadd -m yahoo get.room %id | did -ra $dname 12 $+(%room,::,%id)
did -r $dname 6,7 | did -b $dname 8,9 | did -ra $dname 11 Loading rooms... | sockopen yahoo.rooms chat.yahoo.com 80
}
on *:dialog:yahoo.rooms:sclick:6:{
var %line = $did($dname,6,$did(6).sel),%room = $gettok(%line,1,160),%id = $gettok($hfind(yahoo.channel,$gettok(%room,1,58),1).data,2,46),%info = $remove($gettok(%line,2,160),v,[,],$chr(40),$chr(41))
did -ra $dname 11 $+(%line,::,%id) $gettok(%info,1,32) guests, $gettok(%info,2,32) in voice | did -ra $dname 12 %room | did -e $dname 8,9 | did -u $dname 7
}
on *:dialog:yahoo.rooms:sclick:7:{
var %line = $did($dname,7,$did(7).sel),%room = $gettok(%line,1,160),%id = $hget(yahoo,get.room) = $remove($gettok(%line,2,160),v,[,],$chr(40),$chr(41))
did -ra $dname 11 $+(%line,::,%id) $gettok(%info,1,32) guests | did -ra $dname 12 %room | did -e $dname 8,9 | did -u $dname 6
}
on *:dialog:yahoo.rooms:dclick:6:if ($hget(yahoo,connected)) return | elseif ($dialog(yahoo.start)) did -ci $ifmatch 4 1 $gettok($did($dname,6,$did(6).sel),1,160) | dialog -x $dname
on *:dialog:yahoo.rooms:dclick:7:if ($hget(yahoo,connected)) return | elseif ($dialog(yahoo.start)) did -ci $ifmatch 4 1 $gettok($did($dname,7,$did(7).sel),1,160) | dialog -x $dname
on *:dialog:yahoo.rooms:sclick:8:clipboard $did($dname,12)
on *:dialog:yahoo.rooms:sclick:9:if ($hget(yahoo,connected)) return | elseif ($dialog(yahoo.start)) did -ci $ifmatch 4 1 $did($dname,12) | dialog -x $dname
;// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
alias yahoo.sockerr set -u %:echo echo $color(info) -slmbfti2 | set -u %::text $+(Error,$chr(40),$1,$chr(41)) $2 | if ($mtsversion) theme.text Error | else %:echo *** %::text
alias -l yahoo.login.servers var %p = $1-,%q = edit.yahoo.com edit.my.yahoo.com edit.europe.yahoo.com msg.edit.yahoo.com edit.in.yahoo.com edit.tpe.yahoo.com | while (%q) { if (!$istok(%p,$gettok(%q,1,32),32)) %p = $addtok(%p,$gettok(%q,1,32),32) | %q = $deltok(%q,1,32) } | return %p
alias -l yahoo.login.ports var %p = $1-,%q = 80 | while (%q) { if (!$istok(%p,$gettok(%q,1,32),32)) %p = $addtok(%p,$gettok(%q,1,32),32) | %q = $deltok(%q,1,32) } | return %p
alias -l yahoo.chat.servers var %p = $1-,%q = cs1.chat.sc5.yahoo.com cs2.chat.sc5.yahoo.com cs3.chat.sc5.yahoo.com cs4.chat.sc5.yahoo.com cs5.chat.sc5.yahoo.com cs6.chat.sc5.yahoo.com cs7.chat.sc5.yahoo.com cs8.chat.sc5.yahoo.com cs9.chat.sc5.yahoo.com | while (%q) { if (!$istok(%p,$gettok(%q,1,32),32)) %p = $addtok(%p,$gettok(%q,1,32),32) | %q = $deltok(%q,1,32) } | return %p
alias -l yahoo.chat.ports var %p = $1-,%q = 8001 8002 | while (%q) { if (!$istok(%p,$gettok(%q,1,32),32)) %p = $addtok(%p,$gettok(%q,1,32),32) | %q = $deltok(%q,1,32) } | return %p
on *:sockwrite:yahoo.chat:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
}
on *:close:@Yahoo!:{
var %q = yahoo.login yahoo.start yahoo.rooms
while (%q) { if ($dialog($gettok(%q,1,32))) dialog -x $ifmatch | %q = $deltok(%q,1,32) }
sockclose yahoo.*
hsave -o yahoo.ignores $scriptdiryahoo.dat
if ($hget(yahoo)) hfree yahoo
window -c @Yahoo! Room
}
;// 12th byte definitions
;// 1 - Login complete
;// 2 - Logoff Successful
;// 17 - Join channel
;// 18 - Part channel
;// 65 - Channel message
;// 104 - User(s) is online
;// 69 - Private message
;// 70 - User is away/back
;// 62 - Ping?
alias yahoo.chat sockopen yahoo.chat $hget(yahoo,chat.server) $hget(yahoo,chat.port)
alias yahoo.re.chat {
if ($input(Connection to the CHAT server failed. $crlf $+ Do you want to try another Yahoo server?,yq,$sock($sockname))) {
echo -a $hget(yahoo,chat.server)
dialog -m yahoo.start yahoo.start
}
}
on *:sockopen:yahoo.chat:{
if ($sockerr > 0) {
yahoo.re.chat $sock($sockname)
sockclose $sockname
return
}
set -u %:echo echo $color(info) -lmbfti2 @Yahoo!
set -u %::text Logging into Yahoo! chat
if ($mtsversion) theme.text Echo
else %:echo *** %::text
yahoo.login $sockname
}
on *:sockclose:yahoo.chat:{
window -c @Yahoo!
hsave -o yahoo.ignores $scriptdiryahoo.dat
hfree yahoo
hfree yahoo.channel
set -u %:echo echo $color(info) -slmbfti2
set -u %::text Disconnected from Yahoo! chat
if ($mtsversion) theme.text Echo
else %:echo *** %::text
}
on *:sockread:yahoo.chat:{
if ($sockerr > 0) { yahoo.sockerr $sock($sockname).wserr $sock($sockname).wsmsg | return }
echo -s rq = $sock($sockname).rq
if (!$hget(yahoo,packet)) {
sockread 16 &yahoo.header
bwrite FILE -1 -1 <-
bwrite FILE -1 -1 &yahoo.header
}
if (!$hget(yahoo,packet.size)) hadd -m yahoo packet.size $yahoo.size2($bvar(&yahoo.header,15,2))
echo -s packet size = $hget(yahoo,packet.size) rq = $sock($sockname).rq
if (!$hget(yahoo,packet.type)) hadd -m yahoo packet.type $bvar(&yahoo.header,12,1)
if ($sock($sockname).rq < $hget(yahoo,packet.size)) {
echo 6 -s Incomplete packet in recieve queue, saving data
hadd -m yahoo packet.size $calc($hget(yahoo,packet.size) - $sock($sockname).rq)
sockread $sock($sockname).rq &yahoo
hadd -bm yahoo packet &yahoo
bwrite FILE -1 -1 &yahoo
bwrite FILE -1 -1 $crlf
}
else {
sockread $hget(yahoo,packet.size) &yahoo
bwrite FILE -1 -1 &yahoo
bwrite FILE -1 -1 $crlf
if ($hget(yahoo,packet,&yahoo.body)) {
bcopy -c &yahoo.body $calc(1 + $bvar(&yahoo.body,0)) &yahoo 1 -1
hdel yahoo packet
}
else bcopy -c &yahoo.body 1 &yahoo 1 -1
bunset &yahoo
hadd -bm yahoo text &yahoo.body
if ($hget(yahoo,packet.type) == 1) yahoo.join $sockname $iif($hget(yahoo,join),$ifmatch)
if ($hget(yahoo,packet.type) == 2) yahoo.quit
if ($hget(yahoo,packet.type) == 17) yahoo.users
if ($hget(yahoo,packet.type) == 18) yahoo.part
if ($hget(yahoo,packet.type) == 65) yahoo.text
if ($hget(yahoo,packet.type) == 67) yahoo.action
if ($hget(yahoo,packet.type) == 104) yahoo.friend
hdel yahoo packet.size
hdel yahoo packet.type
}
}
alias yahoo.login {
bset &yahoo 1 Y C H T 0 0 1 125 0 0 0 1 0 0 $yahoo.size($+($hget(yahoo,user),1,$hget(yahoo,auth)))
bset -t &yahoo $calc(1 + $bvar(&yahoo,0)) $hget(yahoo,user)
bset &yahoo $calc(1 + $bvar(&yahoo,0)) 1
bset -t &yahoo $calc(1 + $bvar(&yahoo,0)) $hget(yahoo,auth)
sockwrite -b $1 $bvar(&yahoo,0) &yahoo
bwrite FILE -1 -1 ->
bwrite FILE -1 -1 &yahoo
bwrite FILE -1 -1 $crlf
}
alias yahoo.join {
bset &yahoo.join 1 Y C H T 0 0 1 125 0 0 0 17 0 0
if ($2) {
bset &yahoo.join $calc(1 + $bvar(&yahoo.join,0)) $yahoo.size($2-)
bset -t &yahoo.join $calc(1 + $bvar(&yahoo.join,0)) $2-
}
else bset &yahoo.join $calc(1 + $bvar(&yahoo.join,0)) 0 0
bwrite FILE -1 -1 ->
bwrite FILE -1 -1 &yahoo.join
bwrite FILE -1 -1 $crlf
sockwrite -b yahoo.chat $bvar(&yahoo,0) &yahoo.join
hdel yahoo join
if ($2) {
hadd -m yahoo chan $2-
set -u %:echo echo $color(join) -lmbfti2 @Yahoo!
set -u %::text Attempting to join $2-
if ($mtsversion) theme.text JoinSelf
else %:echo *** %::text
}
}
alias yahoo.ignore {
hadd -m yahoo.ignores $1 $1
cline -l $color(grayed) $fline(@Yahoo!,$1,1,1)
}
alias yahoo.quit {
window -c @Yahoo!
sockclose yahoo.chat
}
alias yahoo.text {
if ($hget(yahoo,text,&yahoo.text)) {
tokenize 1 $replace($bvar(&yahoo.text,1,800).text,À€,)
if ($hfind(yahoo.ignores,$2,1,W)) return
var %strip = .<font.</font.<fade.</fade.<alt.</alt.<b.</b.<red.<green.<purple,%stripend = m.>.>.>.>.>.>.>.>.>.>.>,%text = $replace($+(`,$3-),$chr(32),$chr(160))
while (%strip) {
while ($pos(%text,$gettok(%strip,1,46),1)) { var %left = $left(%text,$calc($ifmatch - 1)),%right = $right(%text,$+(-,$ifmatch)),%pos2 = $pos(%right,$gettok(%stripend,1,46),1),%right = $right(%right,$+(-,%pos2)),%text = %left $+ %right }
var %strip = $gettok(%strip,2-,46),%stripend = $gettok(%stripend,2-,46)
}
set -u %:echo echo $color(text) -lmbfti2 @Yahoo!
set -u %::text $replace($right(%text,$calc($len(%text) - 1)),$chr(160),$chr(32))
set -u %::nick $2
if ($mtsversion) theme.text TextChan
else %:echo $+(<,$2,>) %::text
}
}
alias yahoo.action {
if ($hget(yahoo,text,&yahoo.text)) {
tokenize 1 $replace($bvar(&yahoo.text,1,800).text,À€,)
if ($hfind(yahoo.ignores,$2,1,W)) return
var %strip = .<font.</font.<fade.</fade.<alt.</alt.<b.</b.<red.<green.<purple,%stripend = m.>.>.>.>.>.>.>.>.>.>.>,%text = $replace($+(`,$3-),$chr(32),$chr(160))
while (%strip) {
while ($pos(%text,$gettok(%strip,1,46),1)) { var %left = $left(%text,$calc($ifmatch - 1)),%right = $right(%text,$+(-,$ifmatch)),%pos2 = $pos(%right,$gettok(%stripend,1,46),1),%right = $right(%right,$+(-,%pos2)),%text = %left $+ %right }
var %strip = $gettok(%strip,2-,46),%stripend = $gettok(%stripend,2-,46)
}
set -u %:echo echo $color(action) -lmbfti2 @Yahoo!
set -u %::text $replace($right(%text,$calc($len(%text) - 1)),$chr(160),$chr(32))
set -u %::nick $2
if ($mtsversion) theme.text ActionChan
else %:echo $2 %::text
}
}
alias yahoo.users {
if ($hget(yahoo,text,&yahoo.user)) {
if ($bvar(&yahoo.user,1,18).text == That room is full.) {
aline 4 @Yahoo! $hget(yahoo,chan) is full. Use /knock to keep trying, or join another room.
return
}
if (!$hget(yahoo,inchan)) {
if ($bvar(&yahoo.user,1,27).text == *** Danger Will Robinson!!!) return
hadd -m yahoo inchan $true
hadd -m yahoo vcauth $bvar(&yahoo.user,$calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,1,128) + 1),128) + 1),61) + 1),61) + 1),34).text
var %chan = $bvar(&yahoo.user,1,$calc($bfind(&yahoo.user,1,À) - 1)).text
bcopy -c &yahoo.user 1 &yahoo.user $calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,$calc($bfind(&yahoo.user,1,128) + 1),128) + 1),128) + 1),128) + 1) -1
while ($bfind(&yahoo.user,1,) > 0) {
var %n = $bvar(&yahoo.user,1,$calc($bfind(&yahoo.user,1,2) - 1)).text
bcopy -c &yahoo.user 1 &yahoo.user $calc($bfind(&yahoo.user,1,) + 1) -1
if ($hfind(yahoo.ignores,%n,1,W)) aline -l $color(greyed) @Yahoo! %n
elseif ($hget(yahoo.friends,%n)) aline -l $color(title) @Yahoo! %n
else aline -l @Yahoo! %n
}
var %n = $bvar(&yahoo.user,1,$calc($bfind(&yahoo.user,1,2) - 1)).text
hadd -m yahoo camauth $bvar(&yahoo.user,$calc($bvar(&yahoo.user,0) - 33),34).text
if ($hfind(yahoo.ignores,%n,1,W)) aline -l $color(greyed) @Yahoo! %n
elseif ($hget(yahoo.friends,%n)) aline -l $color(title) @Yahoo! %n
else aline -l @Yahoo! %n
hadd -m yahoo chan %chan
hadd -m yahroom %chan %chan
titlebar @Yahoo! %chan $+([,$line(@Yahoo!,0,1),])
set -u %:echo echo $color(join) -lmbfti2
set -u %::chan %chan
if ($mtsversion) theme.text JoinSelf
else %:echo * Now talking in %chan
}
else {
if ($bvar(&yahoo.user,1,27).text == *** Danger Will Robinson!!!) return
tokenize 1 $replace($bvar(&yahoo.body,1,800).text,À€,)
var %n = $gettok($5,1,2)
if (!$hfind(yahoo.ignores,%n,W)) {
set -u %:echo echo $color(join) -lmbfti2 @Yahoo!
set -u %::chan $1
set -u %::address $+(%n,@Yahoo!.com)
set -u %::nick %n
if ($mtsversion) theme.text Join
else %:echo * %n has joined $1
if ($hfind(yahoo.friends,$+(*.,%n),1,w)) aline -l $color(title) @Yahoo! %n
aline -l @Yahoo! %n
}
else aline -l $color(grayed) @Yahoo! %n
titlebar @Yahoo! $gettok($window(@Yahoo!).title,1,32) $+([,$line(@Yahoo!,0,1),])
}
}
}
alias yahoo.part {
if ($hget(yahoo,text,&yahoo.part)) {
tokenize 1 $replace($bvar(&yahoo.part,1,800).text,À€,)
if ($2 == $hget(yahoo,user)) {
dline -l @Yahoo! $+(1-,$line(@Yahoo!,0))
}
else {
dline -l @Yahoo! $fline(@Yahoo!,$2,1,1)
}
if (!$hfind(yahoo.ignores,$2,1,W)) {
set -u %:echo echo $color(quit) -lmbfti2 @Yahoo!
set -u %::address $+($2,@Yahoo!.com)
set -u %::nick $2
if ($mtsversion) theme.text Quit
else %:echo * $2 has Quit
}
titlebar @Yahoo! $gettok($window(@Yahoo!).title,1,32) $+([,$line(@Yahoo!,0,1),])
}
}
alias yahoo.quit {
hsave -o yahoo.ignores $scriptdiryahoo.dat
window -c @Yahoo!
hfree yahoo
hfree yahoo.channel
set -u %:echo echo $color(info) -slmbfti2
set -u %::text You have been logged off of Yahoo! chat
if ($mtsversion) theme.text Error
else %:echo *** %::text
}
alias yahoo.friend {
if ($hget(yahoo,text,&yahoo.friend)) {
if ($bvar(&yahoo.friend,1) == 48) {
var %a = $bvar(&yahoo.friend,4,$calc($bfind(&yahoo.friend,4,À) - 4)).text
if ($hget(yahoo.online.friends,%a)) hdel yahoo.online.friends $hget(yahoo.online.friends,%a)
}
else {
bcopy -c &yahoo.friend 1 &yahoo.friend 4 -1
while ($bfind(&yahoo.friend,1,À) != 0) {
var %end = $calc($bfind(&yahoo.friend,1,À) - 1)
hadd -m yahoo.online.friends $bvar(&yahoo.friend,1,%end).text $bvar(&yahoo.friend,1,%end).text
if ($calc($bvar(&yahoo.friend,0) - %end) = 3) break
bcopy -c &yahoo.friend 1 &yahoo.friend $calc(%end + 6) -1
}
}
}
}
;// Misc functions
;// Echo info to the @Yahoo! window
alias -l yahoo.echo {
set -u %:echo echo $color(info) -lmbfti2 @Yahoo!
set -u %::text $1-
if ($mtsversion) theme.text Echo
else %:echo *** %::text
}
;// Size of outgoing packet
alias yahoo.size {
var %a = $gettok($calc($len($1-) / 256),1,46)
var %b = $calc($len($1-) - $calc(%a * 256))
return %a %b
}
;// Size of incoming packet
alias yahoo.size2 {
tokenize 32 $1-
var %a = $calc($1 * 256)
return $calc(%a + $2)
}
menu @Yahoo! {
$iif(($sline(@Yahoo!,1)),View Profile):run $+(http://profiles.yahoo.com/,$$1)
Ignore
.Ignore this user:yahoo.ignore $$1
.Bot ignore:yahoo.ignore $replace($$1,1,?,2,?,3,?,4,?,5,?,6,?,7,?,8,?,9,?,0,?)
-
Change rooms:dialog -m yahoo.start yahoo.start
Get Yahoo! room list:yahoo.rooms
-
Buddy List:yahoo.buddy
-
Quit Yahoo! chat:yahoo.quit
}
on *:input:@Yahoo!:{
if (($left($1,1) == $readini($mircini,text,commandchar)) && (!$ctrlenter)) {
if (($1 == /join) || ($1 == /j)) yahoo.join yahoo.chat $2
if (($1 == /ignore) || ($1 == /i)) yahoo.ignore yahoo.chat $2
if ($1 == /buddy) yahoo.buddy
if ($1 == /knock) aline 4 @Yahoo! /knock Command not implimented yet
if (($1 == /list) || ($1 == /l)) yahoo.rooms
}
else {
bset &yahoo.send 1 Y C H T 0 0 1 125 0 0 0 65 0 0 $yahoo.size($+($hget(yahoo,chan),1,$1-))
bset -t &yahoo.send $calc(1 + $bvar(&yahoo.send,0)) $hget(yahoo,chan)
bset &yahoo.send $calc(1 + $bvar(&yahoo.send,0)) 1
;// Truncating lines to 450 characters cuz YCHT can only send 500, and im not sure if thats entire
;// data packet or just message
bset -t &yahoo.send $calc(1 + $bvar(&yahoo.send,0)) $left($1-,450)
bwrite FILE -1 -1 ->
bwrite FILE -1 -1 &yahoo.send
bwrite FILE -1 -1 $crlf
sockwrite -b yahoo.chat $bvar(&yahoo.send,0) &yahoo.send
}
halt
}
;// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;// Misc stuff
alias yahoo.buddy dialog -m yahoo.buddy.list yahoo.buddy.list
dialog yahoo.buddy.list {
title "'s Buddylist"
size -1 -1 145 110
option dbu
text "Selected &Friends", 5, -10 20 90 8, center
list 6, 0 30 80 60, size
button "&Go To", 7, 0 95 17 12, disable
button "&Invite", 8, 20 95 17 12, disable
button "P&M", 9, 40 95 12 12, disable
button "&Delete", 10, 55 95 22 12
text "C=Chat, P=Pager, G=Games, Y=Yahoo Buddy Note: Close Messenger before deleting buddies.", 11, 80 0 65 58, center
check "In &Chat", 1, 0 0 35 10, disable push
check "On &Pager", 2, 35 0 40 10, push
check "In G&ames", 3, 0 10 35 10, disable push
check "&Offline", 4, 35 10 40 10, push
}
on *:dialog:yahoo.buddy.list:init:0:{
if ($hget(yahdata,buddy.inchat)) did -c $dname 1
if ($hget(yahdata,buddy.onpager)) did -c $dname 2
if ($hget(yahdata,buddy.ingames)) did -c $dname 3
if ($hget(yahdata,buddy.offline)) did -c $dname 4
yahoo.fill.buddylist
}
on *:dialog:yahoo.buddy.list:sclick:2:{
hadd -m yahdata buddy.onpager $did(2).state
if (!$did(4).state) yahoo.fill.buddylist
}
on *:dialog:yahoo.buddy.list:sclick:4:{
hadd -m yahdata buddy.offline $did(4).state
yahoo.fill.buddylist
}
alias -l yahoo.fill.buddylist {
var %q = $hget(yahoo.friends,0).item,%p = $hget(yahoo.online.friends,0).item,%d = yahoo.buddy.list
did -r %d 6
if ($did(yahoo.buddy.list,4).state) {
while (%q) {
var %w = $hget(yahoo.friends,%q).data
did -a %d 6 $yahoo.buddy.flags(%w) %w
dec %q
}
}
elseif ($did(yahoo.buddy.list,2).state) {
while (%p) {
var %w = $hget(yahoo.online.friends,%p).data
did -a %d 6 $yahoo.buddy.flags(%w) %w
dec %p
}
}
}
alias -l yahoo.buddy.flags {
return $+($iif(($hget(yahoo.room.users,$1)),C,-),$iif(($hget(yahoo.online.friends,$1)),P,-),$iif((1 = 0),G,-),$iif(($gettok($hfind(yahoo.friends,$1,1).data,1,46) == Friends),Y,-))
}