on $*:TEXT:/^[!@]rank .*/Si:#:{ var %x = 1 while ($sock($+(rank.,%x))) inc %x if (!$rsskill($2)) && (!$rsskill($3)) { .notice $nick $c1(Please specify a RS skill.) halt } elseif ($remove($3,$chr(44)) !isnum 1-1000000) && ($remove($2,$chr(44)) !isnum 1-1000000) { .notice $nick $c1(Please specify a rank between 1 and 1,000,000.) halt } else { set $+(%,rank.target.,%x) $iif(@* iswm $1,.msg $chan,.notice $nick) set $+(%,rank.skill.,%x) $iif($rsskill($2),$ifmatch,$rsskill($3)) set $+(%,rank.rank.,%x) $iif($remove($3,$chr(44)) isnum,$remove($3,$chr(44)),$remove($2,$chr(44))) set $+(%,rank.y.,%x) 1 sockopen $+(rank.,%x) hiscore.runescape.com 80 } } on *:SOCKOPEN:rank.*:{ var %x = $gettok($sockname,2,46), %table = $gettok($($+(%,rank.skill.,%x),2),2,46), %rank = $($+(%,rank.rank.,%x),2) sockwrite -nt $sockname GET $+(/lang/en/aff/runescape/overall.ws?table=,%table,&rank=,%rank) HTTP/1.1 sockwrite -nt $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf } on *:SOCKREAD:rank.*:{ var %x = $gettok($sockname,2,46), %skill = $gettok($($+(%,rank.skill.,%x),2),1,46), %rank = $($+(%,rank.rank.,%x),2) if ($sockerr) { %target $c1(*** Socket error:) $c2($sock($sockname).wsmsg) halt } else { var %read sockread %read if (*#AA0022* iswm %read) && ($nohtml(%read) != $bytes(%rank,b)) { set $+(%,rank.,$replace($($+(%,rank.y.,%x),2),1,user,2,level,3,exp),.,%x) $nohtml(%read) inc $+(%,rank.y.,%x) 1 } } } on *:SOCKCLOSE:rank.*:{ var %x = $gettok($sockname,2,46), %target = $($+(%,rank.target.,%x),2), %skill = $gettok($($+(%,rank.skill.,%x),2),1,46), %rank = $($+(%,rank.rank.,%x),2), %user = $($+(%,rank.user.,%x),2), %level = $($+(%,rank.level.,%x),2), %exp = $($+(%,rank.exp.,%x),2) if (!%user) { %target $c1(No one is ranked) $c2($+($bytes(%rank,b),$right($ord(%rank),2))) $c1(in) $c2(%skill) $+ $c1(.) } else { %target $c1(Ranked) $c2($+($bytes(%rank,b),$right($ord(%rank),2))) $c1(in) $c2(%skill) $c1(is:) $c2(%user) %target $c1(Level:) $c2(%level  $+ $chr(124) $+ ) $c1(Exp:) $c2(%exp) } cleanup %x } alias -l cleanup { unset $+(%,rank.*.,$1) } alias -l c1 { return $+(14,$1-,) } alias -l c2 { return $+(07,$1-,) } alias -l rsskill { if ($regex($1,/^(st|(skill)?total|overall)$/Si)) return Overall.0 elseif ($regex($1,/^at(t|k|tack)$/Si)) return Attack.1 elseif ($regex($1,/^def(en[cs]e)?$$/Si)) return Defence.2 elseif ($regex($1,/^str(ength)?$/Si)) return Strength.3 elseif ($regex($1,/^hp|hit(s|points?)?$/Si)) return Hitpoints.4 elseif ($regex($1,/^range(r|d|ing)?$/Si)) return Ranged.5 elseif ($regex($1,/^Pray(er)?$$/Si)) return Prayer.6 elseif ($regex($1,/^mag(e|ic)$$/Si)) return Magic.7 elseif ($regex($1,/^cook(ing)?$/Si)) return Cooking.8 elseif ($regex($1,/^wc|wood(cut(ting)?)?$/Si)) return Woodcutting.9 elseif ($regex($1,/^fletch(ing)?$/Si)) return Fletching.10 elseif ($regex($1,/^fish(ing)?$/Si)) return Fishing.11 elseif ($regex($1,/^(fire|fm)(make?(ing)?|ing)?$/Si)) return Firemaking.12 elseif ($regex($1,/^craft(ing)?$/Si)) return Crafting.13 elseif ($regex($1,/^(smith|smelt)(ing)?$/Si)) return Smithing.14 elseif ($regex($1,/^min(e|ing)?$/Si)) return Mining.15 elseif ($regex($1,/^herb(law|lore)?$/Si)) return Herblore.16 elseif ($regex($1,/^agil(ity)?$/Si)) return Agility.17 elseif ($regex($1,/^(th(ei|ie)[fv](e|ing)?)$/Si)) return Thieving.18 elseif ($regex($1,/^slay(er|ing)?$/Si)) return Slayer.19 elseif ($regex($1,/^farm(er|ing)?$/Si)) return Farming.20 elseif ($regex($1,/^(rc|runecraft)(er|ing)?$/Si)) return Runecraft.21 elseif ($regex($1,/^hunt(ing|er)?$/Si)) return Hunter.22 elseif ($regex($1,/^(construct)(ion|ing)?$/si)) return Construction.23 } alias -l nohtml { var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x) %x = $replace(%x, ,$null) return %x }