<?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();
if(!isset($myCode) || $myCode == "")
die("Please contact 0xRoM on discord for help fixing this issue!");
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]);
}
}
}
}
}
?>