Minified PHP Code
-
Continuing the discussion from Do I? Don't I? Advice plz.:
You may also be interested in this monstrosity, which I did not write:
Okay, but seriously? Minified PHP code. It's a bit of an eye strain.
Code reproduced below for posterity:
<php,map=steamid>define('_A','ranks');define('_B','rankst');define('_C','//table[@id="table-apps"]/tbody');define('_D','data-sort');ob_start(function($_){return trim($_);});function cmptime($a,$b){return$a[2]<$b[2];}function cmpvalue($a,$b){$_=1000000;$c=1000000;if(($a[2]!==0)&&($a[3]!==0)){$_=$a[3]/$a[2];}else if($a[2]===0){$_+=$a[3];}if(($b[2]!==0)&&($b[3]!==0)){$c=$b[3]/$b[2];}else if($b[2]===0){$c+=$b[3];}return$_>$c;}function cmpvalue2($a,$b){$_=-1000000;$c=-1000000;if(($a[2]!==0)&&($a[3]!==0)){$_=$a[3]/$a[2];}else if($a[2]===0){$_+=$a[3];}if(($b[2]!==0)&&($b[3]!==0)){$c=$b[3]/$b[2];}else if($b[2]===0){$c+=$b[3];}return$_<$c;}function cmpwasted($a,$b){return$a[3]<$b[3];}function cmpstrmoney($a,$b){return floatval(substr($a,1))*100<floatval(substr($b,1))*100;}function cmpint($a,$b){return$a<$b;}function money($d,$e,$f){if($e===0)return'Free';if($f===0)return'N/A';$g='*';$h='%1$s%2$.2f';switch($d){case'au':case'us':$g='$';break;case'de':case'no':$g='€';$h='%2$.2f%1$s';break;case'uk':$g='£';break;case'ru':$g='р.';$h='%2$.2f%1$s';break;case'br':$g='R$';break;}return sprintf($h,$g,($e/100)/($f/60));}function todiff($i){$j=new DateTime();$k=new DateTime();$k->add(new DateInterval('PT'.$i));$l=$k->diff($j);$m=[];if($l->days>0)$m[]=sprintf('%dd',$l->days);if($l->h>0)$m[]=sprintf('%dh',$l->h);if($l->i>0)$m[]=sprintf('%dm',$l->i);if(count($m)==0)return'N/A';return implode(' ',$m);}function loadstate(){global $n,$_STATE;$n=json_decode(json_encode($_STATE),true);if(!isset($n)||$n==[]||gettype($n)!=='array')$n=[_A=>[],_B=>[]];return$n;}try{if($argc===1||$argc===2){$o=strtolower($sender);$p=$argc===2?strtolower($arg[1]):$o;switch(strtolower($arg[0])){case'ranking':printf('Ranking: ');$n=loadstate();uasort($n[_A],'cmpstrmoney');foreach($n[_A]as$q=>$r){printf("\$odd(%s): %s\n",$q,$r);}break;case'rankingtime':printf('Ranking (time): ');$n=loadstate();uasort($n[_B],'cmpint');foreach($n[_B]as$q=>$r){$s=(int)$r;$t=(int)(($r-$s)*60);printf("\$odd(%s): %s\n",$q,todiff($s.'H'.$t.'M'));}break;case'dump':$n=loadstate();echo json_encode($n);break;}throw new Exception('');}else if($argc<4){throw new Exception('usage: <type[time|value|value2|wasted|list|ids|roulette]> <region[us|de|no|uk|ru|br|au]> <gamelimit> <name> OR <type[ranking|rankingtime]> <id[?]>');}$u=$arg[0];$d=$arg[1];$v=(int)$arg[2];$w=implode(' ',array_splice($arg,3));$x=strtolower($w);$n=loadstate();if(isset($map)){$map=array_change_key_case($map);if(array_key_exists($x,$map)){$x=strtolower($map[$x]);}}$y=Requests::get('http://steamdb.info/calculator/?'.http_build_query(['currency'=>$d,'player'=>$x]),[],['timeout'=>10]);if($y->status_code!==200)throw new Exception('failed steamdb.info');$z=$y->body;$A='';try{$y=Requests::get('http://steamcommunity.com/id/'.urlencode($x).'/badges/',[],['timeout'=>5]);if($y->status_code===200){$A=$y->body;if(preg_match('#<h3>The specified profile could not be found.</h3>#',$A)!==false){$y=Requests::get('http://steamcommunity.com/profiles/'.urlencode($x).'/badges/',[],['timeout'=>5]);if(count($y->history)>0){if(preg_match('#http://steamcommunity.com/id/(.*?)/badges/?#',$y->history[0]->headers->offsetGet("location"),$B)){unset($n[_A][$x]);unset($n[_B][$x]);$x=$B[1];}$A=$y->body;}}}}catch(Exception $C){}if(preg_match('#Failed to resolve CustomURL#',$z,$D))throw new Exception($x.': does not exist');if(preg_match('#This profile is private#',$z,$D))throw new Exception($x.': profile is private');if(preg_match('#Failed to receive player\'s games#',$z,$D))throw new Exception($x.': failed to recieve game list');$E=preg_match('#has not purchased any games on Steam#',$z,$D)===1;$F=new DOMDocument();@$F->loadHTML($z);$G=new DOMXPath($F);if(strtolower($u)=='ids'){$H=[];$I=$G->query(_C);if($I->length===1){$J=$I->item(0);$I=$G->query('//table[@id="table-apps"]/tbody/tr/td[1]');foreach($I as$K){$H[]=intval($K->textContent);}}die(json_encode($H));}else if(strtolower($u)=='roulette'){$I=$G->query(_C);if($I->length===1){$J=$I->item(0);$I=$G->query('//table[@id="table-apps"]/tbody/tr/td[3]');if($I->length!==0){$L=rand()%$I->length;printf('%s: %s [%d/%d]',$w,$I->item($L)->textContent,$L,$I->length);die();}}die($w.' has no games :(');}$I=$G->query('//h1[contains(@class,"header-title")]/a[contains(@href,"profiles")]');if($I->length===1){printf("%s: ",$I->item(0)->textContent);if($E)printf("doesn't own any games\n");$I=$G->query('//span[contains(concat(" ", normalize-space(@class), " "), " calculator-price ")]');if($I->length===1){$M='';$N=$G->query('//span[contains(@class,"calculator-price-lowest")]');if($N->length===1){$M=sprintf(' (%s)',$N->item(0)->textContent);}printf("%s%s\n",$I->item(0)->textContent,$M);$O=str_replace(',','.',$I->item(0)->textContent);if($O[0]==='$'){$n[_A][$x]=$O;uasort($n[_A],'cmpstrmoney');$P=array_chunk($n[_A],10,true);$n[_A]=$P[0];$_STATE=$n;}}else if(!$E)printf("failed cost\n");$I=$G->query('//tr[contains(td/text(),"Status")]/td[2]');if($I->length===1)printf("%s\n",$I->item(0)->textContent);else{printf("failed status\n");$Q=-1;}if(strlen($A)>0){$R=new DOMDocument();@$R->loadHTML($A);$S=new DOMXPath($R);$I=$S->query('//div/span[@class="profile_xp_block_level"]/span/span');if($I->length===1){printf("Level: %d",$I->item(0)->textContent);$I=$S->query('//div/span[@class="profile_xp_block_xp"]');if($I->length===1)$T=preg_replace('#[^\d]#','',$I->item(0)->textContent);else$T=-1;$I=$S->query('//div/div[@class="profile_xp_block_remaining"]');if($I->length===1)$U=preg_replace('#(Level \d+|[^\d])#','',$I->item(0)->textContent);else$U=-1;if($T>0&&$U>0)printf(" (%d/%d)",$T,$T+$U);printf("\n");$I=$S->query('//div[@class="badge_info_unlocked"]');printf("Badges: %d\n",$I->length);}else printf("failed level\n");}$I=$G->query('//tr[contains(td/text(),"Games owned")]/td[2]');$Q=-1;if($I->length===1)$Q=$I->item(0)->textContent;else if(!$E)printf("failed owned\n");$V=0;$H=[];$I=$G->query(_C);if($I->length===1){$J=$I->item(0);$I=$G->query('//table[@id="table-apps"]/tbody/tr');foreach($I as$K){$W=$K->getElementsByTagName('td');$H[]=[$W->item(1)->textContent,$W->item(2)->textContent,(int)$W->item(3)->getAttribute(_D),(int)$W->item(4)->getAttribute(_D)];if((int)$W->item(3)->getAttribute(_D)===0)$V++;}}else if(!$E)printf("failed games\n");if($Q>0)printf("Games played/owned: %d/%d (%.1f%%)\n",$Q-$V,$Q,100*($Q-$V)/$Q);$I=$G->query('//tr[contains(td/text(),"Hours spent")]/td[2]');if($I->length===1){$m=floatval(preg_replace('#h$#','',str_replace(',','',$I->item(0)->textContent)));$n[_B][$x]=$m;uasort($n[_B],'cmpint');$P=array_chunk($n[_B],10,true);$n[_B]=$P[0];$_STATE=$n;$s=(int)$m;$t=(int)(($m-$s)*60);printf("Time spent: %s\n",todiff($s.'H'.$t.'M'));}else if(!$E)printf("failed hours spent\n");$I=$G->query('//tr[contains(td/text(),"Profile creation")]/td[2]/span/@title');if($I->length===1)printf("Profile created: %s\n",date('M j, Y',strtotime($I->item(0)->textContent)));else printf("failed profile creation\n");$I=$G->query('//tr[contains(td/text(),"Last log off")]/td[2]/span/@title');if($I->length===1)printf("Last seen: %s\n",date('M j, Y',strtotime($I->item(0)->textContent)));else printf("failed last seen\n");if(count($H)>0){switch($u){case'time':usort($H,'cmptime');break;case'value':usort($H,'cmpvalue');break;case'value2':usort($H,'cmpvalue2');break;case'wasted':usort($H,'cmpwasted');break;}$j=new DateTime();switch($u){case'time':for($L=0,$X=0;$L<count($H)&&$X<$v;$L++){printf("\x02%s\x02: %s\n",trim($H[$L][1]),todiff($H[$L][2].'M'));$X++;}break;case'value':case'value2':for($L=0,$X=0;$L<count($H)&&$X<$v;$L++){if($H[$L][3]>0){printf("\x02%s\x02: %s per hour (%s)\n",trim($H[$L][1]),money($d,$H[$L][3],$H[$L][2]),money($d,$H[$L][3],60));$X++;}}break;case'wasted':for($L=0,$X=0;$L<count($H)&&$X<$v;$L++){if($H[$L][2]==0){printf("\x02%s\x02 (%s)\n",trim($H[$L][1]),money($d,$H[$L][3],60));$X++;}}break;case'list':ob_clean();$P=[];for($L=0;$L<count($H);$L++){$P[]=trim($H[$L][1]);}echo json_encode($P);break;}}}else printf("Profile %s doesn't exist.",$x);}catch(Exception $Y){printf('%s',$Y->getMessage());}
Any other minified PHP you've seen? Or anyone feel like taking a crack at making sense of this? (It's called !steamcalcbase.)
-
Another great one for you. Try to figure out what it does! Although you'd probably figure it out from the strings.
<php>function cmp($_,$a){return$_[1]<$a[1];}try{$b=$_STATE;$c=strtolower($sender);$d=count($arg)>0?strtolower(array_shift($arg)):'pull';$e=count($arg)>0?min(max(array_shift($arg),1),6):1;if($b===null||!is_object($b))$b=json_decode('{}');if(!property_exists($b,'last'))$b->last='';if(!property_exists($b,'rank'))$b->rank=json_decode('{}');if($d==='reload'||$d==='set'||!property_exists($b,'chamber')){$b->chamber=[];for($f=0;$f<$e;$f++){$b->chamber[]=1;}for($f=0;$f<6-$e;$f++){$b->chamber[]=0;}$b->last='';throw new Exception(sprintf('Revolver loaded with %d bullet%s!',$e,$e>1?'s':''));}if($d==='rank'||$d==='revrank'){$g=[];foreach($b->rank as$h=>$i){$g[]=[$h,$i];}usort($g,'cmp');if($d==='revrank'){$g=array_reverse($g);}$j='';foreach($g as$h){$j .= sprintf("\$odd(%s): %s\n",$h[0],$h[1]);if(strlen($j)>380)break;}throw new Exception('Leaderboard: '.$j);}if(!in_array(1,$b->chamber))throw new Exception('No bullets in the revolver! Reload!');if($c==$b->last)throw new Exception($sender.': don\'t rush it!');if(!property_exists($b->rank,$c)){$b->rank->$c=0;}$k=array_count_values($b->chamber);$l=array_key_exists(0,$k)?$k[0]:0;$e=array_key_exists(1,$k)?$k[1]:0;shuffle($b->chamber);$m=array_shift($b->chamber);if($m===1){$b->rank->$c-=1+$l;}else{$b->rank->$c+=1;}printf('%s: *%s*',$sender,$m===1?'BANG':'click');$b->last=$c;$_STATE=$b;}catch(Exception $n){$_STATE=$b;printf('%s',$n->getMessage());}
The great part about this one is that it gets a global
$_STATE
variable that is automatically saved and reloaded across invocations. Which is promptly assigned to$b
, because that's shorter. Minified, remember?
-
Looks more like somebody was making a bot for an fps, by the strings. I don't see minimized code as a wtf inherently. If that's how it was being maintained, then yeah. But there's any number of formatters online that will at least format it in a sane way - and this script is short enough to not be crazy hard to figure out. It's mostly just getting data from the server, parsing it, then executing [do something].
Now, throwing exceptions when you can't shoot due to being out of ammo, or time between shots... that's a different discussion.
-
It's mostly just getting data from the server, parsing it, then executing [do something].
Noooot quite... the only data it uses is from
$_STATE $arg $args $argc $sender
, which are defined, then the script is run, then the output is displayed to the user.Now, throwing exceptions when you can't shoot due to being out of ammo, or time between shots... that's a different discussion.
It also throws an exception on success.
throw new Exception('Leaderboard: '.$j);
This code is used like so:
<Riking> !roulette <Shocky> No bullets in the revolver! Reload! <Riking> !roulette reload <Shocky> Revolver loaded with 1 bullet! <Riking> !roulette <Shocky> Riking: *click* <Player2> !roulette <Shocky> Player2: *click* <Riking> !roulette <Shocky> Riking: *BANG* <Riking> gg
-
-
In other words, they are passing messages like minecraft servers.
-
-
I wonder if there's some way to share text... Maybe somewhere you can "paste" the text? Maybe some kind of "bin"?
-
Minecraft servers would probably be a lot faster if they didn't log all that shit to disk and just kept it in memory.
-
I tried. Chrome rejected the ctrl-v. The Forge startup logs are pretty insane.
Shocky also has transient paste storage. This link will die the next time the bot restarts: http://bots.axxim.net:8000/p/e
This will probably have content a month from now - no telling what it is, though: http://bots.axxim.net:8000/p/1
This too, but it'll probably be a RSS feed entry: http://bots.axxim.net:8000/s/1
-
Those are all plugins written by 12 year olds.
Source: I wrote some plugins when I was 12.
-
In an amazing show of consistency, I present the
!rr
command:<js>r=["Click.","Click.","Click.","Bang.","Click.","Click."];sender+": "+r[Math.floor(Math.random()*6)];
-
Why not just
<js>sender+": "+(Math.random()*6|0?"Click":"Bang")
-
Or even:
<alias>roulette %inp%
-
<roulettescript>
-
That's not an installed scripting module, unfortunately.
-
Note that there is all kinds of fun recursion in there.
For example, you can have multiple layers of
<alias>
es pointing to a<php>
factoid that outputs<lua>
code which spits out an<action>
.