menu channel { Runescape Stats Kicker:/rsstatskicker } alias rsstats { dialog -ma rsstats rsstats } alias rsstatskicker { dialog -ma rsstatskicker rsstatskicker } dialog rsstatskicker { title "Runescape Stats Kicker" size -1 -1 177 161 option dbu tab "Channels", 1, -2 -1 179 185 combo 2, 21 52 124 44, tab 1 size text "Settings: Channels", 3, 22 26 122 8, tab 1 button "Add", 7, 23 99 37 12, tab 1 button "Remove", 8, 65 99 37 12, tab 1 button "Clear", 9, 109 99 37 12, tab 1 button "Clear Confirm", 10, 109 111 37 12, tab 1 tab "Nicks", 11 combo 12, 21 52 80 50, tab 11 size text "Settings: Nicks", 13, 22 26 79 8, tab 11 text "Nicks below will not be kicked", 14, 22 34 79 8, tab 11 button "Add", 15, 110 52 37 12, tab 11 button "Remove", 16, 110 66 37 12, tab 11 button "Clear", 17, 110 80 37 12, tab 11 button "Clear Confirm", 18, 110 94 37 12, tab 11 tab "Cache", 19 text "Cache:", 21, 22 26 25 8, tab 19 text "A feature that saves if the nick meets the requirements for that channel. This will eliminate the need to retrieve the stats for the user every time they join.", 20, 22 34 119 29, tab 19 button "Clear Cache", 22, 24 80 37 12, tab 19 button "Ok", 6, 110 139 37 12, ok cancel } alias rsstatskicker.refresh { did -h rsstatskicker 10,18 did -r rsstatskicker 2,12 var %x = 1 while ($read(RSstatschan.txt,%x)) { did -a rsstatskicker 2 $read(RSstatschan.txt,%x) inc %x continue } var %x = 1 while ($read(RSstatsnick.txt,%x)) { did -a rsstatskicker 12 $read(RSstatsnick.txt,%x) inc %x continue } } on *:dialog:rsstatskicker:init:*: { rsstatskicker.refresh } on *:dialog:rsstatskicker:sclick:*: { if ($did == 7) { if (!$read(RSStatschan.txt,w,$did(2))) && ($chr(35) isin $did(2)) { write RSStatschan.txt $did(2) rsstatskicker.refresh } } if ($did == 8) { if ($read(RSStatschan.txt,w,$did(2))) { write -ds $+ $gettok($did(2),1,32) RSStatschan.txt rsstatskicker.refresh } } if ($did == 9) { did -v rsstatskicker 10 } if ($did == 10) { .remove rsstatschan.txt rsstatskicker.refresh } if ($did == 15) { if (!$read(RSStatsnick.txt,w,$gettok($mask($did(12),2),1,32))) { write RSStatsnick.txt $mask($did(12),2) rsstatskicker.refresh } } if ($did == 16) { if ($read(RSStatsnick.txt,w,$mask($did(12),2))) { write -ds $+ $mask($did(12),2) RSStatsnick.txt rsstatskicker.refresh } } if ($did == 17) { did -v rsstatskicker 18 } if ($did == 18) { .remove rsstatsnick.txt rsstatskicker.refresh } if ($did == 22) { .remove rsstatscache.txt } } alias rsstats.cleanup { if ($1 != all) { unset %rsstats.*. [ $+ [ $1 ] ] sockclose rsstats. [ $+ [ $1 ] ] } elseif ($1 == all) { unset %rsstats.*.* var %c = 1 while ($sock(rsstats. $+ %c)) { sockclose rsstats. [ $+ [ %c ] ] } } } on *:disconnect: { rsstats.cleanup all } alias rsstats.voice { var %chan = $iif($left($1,1) iswm $chr(35),$1,$chan) if ($me isop %chan) || ($me ishop %chan) { var %x = 1 var %y = $nick(%chan,0,r) while (%x <= %y) { if ($read(RSstatsCache.txt,w,$nick(%chan,%x,r))) { mode %chan +v $nick(%chan,%x,r) | inc %cache | inc %x | continue } if ($read(RSStatsnick.txt,w,$nick(%chan,%x,r))) { inc %x | continue } if ($read(RSstatsnick.txt,w,$address(%nick($chan,%x,r),2))) { inc %x | continue } var %s = 1 while ($sock(rsstats. $+ %s)) || ($sock(stats. $+ %s)) { inc %s } if ($len($nick(%chan,%x,r)) > 13) { inc %kicks ban -ku120 %chan $nick(%chan,%x,r) 5 Your nickname is too long 12¤4 %kicks $+ 1 inc %x continue } set %rsstats.skill. [ $+ [ %s ] ] autovoice set %rsstats.rsn. [ $+ [ %s ] ] $nick(%chan,%x,r) set %rsstats.chan. [ $+ [ %s ] ] %chan set %rsstats.time. [ $+ [ %s ] ] $time if (%rsstats.settingssource == rscript) { sockopen rsstats. [ $+ [ %s ] ] rscript.org 80 } elseif (%rsstats.settingssource == backup) { var %ID = %s set $+(%,stats.rsn.,%ID) $nick(%chan,%x,r) set $+(%,stats.style.,%ID) combat sockopen $+(stats.,%ID) hiscore.runescape.com 80 } inc %x } } } on *:sockopen:rsstats.*: { inc %rsstats.usageremote sockwrite -n $sockname GET /lookup.php?type=stats&user= $+ $replace(%rsstats.rsn. [ $+ [ $right($sockname,-8) ] ],$chr(32),$chr(95)) HTTP/1.1 sockwrite -n $sockname Host: rscript.org $+ $crlf $+ $crlf } on *:sockopen:stats.*: { var %id = $gettok($sockname,2,46) sockwrite -n $sockname GET /lang/en/aff/runescape/hiscorepersonal.ws?user1= $+ $($+(%,stats.rsn.,%ID),2) HTTP/1.1 sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf } on *:sockread:stats.*: { if ($sockerr) { set %rsstats.settingssource rscript } sockread &Incoming bwrite $sockname -1 -1 &Incoming if ($bfind(&Incoming, 1, ).text) makehash $sockname elseif ($bfind(&Incoming, 1,does not feature in the hiscores).text) { if (%rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] isreg %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ]) { inc %kicks ban -ku30 %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ] %rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] 5 Please change your nick to your Runescape username. Use _ as spaces 12¤4 %kicks $+ 1 sockclose $sockname cleanup $gettok($sockname,2,46) } } } alias -l makehash { var %file = $1 bread %file 1 $file(%file).size &stats var %currentstat, %x = 1 while (%x) { var %x = $bfind(&stats,$calc(%x + 1),