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";
}
?>