* SRB2MS.php Copyright (c) 2004 by Logan Arias of Sonic Team JR. * * the Rest is Copyright (c) 2004 Logan Arias * This is LGPL! that means you can change and use as you like * * Full LGPL License: * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ include_once('./SmartIRC.php'); define('MAGPIE_DIR', './magpierss/'); // define('MAGPIE_CACHE_AGE', 30); // half-min require_once(MAGPIE_DIR.'rss_fetch.inc'); require_once(MAGPIE_DIR.'rss_utils.inc'); $today = getdate(); $lastupdatetime = mktime($today['hours'],$today['minutes']-6,0,$today['mon'], $today['mday'], $today['year']); $lastlisttime = mktime($today['hours'],$today['minutes']-1,0,$today['mon'], $today['mday'], $today['year']); class SRB2MS_BOT { function ListUsersPM(&$irc, &$data) { global $rssdatabase; if ($rssdatabase->users[0]) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'List of RSS users'); foreach ($rssdatabase->users as $users) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "$users"); } } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'there are no RSS users'); } } function RSSupdateuser(&$irc, &$data) { global $rssdatabase; if ($rssdatabase->OnList("$data->nick")) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->message, "I am trying to update $data->nick to $data->message from the list"); if ($rssdatabase->ReplaceUser("$data->nick","$data->message")) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->message, "I have changed $data->nick to $data->message on the list"); } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->message, "$data->nick was not on the list"); } } } function RSScheckuser(&$irc, &$data) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "I going to check if you are on the list"); global $rssdatabase; if ($rssdatabase->OnList("$data->nick")) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "you are on the list"); } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "you are not on the list"); } } function RSSremoveuser(&$irc, &$data) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "I am trying to remove $data->nick from the list"); global $rssdatabase; if ($rssdatabase->DeleteUser("$data->nick")) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "I have removed $data->nick from the list"); } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "$data->nick is not on the list"); } } function RSSadduser(&$irc, &$data) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "I am trying to add you $data->nick to the list"); global $rssdatabase; if ($rssdatabase->AddUser("$data->nick")) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "I have added $data->nick to the list"); } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "$data->nick is already on the list"); } } /* function RSSListGamesPM(&$irc, &$data) { $content = $this->GenFeed(); $SRB2MSRSS10 = new MagpieRSS( $content ); if ($SRB2MSRSS10) { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'Running SRB2 netgames '); foreach ($SRB2MSRSS10->items as $item) { $description = $item['dc']['description']; $title = $item['title']; $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "Name: $title $description"); } } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, '.magpie_error()'); $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'The SRB2 MasterServer RSS feed is not up'); } } */ function RSSListUpdate(&$irc) { global $lastupdatetime; global $SRB2MS_mute; if ($SRB2MS_mute) { return; } $RSS10content = $this->GenFeed(); $SRB2MSRSS10 = new MagpieRSS( $RSS10content ); if ($SRB2MSRSS10) { //$irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', 'Running SRB2 netgames '); foreach ($SRB2MSRSS10->items as $item) { if ( $item['title'] == "No servers" ) { // NOP } elseif ( $item['title'] == "No master server" ) { // NOP } else { $published = parse_w3cdtf($item['dc']['date']); if ( $published >= $lastupdatetime ) { $title = $item['title']; $serveraddress = $item['srb2ms']['address']; $serverport = $item['srb2ms']['port']; $serverversion = $item['srb2ms']['version']; //if ( $serverversion == "1.09.3" ) //{ // $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun' , "New Server, $serveraddress:$serverport Name: $title"); //} //else { $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun' , "New Server, $serveraddress:$serverport Name: $title Version: $serverversion"); } //$irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2general', "New Server, Name: $title $description"); } else { // NOP } } } $today = getdate(); // update time $lastupdatetime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); } else { $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', '.magpie_error()'); $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', 'The SRB2 MasterServer RSS feed is not up'); } } function Mute(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $nick => $key ) { if ($data->nick == $nick || $data->nick == 'Logan_GBA') { global $lastupdatetime; $today = getdate(); // update time $lastupdatetime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); $GLOBALS['SRB2MS_mute'] = TRUE; return; } } } function Unmute(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $nick => $key ) { if ($data->nick == $nick || $data->nick == 'Logan_GBA') { $GLOBALS['SRB2MS_mute'] = FALSE; return; } } } function Mute2(&$irc, &$data) { if ($data->nick == 'Logan_GBA') { global $lastupdatetime; $today = getdate(); // update time $lastupdatetime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); $GLOBALS['SRB2MS_mute'] = TRUE; } } function Unmute2(&$irc, &$data) { if ($data->nick == 'Logan_GBA') { $GLOBALS['SRB2MS_mute'] = FALSE; } } function RSSListGames(&$irc, &$data) { global $lastlisttime; $content = $this->GenFeed(); $today = getdate(); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, 'testing feed'); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$content"); //$content1 = $this->Gettextfromserver(); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$content1"); $SRB2MSRSS10 = new MagpieRSS( $content ); if ($SRB2MSRSS10) { if ((mktime($today['hours'],$today['minutes']-2,0,$today['mon'], $today['mday'], $today['year'])) >= $lastlisttime) { //$irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', 'Running SRB2 netgames '); foreach ($SRB2MSRSS10->items as $item) { if ( $item['title'] == "No servers" ) { //0$description = $item['dc']['description']; $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "No SRB2 Games are running, so why don't you start one?"); } elseif ( $item['title'] == "No master server" ) { $description = $item['dc']['description']; $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$description"); } else { $title = $item['title']; $serveraddress = $item['srb2ms']['address']; $serverport = $item['srb2ms']['port']; $serverversion = $item['srb2ms']['version']; //if ( $serverport == " 5029" ) //{ // $serverport = "5029"; //} //if ( $serverversion == "1.09.3" ) //{ // $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun' , "$serveraddress:$serverport Name: $title"); //} //else { $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun' , "$serveraddress:$serverport Name: $title Version: $serverversion"); } } } $today = getdate(); $lastlisttime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); } } else { $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, ".magpie_error()"); $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, 'The SRB2 MasterServer RSS feed is not up'); } } function RSSListGamesPM(&$irc, &$data) { global $lastlisttime; $content = $this->GenFeed(); $today = getdate(); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, 'testing feed'); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$content"); //$content1 = $this->Gettextfromserver(); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$content1"); $SRB2MSRSS10 = new MagpieRSS( $content ); if ($SRB2MSRSS10) { //if ((mktime($today['hours'],$today['minutes']-2,0,$today['mon'], $today['mday'], $today['year'])) >= $lastlisttime) { //$irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', 'Running SRB2 netgames '); $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "Running SRB2 netgames from http://srb2.servegame.org/"); foreach ($SRB2MSRSS10->items as $item) { if ( $item['title'] == "No servers" ) { //0$description = $item['dc']['description']; //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "No SRB2 Games are running, so why don't you start one?"); } elseif ( $item['title'] == "No master server" ) { $description = $item['dc']['description']; //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$description"); } else { $title = $item['title']; $serveraddress = $item['srb2ms']['address']; $serverport = $item['srb2ms']['port']; $serverversion = $item['srb2ms']['version']; //if ( $serverport == " 5029" ) //{ // $serverport = "5029"; //} //if ( $serverversion == "1.09.3" ) //{ // $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun' , "$serveraddress:$serverport Name: $title"); //} //else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "$serveraddress:$serverport Name: $title Version: $serverversion"); } } } $today = getdate(); $lastlisttime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); } } else { //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, ".magpie_error()"); //$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, 'The SRB2 MasterServer RSS feed is not up'); } } function ListGamesPM(&$irc, &$data) { $fd = fsockopen("srb2.servegame.org", 28900, $errno, $errstr, 5); if ($fd) { $buff = "000012360000"; fwrite($fd, $buff); $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'Running SRB2 netgames '); while (1) { $content=fgets($fd, 13); // skip 13 first bytes $content=fgets($fd, 1024); $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, "$content"); //echo "$content"; if (feof($fd)) break; } } else { $irc->message(SMARTIRC_TYPE_NOTICE, $data->nick, 'The SRB2 MasterServer is not up'); } } function ListGamesChan(&$irc, &$data) { global $lastlisttime; $today = getdate(); $fd = fsockopen("srb2.servegame.org", 28900, $errno, $errstr, 5); if ($fd) { stream_set_timeout ($fd, 5); $buff = "000012360000"; fwrite($fd, $buff); if ( (mktime($today['hours'],$today['minutes']-5,0,$today['mon'], $today['mday'], $today['year'])) >= $lastlisttime ) { $content = ""; while (1) { fgets($fd, 13); // skip 13 first bytes $content = fgets($fd, 1024); $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, "$content"); $today = getdate(); $lastlisttime = mktime($today['hours'],$today['minutes'],0,$today['mon'], $today['mday'], $today['year']); if (feof($fd)) break; } } } else { $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel, 'The SRB2 MasterServer is not up'); } } function byebye(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $quitnick => $key ) { if ($data->nick == $quitnick) { $irc->setAutoReconnect(FALSE); $irc->setAutoRetry(FALSE); $irc->quit('This quit was done by' + "$data->nick"); return; } } } function BeenInvited(&$irc, &$data) { if ($data->message == '#srb2fun') $irc->join($data->message); foreach ($irc->channel['#srb2fun']->ops as $invitenick => $key ) { if ($data->nick == $invitenick) { $irc->join($data->message); return; } } foreach ($irc->channel['#srb2fun']->users as $nick => $key ) { if ($data->nick == $nick) { $irc->kick('#srb2fun', $data->nick, "Sorry, but I don't like you, or your channel, $data->message"); return; } } //$irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "Sorry, but I don't like you, or your channel, $data->message"); } function Talk(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $nick => $key) { if ($data->nick == $nick) { $msg = str_replace("!talk ", '', "$data->message"); $irc->message(SMARTIRC_TYPE_CHANNEL, '#srb2fun', $msg); return; } } foreach ($irc->channel['#srb2fun']->users as $nick => $key) { if ($data->nick == $nick) { $irc->kick('#srb2fun', $data->nick, 'Stop talking to me!'); return; } } } function Action(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $nick => $key) { if ($data->nick == $nick) { $msg = str_replace("!action ", '', "$data->message"); $irc->message(SMARTIRC_TYPE_ACTION, '#srb2fun', $msg); return; } } foreach ($irc->channel['#srb2fun']->users as $nick => $key) { if ($data->nick == $nick) { $irc->kick('#srb2fun', $data->nick, 'Stop talking to me!'); return; } } } function Kick(&$irc, &$data) { foreach ($irc->channel['#srb2fun']->ops as $nick => $key) { if ($data->nick == $nick) { $msg = str_replace("!kick ", '', "$data->message"); $irc->kick('#srb2fun', $msg); return; } } foreach ($irc->channel['#srb2fun']->users as $nick => $key) { if ($data->nick == $nick) { $irc->kick('#srb2fun', $data->nick, 'Stop talking to me!'); return; } } } function DebugPM(&$irc, &$data) { // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "from:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->from"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "nick:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->nick"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "ident:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->ident"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "host:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->host"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "channel:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->channel"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "message:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->message"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "type:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->type"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "rawmessage:"); // $irc->message(SMARTIRC_TYPE_QUERY, $data->nick, "$data->rawmessage"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "from: $data->from"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "nick: $data->nick"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "ident: $data->ident"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "host: $data->host"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "channel: $data->channel"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "message: $data->message"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "type: $data->type"); $irc->message(SMARTIRC_TYPE_QUERY, "Alam_GBC", "rawmessage: $data->rawmessage"); } function GetRSS10datafromserver() { $content = ""; $fd = fsockopen("srb2.servegame.org", 28900, $errno, $errstr, 5); if ($fd) { $buff = "000012400000"; fwrite($fd, $buff); while (1) { fgets($fd, 13); // skip 13 first bytes $content .= fgets($fd, 1024); if (feof($fd)) break; } fclose($fd); } else { $content = ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= "\n"; $content .= ' '; $content .= 'No master serverThe master server is not running'; } return "$content"; } function GenFeed() { $content = ''; $content .= "\n"; $content .= 'GetRSS10datafromserver(); $content .= "$feed"; $content .= ''; return $content; } } class RSSDataBase_Class { var $users = array(); function OnList($User) { $userbeenfound = FALSE; foreach ($this->users as $Userlist) { if ($Userlist == $User) { $userbeenfound = TRUE; } } return $userbeenfound; } function AddUser($User) { $userbeenfound = FALSE; foreach ($this->users as $Userlist) { if ($Userlist == $User) { $userbeenfound = TRUE; } } if (!$userbeenfound) { $this->users[] = $User; } return !$userbeenfound; } function DeleteUser($User) { $userbeenfound = FALSE; foreach ($this->users as $index => $Userlist) { if ($Userlist == $User) { $userbeenfound = TRUE; $id = $index; } } if ($userbeenfound) { unset($this->users[$id]); $this->users = array_values($this->users); } return $userbeenfound; } function ReplaceUser($oldUser,$newUser) { $userbeenfound = FALSE; foreach ($this->users as $index => $Userlist) { if ($Userlist == $oldUser) { $userbeenfound = TRUE; $id = $index; } } if ($userbeenfound) { $this->users[$id] = $newUser; } return $userbeenfound; } } // gobal var for muting the Bot $SRB2MS_mute = FALSE; //$SRB2MSRSS10 = fetch_rss( 'http://srb2.servegame.org/RSS1.0.php' ); // thing to hold RSS stuff $rssdatabase = &new RSSDataBase_Class(); // PHP error reporting //error_reporting(E_ERROR); // the Bot is the Class SRB2MS_BOT $bot = &new SRB2MS_BOT(); // Create SmartIRC, and name it as irc for use to, well, do irc stuff ^_^ $esperirc = &new Net_SmartIRC(); // To Debug or Not //$esperirc->setDebug(SMARTIRC_DEBUG_ALL); // Do connect to the Internet $esperirc->setUseSockets(TRUE); // kep a list of all the users in the channel $esperirc->setChannelSyncing(TRUE); // Register the triggers with the class of SRB2MS_BOT //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!gamelist$', $bot, 'ListGamesChan'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!gamelist$', $bot, 'ListGamesPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!RSSgamelist$', $bot, 'RSSListGamesPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!gamelist0$', $bot, 'RSSListGames'); $esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!gamelist$', $bot, 'RSSListGamesPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!gamelist$', $bot, 'RSSListGamesPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!addme$', $bot, 'RSSadduser'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!removeme$', $bot, 'RSSremoveuser'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!listusers$', $bot, 'ListUsersPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_NICKCHANGE, '', $bot, 'RSSupdateuser'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!checkme$', $bot, 'RSScheckuser'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!shutdown$', $bot, 'byebye'); $esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!mute$', $bot, 'Mute'); $esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!unmute$', $bot, 'Unmute'); $esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!shutup$', $bot, 'Mute2'); $esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!talktome$', $bot, 'Unmute2'); $esperirc->registerTimehandler(120000, $bot, 'RSSListUpdate'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^!gamelist$', $bot, 'ListGamesChan'); $esperirc->registerActionhandler(SMARTIRC_TYPE_INVITE, '', $bot, 'BeenInvited'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!talk', $bot, 'Talk'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!action', $bot, 'Action'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!kick', $bot, 'Kick'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_QUERY, '^!ban', $bot, 'Ban'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_ALL, '', $bot, 'DebugPM'); //$esperirc->registerActionhandler(SMARTIRC_TYPE_KICK | SMARTIRC_TYPE_QUIT | SMARTIRC_TYPE_PART, '', $bot, 'DebugPM'); // If you fail once, try agian $esperirc->setAutoRetry(TRUE); // Connect to EsperNet //$esperirc->connect('irc.esper.net', 6667); $esperirc->connect('excalibur.esper.net', 6667); // Reconnect as needed $esperirc->setAutoReconnect(TRUE); // Use the name SRB2MS, and set other stuff $esperirc->login('SRB2MS', 'Net_SmartIRC Client '.SMARTIRC_VERSION.' (SRB2MS_Bot.php)', 0, 'Net_SmartIRC'); // Join #srb2fun $esperirc->join(array('#srb2fun')); // SRB2MS_Pass.php have "$esperirc->message(SMARTIRC_TYPE_QUERY, 'nickserv', 'identify ');" include('./SRB2MS_Pass.php'); // Idle $esperirc->listen(); // Rejoin? $esperirc->reconnect(); ?>