Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- set_time_limit(0);
- include('config.php');
- ## Connecting to the SQLite database ##
- $database = new PDO('sqlite:./database.db');
- $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- ## Creatings tables wich don't exist yet ##
- $database->exec('CREATE TABLE users (id INTEGER PRIMARY KEY NOT NULL, nick TEXT, host TEXT, level NUMERIC);');
- $database->exec('CREATE TABLE log (id INTEGER PRIMARY KEY NOT NULL, channel TEXT, nick TEXT, host TEXT, message TEXT, type TEXT, timestamp TEXT NOT NULL, nickprefix TEXT);');
- $database->exec('CREATE TABLE settings (id INTEGER PRIMARY KEY NOT NULL, name TEXT, value TEXT);');
- ## Preparing the socket ##
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
- socket_bind($socket, 0) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
- socket_connect($socket, $config['server'], $config['port']) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
- ## Ok, all preparations done. Let's go... ##
- while ($buffer = socket_read($socket, 65000))
- {
- $lines = explode(PHP_EOL, $buffer);
- foreach ($lines as &$line)
- {
- $temp = array();
- preg_match('/^\:([^\ ]+)\s([^\ ]+)\s([^\ ]+)\s(.+)/', $line, $temp);
- if (empty($temp)) { goto readNextLine; }
- $sender = $temp[1];
- $signal = $temp[2];
- $receiver = $temp[3];
- $message = $temp[4];
- unset($temp);
- switch ($signal)
- {
- case '001': ## The server says hi. ##
- socket_write($socket, 'Well thank you, sir! ;-)' . PHP_EOL);
- break;
- case '263': ## The server is overloaded. Let's be nice and try again another time. ##
- die('The server is overloaded, trying to force it to let you in now might bring it down.');
- break;
- case '376': ## End of MOTD! We can join the channels now! :D ##
- foreach ($config['channels'] as &$channel)
- {
- socket_write($socket, 'JOIN ' . $channel . PHP_EOL);
- }
- case '439': ## It's time to identify to the server ##
- socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
- case '432': ## Whoops, seems our nickname contains some characters the server doesn't like. Let's try and strip them. ##
- $config['nick'] = preg_replace('[^A-Za-z0-9]', '', $config['nick']);
- socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
- break;
- case '432': ## Seems liek we tried to change the nickname, but some channel mode wouldn't let us. ##
- foreach ($config['channels'] as &$channel)
- {
- socket_write($socket, 'PART ' . $channel . ' :Changing nickname...' . PHP_EOL);
- }
- socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL);
- foreach ($config['channels'] as &$channel)
- {
- socket_write($socket, 'JOIN ' . $channel . PHP_EOL);
- }
- break;
- case '443': ## Whoops, nickname in use. Let's try adding an underscore behind it. ##
- $config['nick'] .= '_';
- socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
- break;
- }
- if (strstr($line, 'die()'))
- {
- }
- readNextLine:
- addToLog($signal, $receiver, $sender, $message);
- }
- }
- ## Functions ##
- function killIt()
- {
- socket_write($socket, 'QUIT' . PHP_EOL);
- sleep(2);
- die();
- }
- function addToLog($type, $channel, $host, $message)
- {
- global $database;
- $temp = explode('!', $host);
- $nick = $temp[0];
- unset($temp);
- $timestamp = time();
- $nickprefix = '';
- $query = $database->prepare("INSERT INTO log VALUES ('', :channel, :nick, :host, :message, :type, :time, '');");
- $query->bindParam(':channel', $channel);
- $query->bindParam(':nick', $nick);
- $query->bindParam(':host', $host);
- $query->bindParam(':message', $message);
- $query->bindParam(':type', $type);
- $query->bindParam(':time', $timestamp);
- $query->execute();
- }
- function error($message, $debug_backtrace, &$die = true)
- {
- if (!$die)
- {
- echo '{ERROR: ' . $message . ' (' . $debug_backtrace['filename'] . ':' . $debug_backtrace['line'] . ')}';
- }
- else
- {
- die('{ERROR: ' . $message . ' (' . $debug_backtrace[0]['file'] . ':' . $debug_backtrace[0]['line'] . ')}');
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement