From: pk910 Date: Mon, 29 Jul 2013 22:11:15 +0000 (+0200) Subject: Merge branch 'master' of ssh://git.pk910.de:16110/PHP-P10 X-Git-Url: http://git.pk910.de/?p=PHP-P10.git;a=commitdiff_plain;h=db4efc501d78e76da03e2a87513f3e18ee627978;hp=f2518601341be698541f0a642aa750ef0187cfd4 Merge branch 'master' of ssh://git.pk910.de:16110/PHP-P10 --- diff --git a/Bots/PHPGod.class.php b/Bots/PHPGod.class.php index e0ee13e..dac07e8 100644 --- a/Bots/PHPGod.class.php +++ b/Bots/PHPGod.class.php @@ -105,6 +105,11 @@ class {$_NAME} extends Bot { return; } $code = $codecontent; + } elseif(preg_match("#scriptpaste\.(com|de)/([a-zA-Z0-9]*)$#i", $exp[1])) { + $pasteid = explode("/", $exp[1]); + $pasteid = $pasteid[count($pasteid)-1]; + $codecontent = file_get_contents("http://scriptpaste.com/".$pasteid."/download"); + $code = $codecontent; } else { $code = "<"."?php " . $exp[1] . " ?".">"; }; diff --git a/Bots/Quote.class.php b/Bots/Quote.class.php new file mode 100644 index 0000000..9826c50 --- /dev/null +++ b/Bots/Quote.class.php @@ -0,0 +1,106 @@ +uplink = $uplink; + if(!$old) { + $nick = "quote"; + $ident = "QuoteBot"; + $host = "Services.NextIRC.net"; + $ip = "127.0.0.1"; + $realname = "QuoteBot"; + $modes = "ioknISD"; + $this->quote = $this->uplink->addUser($nick,$ident,$host,$ip,$modes,$realname); + if(is_a($this->quote, "P10_User")) { + $this->uplink->join($this->quote, "#lobby", P10_Channel::USERPRIV_OPED); + } + } else { + $this->quote = $old; + } + + ModCMD::bind($this, BIND_CHANMSG, "recive_privmsg"); + ModCMD::bind($this, BIND_QUIT, "recive_quit"); + } + + public function unload($rehash = false) { + if($rehash) { + return $this->quote; + } else { + $this->uplink->delUser($this->quote, "Bye."); + } + } + + public function loop() { + + } + + public function recive_privmsg($user, $channel, $message) { + $exp=explode(" ", $message, 3); + switch (strtolower($exp[0])) { + case "~bash": + $quelltext = file_get_contents('http://german-bash.org/action/random'); + preg_match('#(.*?)#is', $quelltext, $t); + preg_match('#(.*?)#is', $t[1], $z); + preg_match('#
(.*?)
#is', $quelltext, $m); + $string = nl2br(strip_tags($m[1])); + $array = explode("
", $string); + $length = count($array)-1; + $url = file_get_contents('http://tinyurl.com/api-create.php?url=http://german-bash.org/index.php?action=show&id='.str_replace('#', '', $z[2])); + + foreach($array AS $index=>$value) { + $array[$index] = trim($value); + } + $this->uplink->privmsg($this->quote, $channel, "9Zitatnummer:0 ".$z[2]." ".$url); + for($i = 1; $i <= $length; $i++) { + if($array[$i] != '' && $array[$i] != '
') { + $this->uplink->privmsg($this->quote, $channel, html_entity_decode($array[$i])); + } + } + break; + case "~ibash": + $doc = new DOMDocument(); + @$doc->loadHTMLFile("http://mobil.ibash.de/zitate.php?order=random"); + $tags = $doc->getElementsByTagName('code'); + $codes = $tags->item($id)->childNodes; + $nas = "90"; + $bash=''; + for ($i = 1; $i < $codes->length; $i++) + { + //$text = utf8_decode(htmlspecialchars($codes->item($i)->nodeValue)); + $text = utf8_decode($codes->item($i)->nodeValue); + $bash = $bash.$text; + } + $bash = str_replace(" ", " ", $bash); + $bash = explode("\n", $bash); + #sendserv("PRIVMSG $e[2] :\002iBashDE\002"); + $this->uplink->privmsg($this->quote, $channel, "\002iBashDE\002"); + + $i = 0; + #$this->uplink->privmsg($this->quote, $channel, print_r($bash)); + foreach($bash as $line) { + $line = trim($line); + if(!empty($line)) { + $line = str_replace("<", "<", $line); + $line = str_replace(">", ">", $line); + $line = str_replace(""", '"', $line); + #sendserv("PRIVMSG $e[2] :".$line); + if($line != '') { + $this->uplink->privmsg($this->quote, $channel, $line); + } else break; + } + } + break; + } + } + + public function recive_quit($user, $reason) { + if($user === $this->quote) { + $this->load($this->uplink); + } + } + +} +?> diff --git a/Bots/ScaleGod.class.php b/Bots/ScaleGod.class.php new file mode 100644 index 0000000..b7706bb --- /dev/null +++ b/Bots/ScaleGod.class.php @@ -0,0 +1,197 @@ +. * + * * + ************************************************************************ + * + * Bots/ScalaGod.class.php + * + * simple Scala debugger... + * + */ + +class {$_NAME} extends Bot { + private $uplink; + private $bot, $execcache = array(); + + public function load($uplink, $old = false) { + $this->uplink = $uplink; + if(!$old) { + $nick = "Scala"; + $ident = "Scala"; + $host = "services....."; + $ip = "0::0"; + $realname = "Scala Scala Scala Scala Scala"; + $modes = "ioknISD"; + $this->bot = $this->uplink->addUser($nick,$ident,$host,$ip,$modes,$realname); + if(is_a($this->bot, "P10_User")) { + $this->uplink->join($this->bot, "#dev", P10_Channel::USERPRIV_VOICE); + $this->uplink->join($this->bot, "#opers", P10_Channel::USERPRIV_OPED); + } + + } else { + $this->bot = $old; + } + + ModCMD::bind($this, BIND_CHANMSG, "recive_privmsg"); + ModCMD::bind($this, BIND_QUIT, "recive_quit"); + } + + public function unload($rehash = false) { + foreach($this->execcache as $id => $entry) { + fclose($entry['pipes'][1]); + fclose($entry['pipes'][2]); + proc_terminate($entry['proc'],9); + } + $this->execcache = array(); + if($rehash) { + return $this->bot; + } else { + $this->uplink->delUser($this->bot, "Bye."); + } + } + + public function loop() { + foreach($this->execcache as $id => $entry) { + if(!$this->checkstate($entry)) { + unlink("tmp/Debug_".$entry['id'].".scala"); + unset($this->execcache[$id]); + } + } + } + + function recive_privmsg($user, $channel, $message) { + $opOnScalaChannel = false; + $ScalaChannel = P10_Channel::getChannelByName("#dev"); + if($ScalaChannel) { + $privs = $ScalaChannel->getUserPrivs($user); + $opOnScalaChannel = ($privs & P10_Channel::USERPRIV_OPED); + } + if(!$user->getModes()->hasMode('o') && !$opOnScalaChannel) return 0; + $exp=explode(" ", $message, 2); + switch (strtolower($exp[0])) { + case "~scala": + if(count($this->execcache) > 5) { + $this->uplink->notice($this->bot, $user, "too many running scala processes at the moment!"); + return; + } + $entry=array(); + $entry['channel'] = $channel; + $entry['id'] = rand(1, 999999); + if(preg_match("#pastebin\.com/([a-zA-Z0-9]*)$#i", $exp[1])) { + $pasteid = explode("/", $exp[1]); + $pasteid = $pasteid[count($pasteid)-1]; + $scalacontent = file_get_contents("http://pastebin.com/download.php?i=".$pasteid); + if(preg_match("#Unknown Paste ID!#i", $scalacontent)) { + $this->uplink->notice($this->bot, $user, "Unknown Paste ID!"); + return; + } + $scalacode = "import scala._ + ".$scalacontent." + "; + } else { + $scalacode = "import scala._ + ".$exp[1]." + "; + }; + $fp = fopen("tmp/Debug_".$entry['id'].".scala", "w"); + fwrite($fp, $scalacode); + fclose($fp); + $descriptor = array(0 => array("pipe", "r"),1 => array("pipe", "w"),2 => array("pipe", "w")); + $entry['proc'] = proc_open('scala tmp/Debug_'.$entry['id'].'.scala', $descriptor, $entry['pipes']); + if(!is_resource($entry['proc'])) { + $this->uplink->notice($this->bot, $user, "error while loading c!"); + return; + } + $entry['time'] = time(); + fclose($entry['pipes'][0]); + $this->execcache[] = $entry; + break; + } + } + + function recive_quit($user, $reason) { + if($user === $this->bot) { + $this->load($this->uplink); + } + } + + function checkstate($entry) { + $data = proc_get_status($entry['proc']); + if(!$data['running']) { + $out=""; + while(!feof($entry['pipes'][1])) { + $out .= fgets($entry['pipes'][1], 128); + } + $eout=""; + while(!feof($entry['pipes'][2])) { + $eout .= fgets($entry['pipes'][2], 128); + } + if($out != "") { + $out=str_replace("\r","",$out); + $lines=explode("\n",$out); + $i=0; + foreach($lines as $line) { + if($line == "") continue; + $i++; + if($i>1000) { + $this->uplink->privmsg($this->bot, $entry['channel'], "too many lines!"); + break; + } + $this->uplink->privmsg($this->bot, $entry['channel'], $line); + } + } + if($eout != "") { + $eout=str_replace("\r","",$eout); + $lines=explode("\n",$eout); + $i=0; + foreach($lines as $line) { + if($line == "") continue; + $i++; + if($i>1000) { + $this->uplink->privmsg($this->bot, $entry['channel'], "too many lines!"); + break; + } + $this->uplink->privmsg($this->bot, $entry['channel'], "4".$line.""); + } + } + fclose($entry['pipes'][1]); + fclose($entry['pipes'][2]); + proc_close($entry['proc']); + return false; + } else { + if($entry['time']+10 > time()) { + return true; + } else { + //TIMEOUT + if($entry['term']) { + fclose($entry['pipes'][1]); + fclose($entry['pipes'][2]); + proc_terminate($entry['proc'],9); + $this->uplink->privmsg($this->bot, $entry['channel'], "Scala hard timeout. sending SIGKILL"); + return false; + } else { + proc_terminate($entry['proc']); + $entry['term']=true; + $this->uplink->privmsg($this->bot, $entry['channel'], "Scala timeout. (maximum of 10 seconds exceeded) sending SIGTERM"); + return true; + } + } + } + } + +} + +?> \ No newline at end of file diff --git a/main.php b/main.php index a6b615a..35a257b 100644 --- a/main.php +++ b/main.php @@ -36,6 +36,31 @@ if(function_exists("pcntl_signal")) { pcntl_signal(SIGTERM, 'shutdown'); } +function myErrorHandler($errorcode, $errortext, $errorfile, $errorline) +{ + switch ($errorcode) { + case E_USER_ERROR: + echo $errorcode.': '.$errortext.' in '.$errorfile.' Line '.$errorline; + break; + + case E_USER_WARNING: + echo $errorcode.': '.$errortext.' in '.$errorfile.' Line '.$errorline; + break; + + case E_USER_NOTICE: + echo $errorcode.': '.$errortext.' in '.$errorfile.' Line '.$errorline; + break; + + default: + echo $errorcode.': '.$errortext.' in '.$errorfile.' Line '.$errorline; + break; + } + + return true; +} + +$error_handler = set_error_handler("myErrorHandler"); + //basicly here is nothing, yet :D $uplink = new Uplink(); require_once("config.inc.php");