on *:text:!dictionary *:#: {
if ($mysocket(dictionary,http://www.dictionary.com/browse/ $+ $replacex($2-,$chr(32),% $+ 20) $+ ?s=t)) {
hadd $v1 channel #
hadd $v1 word $2-
}
}
alias -l dictionary {
if ($2 == error) msg $hget($1,channel) An error occurred, please try again.
else {
if ($bfind(&mysocket,1,<span class="def-number">1.</span>)) && ($bfind(&mysocket,$v1,<div class="def-content">)) {
var %s = $v1 + 28
if ($bfind(&mysocket,%s,</div>)) msg $hget($1,channel) $upper($hget($1,word)) $+ : $regsubex($bvar(&mysocket,%s,$calc($v1 -%s)).text, /<[^>]+(?:>|$)|^[^<>]+>/g,$null)
else msg $hget($1,channel) No word found.
}
else msg $hget($1,channel) No word found.
}
}
alias mysocket {
if (www.?*.??* iswm $2) tokenize 32 $1 http:// $+ $2
if (http://?*.??* iswm $2) || (https://?*.??* iswm $2) {
var %e = $iif($gettok($2,1,47) == https:,-e),%a $gettok($2,2,47),%p $iif($gettok(%a,2,58) isnum 60-65535,$v1,$iif(%e,443,80)),%a $gettok(%a,1,58),%s $sha1($2,0) $+ .mysocket
mysocket.k %s
hmake %s
hadd %s command $1
hadd %s full $2
hadd %s port %p
hadd %s host %a
hadd %s path $iif($gettok($2,3-,47),/ $+ $v1 $+ $iif($right($2,1) == /,/),/)
hadd %s r 0
sockopen %e %s %a %p
.timermysocket. $+ %s -io 1 60 mysocket.t %s
if ($isid) return %s
}
else $iif($isid,return,echo -a Invalid input, us as: /mysocket <command> <link>)
}
alias -l mysocket.t $hget($1,command) $1 error open Connection timeout | mysocket.k $1
alias -l mysocket.k hfree -w $1 | sockclose $1 | .timermysocket. $+ $1 off | .remove $1 | unset %c.t
on *:sockopen:*.mysocket: {
tokenize 32 $sockname
if ($sockerr) mysocket.e $1 open
else {
sockwrite -tn $1 GET $hget($1,path) HTTP/1.1
sockwrite -tn $1 Host: $hget($1,host)
sockwrite -tn $1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/45.0
sockwrite -tn $1 Accept: text/html
sockwrite -tn $1 Connection: close
sockwrite -t $1 $crlf
}
}
on *:sockread:*.mysocket: {
tokenize 32 $sockname
if ($sockerr) mysocket.e $1 read
elseif ($hget($1,r)) mysocket.r $1
else {
sockread -f %c.t
while ($sockbr > 2) { hadd $1 %c.t | sockread -f %c.t }
if ($sockbr) { hadd $1 r $calc($sock($1).rcvd +$iif($hget($1,Content-Length:) <= 2097152,$v1,$v2)) | if ($sock($1).rq) mysocket.r $1 }
}
}
on *:sockclose:*.mysocket:mysocket.d $sockname
alias -l mysocket.r sockread $sock($1).rq &b | bwrite $1 -1 &b | if ($sock($1).rcvd >= $hget($1,r)) mysocket.d $1
alias -l mysocket.e $hget($1,command) $1 error $2 $sockerr $sock($1).wsmsg | mysocket.k $1
alias -l mysocket.d {
if ($hget($1,Transfer-Encoding:) == chunked) {
var %y = 1
bread $1 0 $file($1).size &f
while ($bfind(&f,%y,$crlf).text) {
var %v = $v1,%h $bvar(&f,%y,$calc(%v -%y)).text,%r $base(%h,16,10),%y $calc(%v +4+%r)
if (%r == 0) break
else bcopy &mysocket $calc(1+$bvar(&mysocket,0)) &f $calc(2+%v) %r
}
}
else bread $1 0 $file($1).size &mysocket
$hget($1,command) $1 $iif($bvar(&mysocket,0),done,error read No data received.)
mysocket.k $1
}