Newer
Older
DC29BadgeBot / bot.php
root on 6 Aug 2021 8 KB fixed shortcode issue
  1. <?php
  2. set_time_limit(0);
  3. include 'php_serial.class.php';
  4. $badgeInterface = "/dev/ttyACM0";// EDIT THIS TO MATCH YOUR INTERFACE
  5. $collected = array();
  6.  
  7. function get_code($code){
  8. global $badgeInterface;
  9. $result = preg_replace("/[^a-zA-Z0-9]+/", "", strtoupper(substr(trim($code), 0, 32)));
  10. $serial = new PhpSerial;
  11. $serial->deviceSet($badgeInterface);
  12. $serial->confBaudRate(9600);
  13. $serial->deviceOpen('w+');
  14. stream_set_timeout($serial->_dHandle, 3);
  15. $serial->sendMessage("\r\n\r\n"."5"."$result"."\r\n");
  16. $devResponse = $serial->readPort();
  17. $serial->deviceClose();
  18. //echo "DEBUG: ".$devResponse."\n";
  19. $toReturn = trim(str_replace("Press ENTER to continue...", "", $devResponse));
  20. $toReturn = substr($toReturn, -32);
  21. return $toReturn;
  22. }
  23. function get_code_rsp($code){
  24. global $badgeInterface;
  25. $result = preg_replace("/[^a-zA-Z0-9]+/", "", strtoupper(substr(trim($code), 0, 32)));
  26. $serial = new PhpSerial;
  27. $serial->deviceSet($badgeInterface);
  28. $serial->confBaudRate(9600);
  29. $serial->deviceOpen('w+');
  30. stream_set_timeout($serial->_dHandle, 3);
  31. $serial->sendMessage("\r\n\r\n"."5"."$result"."\r\n");
  32. $devResponse = $serial->readPort();
  33. $serial->deviceClose();
  34. //echo "DEBUG: ".$devResponse."\n";
  35. if(strpos($devResponse, "Already connected to this badge") !== false){ // already connected
  36. $toReturn = "alreadyConnected";
  37. }else{
  38. $toReturn = trim(str_replace("Press ENTER to continue...", "", $devResponse));
  39. $toReturn = substr($toReturn, -32);
  40. }
  41. return $toReturn;
  42. }
  43. function get_own_code(){
  44. global $badgeInterface;
  45. $serial = new PhpSerial;
  46. $serial->deviceSet($badgeInterface);
  47. $serial->confBaudRate(9600);
  48. $serial->deviceOpen('w+');
  49. stream_set_timeout($serial->_dHandle, 3);
  50. $serial->sendMessage("\r\n\r\n4\r\n");
  51. $devResponse = $serial->readPort();
  52. $serial->deviceClose();
  53. //echo "DEBUG: ".$devResponse."\n";
  54. $toReturn = trim(str_replace("Invalid Input. Please try again:", "", $devResponse));
  55. $toReturn = trim(str_replace("Choose an option:", "", $toReturn));
  56. //echo $toReturn; // DEBUG
  57. $toReturn = substr($toReturn, -32);
  58. return $toReturn;
  59. }
  60. function short_code($code){
  61. $fixedCode = substr($code, 0, 2);
  62. $fixedCode .= "0";
  63. $fixedCode .= substr($code, 2,1);
  64. $fixedCode .= substr($code, 4, 4);
  65. $fixedCode .= substr($code, 3,1);
  66. $fixedCode .= substr($code, 8,1);
  67. $fixedCode .= substr($code, 10, 6);
  68. $fixedCode .= substr($code, 9,1);
  69. $fixedCode .= substr($code, 16, 16);
  70. return $fixedCode;
  71. }
  72. function get_stats_connected(){
  73. global $badgeInterface;
  74. $serial = new PhpSerial;
  75. $serial->deviceSet($badgeInterface);
  76. $serial->confBaudRate(9600);
  77. $serial->deviceOpen('w+');
  78. stream_set_timeout($serial->_dHandle, 3);
  79. $serial->sendMessage("\r\n\r\n5\r\n\r\n");
  80. $devResponse = $serial->readPort();
  81. $serial->deviceClose();
  82.  
  83. $toReturn = trim(preg_replace('/\s+/', ' ', $devResponse));
  84. $toReturn = trim(string_between_two_string($toReturn, 'Number of Badges Connected: ', 'Badge Types'));
  85. //echo $toReturn; // DEBUG
  86.  
  87. return $toReturn;
  88. }
  89. function get_stats_signal(){
  90. global $badgeInterface;
  91. $serial = new PhpSerial;
  92. $serial->deviceSet($badgeInterface);
  93. $serial->confBaudRate(9600);
  94. $serial->deviceOpen('w+');
  95. stream_set_timeout($serial->_dHandle, 3);
  96. $serial->sendMessage("\r\n\r\n5\r\n\r\n");
  97. $devResponse = $serial->readPort();
  98. $serial->deviceClose();
  99.  
  100. $toReturn = trim(preg_replace('/\s+/', ' ', $devResponse));
  101. if(strpos($toReturn, "Shared the Signal") !== false){ // are sharing the signal
  102. if(strpos($toReturn, "Thank you for doing your part") !== false){ // have sent more than 20 signals
  103. $toReturn = trim(string_between_two_string($toReturn, 'Shared the Signal: ', 'Thank you for doing your part'));
  104. }else{
  105. $toReturn = trim(string_between_two_string($toReturn, 'Shared the Signal: ', 'se try again'));
  106. }
  107. //echo $toReturn; // DEBUG
  108. }else{ // you havent collected all badge types
  109. $toReturn = 0;
  110. }
  111. return $toReturn;
  112. }
  113. function string_between_two_string($str, $starting_word, $ending_word){
  114. $subtring_start = strpos($str, $starting_word);
  115. $subtring_start += strlen($starting_word);
  116. $size = strpos($str, $ending_word, $subtring_start) - $subtring_start;
  117. return substr($str, $subtring_start, $size);
  118. }
  119.  
  120. $rand = substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(8/strlen($x)) )),1,8);
  121.  
  122. // announce self to channel
  123. $myCode = get_own_code();
  124. $myCode = (strlen($myCode) == 31) ? "".short_code($myCode) : $myCode;
  125. if(!isset($myCode) || $myCode == "")
  126. die("Please contact 0xRoM on discord for help fixing this issue!");
  127.  
  128. $badgeConn = get_stats_connected();
  129. $badgeSig = get_stats_signal();
  130. echo "[+] connected: $badgeConn, Sig shared: $badgeSig\n";
  131.  
  132. $socket = fsockopen("ice.uplinkcorp.net", 6667);
  133. // Send auth info
  134. // fputs($socket, "PASS " . $password . "\n");
  135. fputs($socket, "NICK Badge-" . $rand . "\n");
  136. fputs($socket, "USER Badge-" . $rand . " 0 * :DC29 Badge Bot\n");
  137. fputs($socket, "JOIN #theSignal\n"); // Join channel
  138.  
  139. fputs($socket, "PRIVMSG #theSignal :!req " . $rand . " " . $myCode . "\n");
  140. echo "[+] announced arrival: ".$rand."\n";
  141.  
  142. // Force an endless while
  143. while (1) {
  144. // Continue the rest of the script here
  145. while ($data = fgets($socket, 256)) {
  146. echo $data;
  147. flush();
  148. // Separate all data
  149. $ex = explode(' ', $data);
  150. // Send PONG back to the server
  151. if ($ex[0] == "PING") {
  152. fputs($socket, "PONG " . $ex[1] . "\n");
  153. }
  154. // executes chat command
  155. if ($ex[0] != 'PING' && ISSET($ex[3])) {
  156. $command = str_replace(array(
  157. chr(10),
  158. chr(13)
  159. ), '', $ex[3]);
  160. if ($command == ":!req") {
  161. if(isset($ex[4]) && $ex[4] <> ""){ // bot name
  162. if(isset($ex[5]) && $ex[5] <> ""){ // code
  163. if(!in_array($ex[4], $collected)){ // not already added this bot
  164.  
  165. $response = get_code($ex[5]);
  166. $response = (strlen($response) == 31) ? "".short_code($response) : $response;
  167.  
  168. if(preg_match("/^[0-9A-Fa-f]{32}/", $response)){ // valid code back
  169. echo "[+] computing for ".$ex[4]."\n";
  170. fputs($socket, "PRIVMSG #theSignal :!rsp " . $ex[4] . " " . $response . "\n");
  171. array_push($collected, $ex[4]); // add to replied array
  172.  
  173. $myCode = get_own_code();
  174. $myCode = (strlen($myCode) == 31) ? "".short_code($myCode) : $myCode;
  175.  
  176. fputs($socket, "PRIVMSG #theSignal :!req " . $rand . " " . $myCode . "\n");
  177. echo "[+] replied to ".$ex[4]."\n";
  178. }else{ echo "[-] invalid code\n"; }
  179. }else{ echo "[-] already exchanged\n"; }
  180. }else{ echo "[-] no code\n"; }
  181. }else{ echo "[-] no name\n"; }
  182. }
  183. if ($command == ":!rsp") {
  184. if ($ex[4] == $rand){ // response is for this bot
  185. if(isset($ex[5]) && $ex[5] <> ""){ // code for me
  186. echo "[+] got response from ".$ex[4]."\n";
  187. if(get_code_rsp($ex[5]) == "alreadyConnected"){
  188. echo "[-] already connected (rsp code)\n";
  189. }else{
  190. echo "[+] new connection (rsp code)\n";
  191. }
  192. }else{ echo "[-] no code set\n"; }
  193. }else{ echo "[-] not for me\n"; }
  194. }
  195. if ($command == ":!stats") {
  196. if (trim($ex[4]) === $rand){ // response is for this bot
  197. $badgeConn = get_stats_connected();
  198. $badgeSig = get_stats_signal();
  199. echo "[+] connected: $badgeConn, Sig shared: $badgeSig\n";
  200. fputs($socket, "PRIVMSG #theSignal :Connected = $badgeConn, Sig shared = $badgeSig\n");
  201. }else{ echo "[-] not for me\n"; }
  202. }
  203. }
  204. }
  205. }
  206. ?>
  207.  
Buy Me A Coffee