cvs: pearbot / PEARbot.php

From: Date: Fri, 25 Jul 2003 14:59:06 +0000
Subject: cvs: pearbot / PEARbot.php
Groups: php.pear.bot 
Request: Send a blank email to pear-bot+get-12@lists.php.net to get a copy of this message
meebey Fri Jul 25 10:59:06 2003 EDT Modified files: /pearbot PEARbot.php Log: - removed dbquery() using now PEAR::MDB. - added CPEARbot::mdbError() method. - updated reverseverfiy(). - added isAuthorized(). Index: pearbot/PEARbot.php diff -u pearbot/PEARbot.php:1.7 pearbot/PEARbot.php:1.8 --- pearbot/PEARbot.php:1.7 Fri Jul 25 07:38:13 2003 +++ pearbot/PEARbot.php Fri Jul 25 10:59:06 2003 @@ -1,7 +1,7 @@ #!/home/meebey/php <?php /** - * $Id: PEARbot.php,v 1.7 2003/07/25 11:38:13 meebey Exp $ + * $Id: PEARbot.php,v 1.8 2003/07/25 14:59:06 meebey Exp $ * * PEARbot * this is an IRC service bot for #pear written in PHP @@ -28,27 +28,19 @@ * */ -include_once('config.php'); -include_once('../SmartIRC/SmartIRC.php'); - -function dbquery($query) -{ - global $mysql_db; - global $mysql_server; - global $mysql_username; - global $mysql_password; - global $mysql_link; - global $irc; - - if(!is_resource($mysql_link)) - $mysql_link = mysql_connect( $mysql_server, $mysql_username, $mysql_password ); - - $result = mysql_db_query( $mysql_db, $query, $mysql_link ); - return $result; -} +include_once 'config.php'; +include_once '../pear/SmartIRC/SmartIRC.php'; // using bleeding edge CVS versions +include_once 'MDB.php'; class CPEARbot { + function mdbError(&$irc, &$errorobj) + { + $error = $errorobj->getUserinfo(); + $irc->log(SMARTIRC_DEBUG_NOTICE, 'DEBUG_NOTICE: DB error: '.$error); + return $error; + } + function nick2pearusername(&$irc, $nickname) { $query = "SELECT pearusername FROM dnsentries WHERE nickname='".$nickname."'"; @@ -57,25 +49,30 @@ return $row['pearusername']; } - function reverseverify(&$irc, $host, $nick) + function reverseverify(&$irc, &$data) { + global $mdb; + $query = "SELECT nickname,dnsalias FROM dnsentries"; - $result = dbquery($query); + $result = $mdb->query($query); + if (MDB::isError($result)) { + mdbError($result); + return; + } $list = array(); $foundnick = false; - $userip = gethostbyname($host); - while ($row = mysql_fetch_array($result)) { - $dbip = gethostbyname($row['dnsalias']); + $userip = gethostbyname($data->host); + while ($row = $mdb->fetchInto($result)) { + $dbip = gethostbyname($row['host']); $dbnickname = $row['nickname']; if ($userip == $dbip) { - if ($dbnickname != $nick) { + if ($dbnickname != $data->nick) { $foundnick = $dbnickname; } else { - $foundnick = $nick; + $foundnick = $data->nick; } - break; } } @@ -87,39 +84,29 @@ } } - function verify(&$irc, $nickname, $ircnickname = null) + function isAuthorized(&$irc, &$data, $nick = null) { - $who = $nickname; - $loweredwho = strtolower($who); + global $mdb; - if ($ircnickname !== null) { - $dbwho = $nickname; - $who = $ircnickname; - $loweredwho = strtolower($who); - } else { - $dbwho = $who; + if ($nick === null) { + $nick = $data->nick; } - if (isset($irc->channel['#pear']->users[$loweredwho])) { - $query = "SELECT nickname,dnsalias FROM dnsentries WHERE nickname='".$dbwho."'"; - $result = dbquery($query); - $numrows = mysql_num_rows($result); - - if($numrows > 0) { - $host = $irc->channel['#pear']->users[$loweredwho]->host; - $ip = gethostbyname($host); - - $found = false; - while ($row = mysql_fetch_array($result)) { - $dnsaliasip = gethostbyname($row['dnsalias']); - - if ($dnsaliasip == $ip) { - return $row['nickname']; - } - } - - } - + if (!$irc->isJoined($data->channel, $nick)) { + return false; + } + + $user = &$irc->getUser($data->channel, $nick); + + // check if the user is recognized and has right host, ident etc.. + $data->nick = $user->nick; + $data->host = $user->host; + $data->ident = $user->ident; + + $result = $this->reverseverify($irc, $data); + if ($result !== false) { + return true; + } else { return false; } } @@ -130,13 +117,12 @@ if ($data->nick == $irc->_nick) { return; } + + // autoop only for the pear channel + if (strtolower($data->channel) == '#pear' && + $this->isAuthorized($irc, $data)) { - if (strtolower($data->channel) == '#pear') { - $result = $this->reverseverify($irc, $data->host, $data->nick); - - if ($result !== false) { - $irc->op('#pear', $data->nick); - } + $irc->op('#pear', $data->nick); } } @@ -148,16 +134,17 @@ { $requester = $data->nick; $lookupfor = $data->messageex[1]; - $lowerlookupfor = strtolower($data->messageex[1]); - if (isset($irc->channel['#pear']->users[$lowerlookupfor])) { - $host = $irc->channel['#pear']->users[$lowerlookupfor]->host; + if ($irc->isJoined('#pear', $lookupfor)) { + $host = $irc->getUser('#pear', $lookupfor); } else { $irc->message(SMARTIRC_TYPE_CHANNEL, '#pear', $requester.": ".$lookupfor." is not in this channel"); return; } - - $result = $this->reverseverify($irc, $host, $lookupfor); + + $data->host = $host; + $data->nick = $lookupfor; + $result = $this->reverseverify($irc, $data); if ($result !== false) { $irc->message(SMARTIRC_TYPE_CHANNEL, '#pear', $requester.": ".$lookupfor." is ".$result); @@ -167,9 +154,17 @@ $bot = &new CPEARbot(); $irc = &new Net_SmartIRC(); + +$mdb = &MDB::connect($config['db_dsn']); +if (MDB::isError($mdb)) { + mdbError($mdb); + die('DB error: '.$mdb->getUserinfo()); +} +$mdb->setFetchMode(MDB_FETCHMODE_ASSOC); + $irc->setLogdestination(SMARTIRC_FILE); $irc->setLogfile('./PEARbot.log'); -$irc->setChannelSynching(true); +$irc->setChannelSyncing(true); $irc->setDebug(SMARTIRC_DEBUG_ALL); $irc->setUseSockets(true); $irc->setAutoRetry(true);

« previous php.pear.bot (#12) next »