NG.php
上传用户:jamesxinda
上传日期:2022-07-31
资源大小:28k
文件大小:16k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

PHP

  1. <? 
  2. // pasted some gmail code here by some guy
  3. require_once('libcurlemu.inc.php'); function authgMail($from, $namefrom, $to, $nameto, $subject, $message)
  4. {
  5. /*  your configuration here  */
  6. $smtpServer = "tls://smtp.gmail.com"; //does not accept STARTTLS
  7. $port = "465"; // try 587 if this fails
  8. $timeout = "45"; //typical timeout. try 45 for slow servers
  9. $username = "x@gmail.com"; //your gmail account
  10. $password = "xxxx"; //the pass for your gmail
  11. $localhost = $_SERVER['REMOTE_ADDR']; //requires a real ip
  12. $newLine = "rn"; //var just for newlines
  13.  
  14. /*  you shouldn't need to mod anything else */
  15. //connect to the host and port
  16. $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
  17. echo $errstr." - ".$errno;
  18. $smtpResponse = fgets($smtpConnect, 4096);
  19. if(empty($smtpConnect))
  20. {
  21.    $output = "Failed to connect: $smtpResponse";
  22.    echo $output;
  23.    return $output;
  24. }
  25. else
  26. {
  27.    $logArray['connection'] = "Connected to: $smtpResponse";
  28.    echo "connection accepted<br>".$smtpResponse."<p />Continuing<p />";
  29. }
  30. //you have to say HELO again after TLS is started
  31.    fputs($smtpConnect, "HELO $localhost". $newLine);
  32.    $smtpResponse = fgets($smtpConnect, 4096);
  33.    $logArray['heloresponse2'] = "$smtpResponse";
  34.   
  35. //request for auth login
  36. fputs($smtpConnect,"AUTH LOGIN" . $newLine);
  37. $smtpResponse = fgets($smtpConnect, 4096);
  38. $logArray['authrequest'] = "$smtpResponse";
  39. //send the username
  40. fputs($smtpConnect, base64_encode($username) . $newLine);
  41. $smtpResponse = fgets($smtpConnect, 4096);
  42. $logArray['authusername'] = "$smtpResponse";
  43. //send the password
  44. fputs($smtpConnect, base64_encode($password) . $newLine);
  45. $smtpResponse = fgets($smtpConnect, 4096);
  46. $logArray['authpassword'] = "$smtpResponse";
  47. //email from
  48. fputs($smtpConnect, "MAIL FROM: <$from>" . $newLine);
  49. $smtpResponse = fgets($smtpConnect, 4096);
  50. $logArray['mailfromresponse'] = "$smtpResponse";
  51. //email to
  52. fputs($smtpConnect, "RCPT TO: <$to>" . $newLine);
  53. $smtpResponse = fgets($smtpConnect, 4096);
  54. $logArray['mailtoresponse'] = "$smtpResponse";
  55. //the email
  56. fputs($smtpConnect, "DATA" . $newLine);
  57. $smtpResponse = fgets($smtpConnect, 4096);
  58. $logArray['data1response'] = "$smtpResponse";
  59. //construct headers
  60. $headers = "MIME-Version: 1.0" . $newLine;
  61. $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
  62. $headers .= "To: $nameto <$to>" . $newLine;
  63. $headers .= "From: $namefrom <$from>" . $newLine;
  64. //observe the . after the newline, it signals the end of message
  65. fputs($smtpConnect, "To: $tornFrom: $fromrnSubject: $subjectrn$headersrnrn$messagern.rn");
  66. $smtpResponse = fgets($smtpConnect, 4096);
  67. $logArray['data2response'] = "$smtpResponse";
  68. // say goodbye
  69. fputs($smtpConnect,"QUIT" . $newLine);
  70. $smtpResponse = fgets($smtpConnect, 4096);
  71. $logArray['quitresponse'] = "$smtpResponse";
  72. $logArray['quitcode'] = substr($smtpResponse,0,3);
  73. fclose($smtpConnect);
  74. //a return value of 221 in $retVal["quitcode"] is a success
  75. return($logArray);
  76. }
  77. // end pasted code
  78.   // NG deposit bot by juraj
  79.   // version 2.1 - now with more vulgarities! aka "what the fuck"
  80.   // (oh, and it supports newgrounds 2.0)
  81.   // If you wish to turn off the script without changing the crons or whatever use to call this script, just
  82.   // change this variable to false.
  83.   $scriptenabled = true;
  84.   //**********************/
  85.   // Basic configuration *
  86.   //**********************/
  87.   $username = "username";
  88.   $password = "pw";
  89.   $yourmail = "yourmail@gmail.com";
  90.   // Here you can disable logging. It's useful to turn it on so you can know what was the script
  91.   // doing, did it fail etc. If neccessary, you can change the logfile used for logging.
  92.   $logging = false;
  93.   $logfile = "etc/NGlog2.txt";
  94.   // okay, list of movies to vote for - enter the submission id and rate
  95.   // 5 of these will randomly be selected and be voted for.
  96.   $submissions = array(
  97.   '386773' => '4',
  98.   '276841' => '5',
  99.   '364202' => '5',
  100.   '90046' => '4',
  101.   '322150' => '5',
  102.   '184806' => '5',
  103.   '298534' => '4',
  104.   '290790' => '3',
  105.   '139092' => '5',
  106.   '169384' => '4');
  107.   $votenum = 5;
  108.   //*****************************************************************************************/
  109.   // THIS IS THE END OF THE BASIC CONFIGURATION - don't change ANYTHING beyond this point!  *
  110.   //*****************************************************************************************/
  111.   // die script if disabled
  112.   if (!$scriptenabled) { die('Script has been disabled.'); }
  113.   set_time_limit(120);
  114.   // exit and write to log, and dump log on screen
  115.   function mdie($msgappend='', $newline=true) {
  116.     global $msg, $logging, $logfile;
  117.     logappend($msgappend, $newline);
  118.     // echo log
  119.     if($_GET['log']) echo ($logging) ? "<br /><br />This has been appended to the log." : '';
  120.       else echo 'done';
  121.     // write to log if logging is turned on
  122.     if ($logging) {
  123.     $fh = fopen($logfile, 'a');
  124.     fwrite($fh, $msg . "nn");
  125.     fclose($fh); }
  126.     // mailing: mail($to, $subject, $message, $headers);
  127.     if(!(strpos($msgappend, 'more to get to Level') !== false
  128.       or strpos($msgappend, 'thanks for doing the overtime') !== false))
  129. // authgMail($from, $namefrom, $to, $nameto, $subject, $message)
  130.         authgMail('n@g.d','ngd','juraj5@gmail.com', 'me', 'NGdeposit failure', wordwrap($msg,70,true));
  131.         authgMail('n@g.d', 'ngd', 'juraj5@vip.hr', 'cell', '', $msgappend);
  132.     // mailing end
  133.     die(); }
  134.   // this function writes to temp log var and dumps to screen in real time. Also configurable with a
  135.   // switch that regulates will it add a n in front of the log entry or not.
  136.   function logappend($append, $newline = true) {
  137.     global $msg;
  138.     $msg .= $appended = wordwrap(($newline ? "n" : '') . $append, 100, "n", true);
  139.     if($_GET['log']) echo nl2br($appended);
  140.   }
  141.   // a fancy function that will count down sleep time and send it to browser
  142.   function countsleep($sleep) {
  143.     logappend("sleeping for $sleep seconds... ");
  144.     while($sleep > 0) {
  145.       logappend("$sleep..." . ($sleep != 1 ? ' ' : ''), false);
  146.       sleep(1); $sleep = $sleep - 1;
  147.     }
  148.   }
  149.   // a function to turn all tabs newlines and shit in one space and ensure there are no double-spaces.
  150.   function wsstrip($str) {
  151.     $str=ereg_replace("[rtn]+"," ",$str);
  152.     $str=ereg_replace (' +', ' ', trim($str));
  153.     return $str;
  154.   }
  155.   // this function, given a submission id and rate, will vote on that submission
  156.   // the function returns AJAX response of newgrounds after voting.
  157.   function votesubmission($subid, $rate) {
  158.     global $username, $password;
  159.     if(!($rate >= 0 and $rate <= 5) )
  160.       mdie("what the fuck, you haven't entered a proper rate value for subid $subid in the config!");
  161.     // first, we are going to sleep 4 to 8 seconds, to not be too fast to cause any suspicion
  162.     $sleep = mt_rand(4,8); countsleep($sleep);
  163.     // we need to fetch userkey and submission key from the submission page
  164.     $ch = curl_init();
  165.     $headerdata = array("Cookie: NG_GG_username=$username; NG_GG_userpass=$password;", "Referer: http://www.newgrounds.com/portal/");
  166.     curl_setopt($ch, CURLOPT_URL, 'http://www.newgrounds.com/portal/view/'.$subid);
  167.     curl_setopt($ch, CURLOPT_HEADER, 0);
  168.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headerdata);
  169.     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.4) Gecko/20061201 Firefox/2.0.0.4 (Ubuntu-feisty)');
  170.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  171.     $x = curl_exec($ch); curl_close($ch);
  172.     logappend("curl transfer http://www.newgrounds.com/portal/view/$subid");
  173.     if(strpos($x, '<h2 class="i-hazard">Eulogy For') !== false)
  174.       mdie("what the fuck, you wanted a blammed submission $subid!");
  175.     // fetch submission title with a series of explodes
  176.     // we could get the name from the <title> tag, but what if its value is
  177.     // something like INTERNAL ERROR etc.?
  178.     $xt = $x;
  179.     $xt = explode('<div class="heading"><h1 class="view i-info">', $xt);
  180.     $xt = $xt[1];
  181.     $xt = explode('</h1></div>', $xt);
  182.     $subname = $xt[0];
  183.     if(empty($subname))
  184.       mdie("what the fuck, submission name fetch failed!"); else
  185.     logappend("Submission $subid name: '$subname'");
  186.     // we now have the contents of the submission page. with a series of
  187.     // explodes we will get the userkey and submission key
  188.     $xt = $x;
  189.     $xt = explode('<input type="hidden" id="userkey" value="', $xt);
  190.     $xt = $xt[1];
  191.     $xt = explode('" />', $xt);
  192.     $userkey = urlencode($xt[0]);
  193.     if(empty($userkey))
  194.       mdie("what the fuck, userkey fetch failed!"); else
  195.     // logappend("userkey $userkey"); // too verbose
  196.     $xt = $x;
  197.     $xt = explode('<input type="hidden" id="submission_key" value="', $xt);
  198.     $xt = $xt[1];
  199.     $xt = explode('" />', $xt);
  200.     $submissionkey = urlencode($xt[0]);
  201.     if(empty($submissionkey))
  202.       mdie("what the fuck, submissionkey fetch failed!"); else
  203.     // logappend("submissionkey $submissionkey"); // too verbose
  204.     logappend('keys fetched');
  205.     // sleep 3-5 seconds
  206.     $sleep = mt_rand(3,5); countsleep($sleep);
  207.     // we now have user key and submission key at our disposal.
  208.     // time to employ the ajax magic...
  209.     // once again, fake the referer and set up other data... and vote!
  210.     $ch = curl_init();
  211.     $headerdata = array("Cookie: NG_GG_username=$username; NG_GG_userpass=$password;", "Referer: http://www.newgrounds.com/portal/view/$subid");
  212.     // here we set up the post data header with our spidered data
  213.     $postdata = "vote=$rate&id=$subid&type=1&key=$submissionkey&userkey=$userkey&";
  214.     curl_setopt($ch, CURLOPT_URL, 'http://www.newgrounds.com/ajax/submitvote.php');
  215.     curl_setopt($ch, CURLOPT_POST, 1);
  216.     curl_setopt($ch, CURLOPT_HEADER, 0);
  217.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  218.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headerdata);
  219.     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.4) Gecko/20061201 Firefox/2.0.0.4 (Ubuntu-feisty)');
  220.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  221.     $x = curl_exec($ch); curl_close($ch);
  222.     logappend('curl transfer POST http://www.newgrounds.com/ajax/submitvote.php');
  223.     if(strpos($x, '<ajax_response>') === false)
  224.       mdie("what the fuck, could not read ajax response!");
  225.     return $x;
  226.   }
  227.   /*------------------------------------------------------*/
  228.   // time format for logging, initialisation
  229.   $time = date('H:i:s d.m.Y');
  230.   logappend("$time - script has been called.n", false);
  231.   // begin of which-movies-will-be-voted-for logic
  232.   // you can change this block of code if you wish to implement a different algo for
  233.   // deciding which submissions will be voted for (for example, under judgement submissions?)
  234.   // note: the current logic attempts to vote on another movie if
  235.   // check if there's at lease 5 entries in $submissions
  236.   if(count($submissions)<5)
  237.     mdie('what the fuck, you haven't specified at least 5 submissions!');
  238.   if($votenum<5)
  239.     mdie('what the fuck, $votenum is lesser than 5! fix that!');
  240.   if(count($submissions) < $votenum)
  241.     mdie('what the fuck, $submissions is lesser than votenum! enter some more subids or lower $votenum!');
  242.   // okay, I have to go through the trouble of having to recover $submissions keys
  243.   // (i.e., submission ids)
  244.   foreach ($submissions as $key=>$value) {
  245.     $subids[] = $key;
  246.   }
  247.   // check for duplicate entries
  248.   if(count(array_unique($subids)) < count($subids))
  249.     mdie('what the FUCK is with you, there are duplicate entries in $submissions!');
  250.   // we now have a list of submission ids in a numerical array, we need to grab random 5
  251.   // first, shuffle $subids and pop it 'till there are only 5 left.
  252.   // back up $subids for later stuff
  253.   shuffle($subids); $subids2 = $subids;
  254.   while(count($subids)>$votenum) {
  255.     array_pop($subids);
  256.   }
  257.   // dump to log submission names
  258.   logappend("will vote on following $votenum submissions: " . implode(' ',$subids));
  259.   // end of which-movies-will-be-voted-for logic
  260.   // finally, call the vote function for each ID and parse XML output it returns.
  261.   // this block of code requires:
  262.   // - a numerical array $subids where submission IDS are stored as values
  263.   // - an associative array $submissions where submissions IDS are keys to their rates
  264.   $failed = 0; $count = 1;
  265.   reset($subids);
  266.   while (list($key, $value) = each($subids)) {
  267.       logappend("calling votesubmission on subid $value to rate with {$submissions[$value]} - " . $count++ . ' of ' . count($subids));
  268.       // votesubmission will already complain if there's no <ajax_response>.
  269.       $xmlreturn = votesubmission($value, $submissions[$value]);
  270.       // exception handling
  271.       if(strpos($xmlreturn, 'You are not logged in.') !== false)
  272.         mdie('what the fuck, not logged in?! userkey search should have failed');
  273.       // this should NOT occur... bad userkey/subkey sent
  274.       elseif(strpos($xmlreturn, 'Illegal vote attempt detected') !== false)
  275.         mdie('sorry, I fucked up, bad data sent, illegal vote attempt detected');
  276.       // successful vote, need x more... explode and logappend the message
  277.       elseif(strpos($xmlreturn, 'and you can deposit your 10') !== false) {
  278.         $xt = wsstrip(strip_tags($xmlreturn));
  279.         $xt = explode('Thanks for voting, ', $xt);
  280.         $xt = 'Thanks for voting, ' . $xt[1];
  281.         $xt = explode('points for today!', $xt);
  282.         $xt = $xt[0] . 'points for today!';
  283.         logappend('[R] ' . $xt); }
  284.       // exp automatically deposited... yeah!
  285.       elseif(strpos($xmlreturn, 'experience has been automatically deposited!') !== false) {
  286.         $xt = wsstrip(strip_tags($xmlreturn));
  287.         $xt = explode('deposited! ', $xt);
  288.         $xt = $xt[1];
  289.         $xt = explode(' The next Grounds Gold', $xt);
  290.         $xt = $xt[0];
  291.         mdie($xt); }
  292.       // duh, somebody already deposited for today.
  293.       elseif(strpos($xmlreturn, 'thanks for doing the overtime') !== false) {
  294.         $xt = wsstrip(strip_tags($xmlreturn));
  295.         $xt = explode('Thanks for voting, ', $xt);
  296.         $xt = $xt[1];
  297.         $xt = explode(' the overtime!', $xt);
  298.         $xt = $xt[0] . ' the overtime!';
  299.         mdie('[R] ' . $xt); }
  300.       // this is a bit more complicated... if this vote failed, try to save the process by selecting
  301.       // another movie to vote for... here we just increment the $failed counter
  302.       elseif(strpos($xmlreturn, 'already voted on this') !== false) {
  303.         $xt = wsstrip(strip_tags($xmlreturn));
  304.         $xt = explode('It looks like', $xt);
  305.         $xt = 'It looks like' . $xt[1];
  306.         $xt = explode('on it again!', $xt);
  307.         $xt = $xt[0] . 'on it again!';
  308.         logappend('[R] ' . $xt); $failed = $failed + 1; }
  309.       else mdie('what the fuck, I don't understand this ajax response!'."n".wsstrip(strip_tags($xmlreturn)));
  310.       // add another submission to vote for if got 'you already voted on this'
  311.       // the following line is pretty clever, it will attempt to add a new subid only
  312.       // if there are not enough to do the actual deposit (when $votenum > 5)
  313.       while(count($subids) < (5+$failed)) {
  314.       if(count($subids) >= count($subids2)) mdie('sorry, I ran out of submissions while compensating failed votes');
  315.         while(true) {
  316.           $newvalue = $subids2[array_rand($subids2)]; $searchresult = array_search($newvalue, $subids);
  317.          if(($searchresult === false) or ($searchresult === null)) break; }
  318.         $subids[] = $newvalue; logappend("added new subid to vote for, $newvalue");
  319.       }
  320.   }
  321.   // eh?! something went wrong here.
  322.   mdie('what the fuck, deposit didn't occur?!');
  323.   // tadam! ;)
  324.   // <3> vw
  325. ?>