<?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") { // 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){ // response is for this bot get_code($ex[5]); } } } } } ?>