- <?php
- set_time_limit(0);
- include 'php_serial.class.php';
- $badgeInterface = "/dev/ttyACM0";// EDIT THIS TO MATCH YOUR INTERFACE
- $collected = array();
-
- function get_code($code){
- global $badgeInterface;
- $result = preg_replace("/[^a-zA-Z0-9]+/", "", strtoupper(substr(trim($code), 0, 32)));
- $serial = new PhpSerial;
- $serial->deviceSet($badgeInterface);
- $serial->confBaudRate(9600);
- $serial->deviceOpen('w+');
- stream_set_timeout($serial->_dHandle, 3);
- $serial->sendMessage("\r\n\r\n"."5"."$result"."\r\n");
- $devResponse = $serial->readPort();
- $serial->deviceClose();
-
- $toReturn = trim(str_replace("Press ENTER to continue...", "", $devResponse));
- $toReturn = substr($toReturn, -32);
- return $toReturn;
- }
-
- function get_own_code(){
- global $badgeInterface;
- $serial = new PhpSerial;
- $serial->deviceSet($badgeInterface);
- $serial->confBaudRate(9600);
- $serial->deviceOpen('w+');
- stream_set_timeout($serial->_dHandle, 3);
- $serial->sendMessage("\r\n\r\n4\r\n");
- $devResponse = $serial->readPort();
- $serial->deviceClose();
-
- $toReturn = trim(str_replace("Invalid Input. Please try again:", "", $devResponse));
- $toReturn = trim(str_replace("Choose an option:", "", $toReturn));
- //echo $toReturn; // DEBUG
- $toReturn = substr($toReturn, -32);
- return $toReturn;
- }
-
- $rand = substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(8/strlen($x)) )),1,8);
-
- $socket = fsockopen("ice.uplinkcorp.net", 6667);
- // Send auth info
- // fputs($socket, "PASS " . $password . "\n");
- fputs($socket, "NICK Badge-" . $rand . "\n");
- fputs($socket, "USER Badge-" . $rand . " 0 * :DC29 Badge Bot\n");
- fputs($socket, "JOIN #theSignal\n"); // Join channel
-
- // announce self to channel
- $myCode = get_own_code();
- fputs($socket, "PRIVMSG #theSignal :!req " . $rand . " " . $myCode . "\n");
-
- // Force an endless while
- while (1) {
- // Continue the rest of the script here
- while ($data = fgets($socket, 128)) {
- echo $data;
- flush();
-
- // Separate all data
- $ex = explode(' ', $data);
-
- // Send PONG back to the server
- if ($ex[0] == "PING") {
- fputs($socket, "PONG " . $ex[1] . "\n");
- }
-
- // executes chat command
- if ($ex[0] != 'PING' && ISSET($ex[3])) {
- $command = str_replace(array(
- chr(10),
- chr(13)
- ), '', $ex[3]);
- if ($command == ":!req" && isset($ex[4]) && isset($ex[5]) && $ex[4] <> "" && $ex[5] <> "") {
- // 4 = bot name, 5 = their code
- if(!in_array($ex[4], $collected)){ // not already added their code
- $response = get_code($ex[5]);
- if(preg_match("/^[0-9A-Fa-f]{32}/", $response)){ // valid code back
- fputs($socket, "PRIVMSG #theSignal :!rsp " . $ex[4] . " " . $response . "\n");
- array_push($collected, $ex[4]); // add to replied array
- $myCode = get_own_code();
- fputs($socket, "PRIVMSG #theSignal :!req " . $rand . " " . $myCode . "\n");
-
- }
- }
- }
- if ($command == ":!rsp") {
- if ($ex[4] == $rand && isset($ex[5]) && $ex[5] <> ""){ // response is for this bot
- get_code($ex[5]);
- }
- }
- }
- }
- }
- ?>