Listen(); do { $packet = $this->GetFirstFromQueue(); if ($packet) { $this->CallHandler($packet); } } while (count($this->packet_queue) > 1); $count += 0.25;$count2 += 0.25; usleep(250000); if ($this->last_ping_time + 180 < time()) { // Modified by Nathan Fritz if ($this->returned_keep_alive == FALSE) { $this->connected = FALSE; $this->AddToLog('EVENT: Disconnected'); } if ($this->returned_keep_alive == TRUE) { $this->connected = TRUE; } $this->returned_keep_alive = FALSE; $this->keep_alive_id = 'keep_alive_' . time(); $this->SendPacket(""); // ** $this->last_ping_time = time(); } if ($count2>=2 && !empty($control_func)) {//each second a control function can be started call_user_func($control_func); $count2 = 0; } } return TRUE; } } function seems_utf8($Str) { for ($i=0; $i",">",$ret); return $ret; } function init_bot($send_hello=false){ global $JABBER, $BUDDIES,$jid_admin, $log_file, $mydb, $flog; load_plugins(); $JABBER->enable_logging = FALSE; $JABBER->log_filename = 'jabberlogfile.txt'; $flog=fopen($log_file, "a"); $BUDDIES=array(); $cpt=0; lognprint ("Jabber Cnx"); while(!$res=$JABBER->Connect() && $cpt<10){$cpt++;print('.');} lognprint ( "Jabber Reg"); while(!$res=$JABBER->AccountRegistration($JABBER->username."@".$JABBER->server, $JABBER->username) && $cpt<20){$cpt++;print('.');} lognprint ( "Jabber Auth"); while(!$res=$JABBER->SendAuth() && $cpt<30){$cpt++;print('.');sleep(2);} lognprint ( "OK"); $JABBER->SendPresence(); if (!array_key_exists($jid_admin, $BUDDIES)){ $JABBER->Subscribe($jid_admin); $JABBER->RosterAddUser($jid_admin, "", "mylord", "Lords"); } if($send_hello) $JABBER->SendMessage($jid_admin, "normal", NULL, array("body" => "Ready !")); $JABBER->CruiseControl(-1,"check_plugins"); //$JABBER->Disconnect(); } function lognprint($s, $p=true){ global $flog; $d=date("Y-m-d H:i:s"); fputs($flog, $d." ".$s."\n"); if ($p) print $s."\n"; } function load_plugins(){ global $plug_dir; $data_dir_obj = dir ($plug_dir); while ($my_files[] = $data_dir_obj->read()); sort($my_files); while ($file=next($my_files)) { if (ereg("^.*\.inc\.php$", $file)) { $ret []= $file; } } $data_dir_obj->close(); foreach($ret as $r) { require_once($plug_dir."/".$r); } } function check_plugins() { global $PLUGIN_FUNCTS; if (@count($PLUGIN_FUNCTS)) { foreach($PLUGIN_FUNCTS as $func) { if (function_exists($func)) $func(); } } } function Handler_message_chat($message){H_message_all($message, "chat");} function Handler_message_normal($message){H_message_all($message, "normal");} function Handler_message_headline($message){H_message_all($message, "headline");} function H_message_all($message, $type){ global $JABBER, $BUDDIES, $jid_admin; $from = trim($JABBER->GetInfoFromMessageFrom($message)); $body = trim($JABBER->GetInfoFromMessageBody($message)); lognprint ( "$from > $body"); if (preg_match("/^(!)?([a-zA-Z0-9]+) ?(.*)?/i", $body, $msg_parts)) { if (preg_match("/^".$jid_admin."$/i", $JABBER->StripJID($from)) || get_group_from_user($JABBER->StripJID($from))=="Lords") $youremylord=true; if ($msg_parts[1]=="!")$func = "MastCmdHndl_".$msg_parts[2]; //nom d'appel de la fonction correspondant à la commande maître else $func = "CmdHndl_".$msg_parts[2]; //nom d'appel de la fonction correspondant à la commande if ($func != ''){ if (function_exists($func)) $func(trim($msg_parts[3]), $type, $from, $youremylord); else CmdHndl_default(trim($msg_parts[2]), $type, $from, $youremylord); } } else lognprint ( "User command doesn't match any canvas."); } function Handler_presence_available($message) { global $JABBER, $BUDDIES; $jid = $JABBER->StripJID($JABBER->GetInfoFromPresenceFrom($message)); $BUDDIES[$jid]=1; lognprint("$jid is Online."); } function Handler_presence_unavailable($message) { global $JABBER, $BUDDIES; $jid = $JABBER->StripJID($JABBER->GetInfoFromPresenceFrom($message)); $BUDDIES[$jid]=0; lognprint("$jid is Offline."); } function Handler_presence_subscribe($message) { global $JABBER; $jid = $JABBER->StripJID($JABBER->GetInfoFromPresenceFrom($message)); lognprint ($jid." requests subscription"); $JABBER->SubscriptionAcceptRequest($jid); $JABBER->RosterAddUser($jid, "", $jid); $JABBER->SendMessage($jid_admin, "chat", NULL, array ("body" => utf8_ensure("$jid has been accepted for subscription.\nRequesting User's presence."))); $JABBER->Subscribe($jid); } function Handler_presence_subscribed($message) { global $JABBER; $jid = $JABBER->StripJID($JABBER->GetInfoFromPresenceFrom($message)); $JABBER->SendMessage($jid_admin, "chat", NULL, array ("body" =>utf8_ensure("$jid has accepted my subscription."))); lognprint("$jid has accepted my subscription."); } function get_user_from_roster($str){//to find user global $JABBER; foreach($JABBER->roster as $r) { if ($r["jid"]==$str || $r["name"]==$str) { return $r; } } return false; } function get_group_from_roster($str){//to find users in a group global $JABBER; foreach($JABBER->roster as $r) { if ($r["group"]==$str) { $tmp[]=$r; } } return $tmp; } function get_group_from_user($str){//to user's group global $JABBER; foreach($JABBER->roster as $r) { if ($r["jid"]==$str) { return $r["group"]; } } return false; } function set_avatar($file){ $f=implode("", $file); $s=base64_encode($f); $id = "set_avatar_" . time(); $payload = " " . utf8_ensure($group) . "" : ''; $payload .= "\n"; } ?>