Advertisement
Guest User

Untitled

a guest
Oct 26th, 2011
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.12 KB | None | 0 0
  1. <?php
  2. set_time_limit(0);
  3. include('config.php');
  4.  
  5. ## Connecting to the SQLite database ##
  6. $database = new PDO('sqlite:./database.db');
  7. $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  8.  
  9. ## Creatings tables wich don't exist yet ##
  10. $database->exec('CREATE TABLE users (id INTEGER PRIMARY KEY NOT NULL, nick TEXT, host TEXT, level NUMERIC);');
  11. $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);');
  12. $database->exec('CREATE TABLE settings (id INTEGER PRIMARY KEY NOT NULL, name TEXT, value TEXT);');
  13.  
  14. ## Preparing the socket ##
  15. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
  16. socket_bind($socket, 0) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
  17. socket_connect($socket, $config['server'], $config['port']) or error(socket_strerror(socket_last_error($socket)), debug_backtrace());
  18.  
  19. ## Ok, all preparations done. Let's go... ##
  20. while ($buffer = socket_read($socket, 65000))
  21. {
  22.     $lines = explode(PHP_EOL, $buffer);
  23.     foreach ($lines as &$line)
  24.     {
  25.         $temp = array();
  26.         preg_match('/^\:([^\ ]+)\s([^\ ]+)\s([^\ ]+)\s(.+)/', $line, $temp);
  27.         if (empty($temp)) { goto readNextLine; }
  28.         $sender = $temp[1];
  29.         $signal = $temp[2];
  30.         $receiver = $temp[3];
  31.         $message = $temp[4];
  32.         unset($temp);
  33.         switch ($signal)
  34.         {
  35.             case '001': ## The server says hi. ##
  36.                 socket_write($socket, 'Well thank you, sir! ;-)' . PHP_EOL);
  37.                 break;
  38.             case '263': ## The server is overloaded. Let's be nice and try again another time. ##
  39.                 die('The server is overloaded, trying to force it to let you in now might bring it down.');
  40.                 break;
  41.             case '376': ## End of MOTD! We can join the channels now! :D ##
  42.                 foreach ($config['channels'] as &$channel)
  43.                 {
  44.                     socket_write($socket, 'JOIN ' . $channel . PHP_EOL);
  45.                 }
  46.             case '439': ## It's time to identify to the server ##
  47.                 socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
  48.             case '432': ## Whoops, seems our nickname contains some characters the server doesn't like. Let's try and strip them. ##
  49.                 $config['nick'] = preg_replace('[^A-Za-z0-9]', '', $config['nick']);
  50.                 socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
  51.                 break;
  52.             case '432': ## Seems liek we tried to change the nickname, but some channel mode wouldn't let us. ##
  53.                 foreach ($config['channels'] as &$channel)
  54.                 {
  55.                     socket_write($socket, 'PART ' . $channel . ' :Changing nickname...' . PHP_EOL);
  56.                 }
  57.                 socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL);
  58.                 foreach ($config['channels'] as &$channel)
  59.                 {
  60.                     socket_write($socket, 'JOIN ' . $channel . PHP_EOL);
  61.                 }
  62.                 break;
  63.             case '443': ## Whoops, nickname in use. Let's try adding an underscore behind it. ##
  64.                 $config['nick'] .= '_';
  65.                 socket_write($socket, 'NICK ' . $config['nick'] . PHP_EOL . 'USER ' . $config['nick'] . ' 8 * :microBot' . PHP_EOL);
  66.                 break;
  67.         }
  68.         if (strstr($line, 'die()'))
  69.         {
  70.            
  71.         }
  72.         readNextLine:
  73.         addToLog($signal, $receiver, $sender, $message);
  74.     }
  75.    
  76. }
  77.  
  78. ## Functions ##
  79. function killIt()
  80. {
  81.     socket_write($socket, 'QUIT' . PHP_EOL);
  82.     sleep(2);
  83.     die();
  84. }
  85. function addToLog($type, $channel, $host, $message)
  86. {
  87.     global $database;
  88.     $temp = explode('!', $host);
  89.     $nick = $temp[0];
  90.     unset($temp);
  91.     $timestamp = time();
  92.     $nickprefix = '';
  93.     $query = $database->prepare("INSERT INTO log VALUES ('', :channel, :nick, :host, :message, :type, :time, '');");
  94.     $query->bindParam(':channel', $channel);
  95.     $query->bindParam(':nick', $nick);
  96.     $query->bindParam(':host', $host);
  97.     $query->bindParam(':message', $message);
  98.     $query->bindParam(':type', $type);
  99.     $query->bindParam(':time', $timestamp);
  100.     $query->execute();
  101. }
  102. function error($message, $debug_backtrace, &$die = true)
  103. {
  104.     if (!$die)
  105.     {
  106.         echo '{ERROR: ' . $message . ' (' . $debug_backtrace['filename'] . ':' . $debug_backtrace['line'] . ')}';
  107.     }
  108.     else
  109.     {
  110.         die('{ERROR: ' . $message . ' (' . $debug_backtrace[0]['file'] . ':' . $debug_backtrace[0]['line'] . ')}');
  111.     }
  112. }
  113. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement