I'd advise using Net::Smart_IRC from PEAR. Makes life *a lot* easier.
Code: Select all
<?php
require_once('Net/SmartIRC.php');
define('KARMABOT_GLOBAL_HOST', 'irc.chatspike.net');
define('KARMABOT_GLOBAL_PORT', 6667);
define('KARMABOT_GLOBAL_NICK', 'K');
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'botster');
class KarmaBot
{
var $irc;
function KarmaBot()
{
/* now do IRC initialisation */
$this->irc = &new Net_SmartIRC();
$this->irc->setUseSockets(TRUE);
$this->irc->connect(KARMABOT_GLOBAL_HOST, KARMABOT_GLOBAL_PORT);
$this->irc->registerTimehandler(10000, $this, 'timer_pingmysql');
$this->irc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^(\+\+.+|.+\+\+)', $this, 'command_karmaup');
$this->irc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^(--.+|.+--)', $this, 'command_karmadown');
$this->irc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^karma .+', $this, 'command_karma');
$this->irc->login(KARMABOT_GLOBAL_NICK, 'Karma Chameleon.', 0, KARMABOT_GLOBAL_NICK);
//$this->irc->join("#chatspike");
//$this->irc->join("#nintendo");
$this->irc->join("#coding");
$this->irc->listen();
$this->irc->disconnect();
}
function debug($message)
{
$this->irc->message(SMARTIRC_TYPE_CHANNEL, "#coding", $message);
}
function command_karmaup(&$irc, &$data)
{
$nick = mysql_real_escape_string(substr($data->messageex[0], 0, strlen($data->messageex[0]) - 2));
$query = "SELECT * FROM karma WHERE `name` = '" . $nick . "'";
$res = mysql_query($query);
if (mysql_num_rows($res) == 0)
{
/* not already there, insert a record */
$query = "INSERT INTO karma (name, karma) VALUES ('" . $nick . "', 1)";
$res = mysql_query($query);
}
else
{
/* already taken */
$query = "UPDATE karma SET `karma` = `karma` + 1 WHERE `name` = '" . $nick . "'";
$res = mysql_query($query);
}
}
function command_karmadown(&$irc, &$data)
{
$nick = mysql_real_escape_string(substr($data->messageex[0], 0, strlen($data->messageex[0]) - 2));
$query = "SELECT * FROM karma WHERE `name` = '" . $nick . "'";
$res = mysql_query($query);
if (mysql_num_rows($res) == 0)
{
/* not already there, insert a record */
$query = "INSERT INTO karma (name, karma) VALUES ('" . $nick . "', -1)";
$res = mysql_query($query);
}
else
{
/* already taken */
$query = "UPDATE karma SET `karma` = `karma` - 1 WHERE `name` = '" . $nick . "'";
$res = mysql_query($query);
}
}
function command_karma(&$irc, &$data)
{
if (!isset($data->messageex[1]))
return;
$nick = mysql_real_escape_string($data->messageex[1]);
$query = "SELECT * FROM karma WHERE `name` = '" . $nick . "'";
$res = mysql_query($query);
$row = mysql_fetch_assoc($res);
if ($row)
{
$this->irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "Karma for " . $data->messageex[1] . " is " . $row['karma']);
}
}
/*
* SmartIRC calls this every 10 seconds. Pings the mysql connection to keep it alive.
*/
function timer_pingmysql(&$irc)
{
mysql_ping();
}
}
/* init db connection */
if (!@mysql_connect(DB_HOST, DB_USER, DB_PASS))
{
echo("Could not connect to mysql server: " . mysql_error());
die();
}
else if (!@mysql_select_db(DB_NAME))
{
echo("Could not select database: " . mysql_error());
die();
}
$KarmaBot = &new KarmaBot();
?>