Hallo!
Ich habe einen Chat mit einem AIML Alice bot. Dieser bot wird über eine Datei namens bot_class.php in den Chat geladen. Jetzt habe ich einen kickbot programmiert, der die User vom Chat verbannen kann. Dafür habe ich dem bot admin rules gegeben und die AIML Datei so programmiert, dass wenn ein Schimpfwort im Chat fällt der bot folgender maßen drauf reagiert:
/kick <getname/> Diese Art der Artikulation ist hier nicht erwünscht!
Logge ich mich als Admin in den CHat ein und gebe diesen Befehl ein, wird der im Befehl angegebene User vom Chat Raum mit der angegebenen Nachricht gesperrt.
Fällt nun ein Schimpfwort im Chat, schreibt der bot auch genau diesen Befehl, jedoch wird der user nicht gekickt obwohl der bot admin rules hat.
Ich kann mir das nur so erklären, dass in der Datei womit der bot in den Chat geladen wird bot_class.php ein paar Zeilen Code hinzugefügt werden müssen, damit der bot IRC Befehle ausführen kann. Hat dazu vielleicht jemand eine Idee?
Hier die bot_class.php:
Ich habe einen Chat mit einem AIML Alice bot. Dieser bot wird über eine Datei namens bot_class.php in den Chat geladen. Jetzt habe ich einen kickbot programmiert, der die User vom Chat verbannen kann. Dafür habe ich dem bot admin rules gegeben und die AIML Datei so programmiert, dass wenn ein Schimpfwort im Chat fällt der bot folgender maßen drauf reagiert:
/kick <getname/> Diese Art der Artikulation ist hier nicht erwünscht!
Logge ich mich als Admin in den CHat ein und gebe diesen Befehl ein, wird der im Befehl angegebene User vom Chat Raum mit der angegebenen Nachricht gesperrt.
Fällt nun ein Schimpfwort im Chat, schreibt der bot auch genau diesen Befehl, jedoch wird der user nicht gekickt obwohl der bot admin rules hat.
Ich kann mir das nur so erklären, dass in der Datei womit der bot in den Chat geladen wird bot_class.php ein paar Zeilen Code hinzugefügt werden müssen, damit der bot IRC Befehle ausführen kann. Hat dazu vielleicht jemand eine Idee?
Hier die bot_class.php:
PHP-Code:
<?php
class Bot{
var $botId;
var $bots;
function Bot()
{
//toLog('bot_class.php', 'bot class constructor');
}
function login( $login, $roomId=null, $manual=false )
{
$bots = $this->getBots();
$userId = $this->getBotId( $login );
if( $userId != null )
{
$bots[$userId]['active_manual'] = $manual;
$this->setBot($userId, $bots[$userId]);
}
else return false;
$req = array(
'bot_ip' => $GLOBALS['fc_config']['bot_ip'],
'c' => 'lin',
'lg' => $login,
'r' => $roomId
);
$conn =& ChatServer::getConnection($req);
$mqi = $conn->process($req);
return true;
}
function logout( $login )
{
$userId = $this->getBotId( $login );
$stmt = new Statement("SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE ip = ? AND userid = ?");
$res = $stmt->process($GLOBALS['fc_config']['bot_ip'], $userId);
if(($rec = $res->next()) != null)
{
$bots = $this->getBots();
$bots[$userId]['active_manual'] = false;
$this->setBot($userId, $bots[$userId]);
$req = array(
'id' => $rec['id'],
'c' => 'lout'
);
$conn =& ChatServer::getConnection($req);
$mqi = $conn->process($req);
}
return( $userId );
}
function connectUser2Bot( $userId, $login, $botName='' )
{
$stmt = new Statement("SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}bots WHERE botname = ?");
$res = $stmt->process($botName);
if(($rec = $res->next()) != null)
{
$this->botId = $rec['id'];
}
if($this->botId == null) return false;
$this->bots = $this->getBots();
$rec = $this->getRecord();
$rec['botid'] = $this->botId;
$rec['login'] = $login;
$this->setBot($userId, $rec);
return $rec;
}
function disconnectUser2Bot( $userId )
{
$bots = $this->getBots();
unset($bots[$userId]);
$this->setBots($bots);
}
function processMessages()
{
$stmt = new Statement("SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE ip = ? AND userid IS NOT NULL");
$res = $stmt->process($GLOBALS['fc_config']['bot_ip']);
$messageQueue = new MessageQueue();
$msg_arr = array(); $id_arr = array();
$msg_cnt = 0; $start = 0;
$bots = $this->getBots();
$users = $this->getUsers();
while (list($key, $val) = each($bots))
{
$users[$key] = $this->getUser( $key );
}
while(($rec = $res->next()) != null)
{
$id_arr[] = $rec['id'];
$start = $rec['start'];
$mqi = $messageQueue->getMessages($rec['id'], $rec['userid'], $rec['roomid'], $start);
include_once('programe/src/respond.php');
//include('programe/src/botinst/dbprefs.php');
while($mqi->hasNext())
{
$m = $mqi->next();
if($m->command == 'msg' && $m->userid != $rec['userid'])
{
$myuniqueid = md5($m->userid);
// Here is where we get the reply.
$botresponse = reply($this->replaceSpecial($m->txt), $myuniqueid, $bots[$rec['userid']]['botid']);
$repl = $this->replaceSpecial($botresponse->response);
$replace_pairs = array(
"Program E" => $users[$rec['userid']]['login'],
DEFAULTPREDICATEVALUE => $users[$m->userid]['login']
);
$repl = strtr($repl, $replace_pairs);
if($m->touserid == null)
{
$msg_arr[$msg_cnt] = new Message('msg', $rec['userid'], $rec['roomid'], $repl, $rec['color']);
$msg_arr[$msg_cnt]->toroomid = $rec['roomid'];
}
else
{
$msg_arr[$msg_cnt] = new Message('msg', $rec['userid'], null, $repl, $rec['color']);
$msg_arr[$msg_cnt]->touserid = $m->userid;
}
$msg_cnt++;
$start = $m->id+$msg_cnt+1;
}
}
}
for($i = 0; $i < $msg_cnt; $i++)
{
$messageQueue->addMessage($msg_arr[$i]);
}
for($i = 0; $i < count($id_arr); $i++)
{
$stmt = new Statement("UPDATE {$GLOBALS['fc_config']['db']['pref']}connections SET updated=NOW(), start=? WHERE id=?");
$stmt->process($start, $id_arr[$i]);
}
}
function replaceSpecial($inStr)
{
$replace_pairs = array(
"<B>" => "",
"</B>" => "",
"<I>" => "",
"</I>" => "",
"<BR>" => "",
"amp;apos;" => "'",
"amp;" => "&",
"<br>" => "",
"<br/>" => "",
"\n" => " ",
"\r" => " "
);
return (strtr($inStr, $replace_pairs));
}
function getUsers()
{
$res = $GLOBALS['fc_config']['cms']->getUsers();
if( is_array( $res ) ) return $res;
$ret = array();
while(($rec = $res->next()) != null)
{
$ret[$rec['id']] = $rec;
}
return $ret;
}
function getBots()
{
$file_path = $GLOBALS['fc_config']['botsdata_path'];
$retval = array();
if(file_exists( $file_path ) && filesize( $file_path ) > 0)
{
$file = fopen( $file_path, "rb" );
$data = fread( $file, filesize($file_path));
fclose($file);
$retval = unserialize($data);
}
return $retval;
}
function setBots($val)
{
//toLog('TEST', $val);
$file_path = $GLOBALS['fc_config']['botsdata_path'];
$data = serialize($val);
$file = fopen( $file_path, "wb" );
$res = fwrite($file, $data);
fflush($file);
fclose($file);
}
function flushbots()
{
$file_path = $GLOBALS['fc_config']['botsdata_path'];
if(file_exists( $file_path ) && filesize( $file_path ) > 0)
{
$file = fopen( $file_path, "wb" );
$data = fread( $file, filesize($file_path) );
$res = fwrite( $file, $data );
fflush( $file );
fclose( $file );
}
}
function getBot($userId)
{
$bots = $this->getBots();
return $bots[$userId];
}
function setBot($userId, $val)
{
$bots = ( count($this->bots) > 0 )? $this->bots : $this->getBots();
$bots[$userId] = $val;
$this->setBots($bots);
}
function getRecord()
{
$retval = array(
'botid' => 0,
'login' => '',
'role' => ROLE_ADMIN,
'active_on_supportmode' => false,//!!!
'active_on_min_users' => '',
'active_on_max_users' => '',
'active_on_no_moderators' => false,
'active_on_user' => 0,
'available_rooms' => '',//!!!-
'active_on_no_bots' => false,
'active_time' => '',//!!!-
'active_manual' => false
);
return $retval;
}
function getNextId()
{
$bots = $this->getBots();
$nextId = -2;
while (list($key, $val) = each($bots))
{
if( $key <= $nextId ) $nextId = $key - 1;
}
return( $nextId );
}
Kommentar