" . $what . "\n"; fputs($connection['socket'],$what . "\r\n"); } function parsebuffer() { global $connection, $config; print date("[d/m - H:i:s]") . " <- " . $connection['buffer']['all'] . "\n"; $buffer = explode(' ',$connection['buffer']['all'],4); foreach ($buffer as $i => $j) { if (substr($j,0,1) == ":") { buffer[$i] = substr($j,1); } } $posex = strpos($buffer[0],'!'); $posat = strpos($buffer[0],'@'); $connection['buffer']['usernick'] = substr($buffer[0],1,$posex-1); $connection['buffer']['identd'] = substr($buffer[0],$posex+1,$posat-$posex-1); $connection['buffer']['hostname'] = substr($buffer[0],$posat+1); $connection['buffer']['command'] = $buffer[1]; $connection['buffer']['target'] = $buffer[2]; $connection['buffer']['arguments'] = $buffer[3]; } function checkbuffer() { global $connection, $config; switch($connection['buffer']['command']) { /* ### Nick in use ### If first nick in use, re-send NICK command with alternate nick and change settings to match */ case '433': raw('NICK ' . $config['altnick']); $connection['settings']['nick'] = $config['altnick']; break; /* ### Server info / modes ### Get server cmodes, umodes, settings */ case '005': $settings = $connection['buffer']['argument']; if (preg_match('/^.*PREFIX=\(([a-zA-Z]+)\)([^\s]+).*$/',$settings,$matches)) { $connection['server']['modes']['umodes'] = str_split($matches[1]); $connection['server']['modes']['prefixes'] = str_split($matches[2]); foreach ($connection['server']['modes']['prefixes'] as $pr) { $connection['server']['modes']['prefixlist'] .= '\\' . $pr; } } if (preg_match('/^.*CHANMODES=([^\s]+).*$/',$settings,$matches)) { $connection['server']['modes']['cmodes'] = str_split($matches[1]); } break; /* ### JOIN ### On JOIN, check for self: if so, create arrays for channel; if someone else, add them to the channel userlist */ case 'JOIN': $channel = $connection['buffer']['target']; $nick = $connection['buffer']['usernick']; if ($nick == $connection['settings']['nick']) { $connection['channels'][$channel] = array(); $connection['channels'][$channel]['topic'] = array(); $connection['channels'][$channel]['modes'] = array(); $connection['channels'][$channel]['names'] = 0; } else { $connection['channels'][$channel]['users'][$nick] = "1"; } break; /* ### PART, KICK and QUIT ### On PART, unset nick value in channel; On QUIT, unset nick value in all channels */ case 'PART': $channel = $connection['buffer']['target']; $nick = $connection['buffer']['usernick']; if ($nick == $connection['settings']['nick']) { unset($connection['channels'][$channel]); } else { unset($connection['channels'][$channel]['users'][$nick]); } break; case 'KICK': $channel = $connection['buffer']['target']; $args = explode(" ",$connection['buffer']['arguments'],2); $nick = $args[0]; if ($nick == $connection['settings']['nick']) { unset($connection['channels'][$channel]); } else { unset($connection['channels'][$channel]['users'][$nick]); } break; case 'QUIT': $nick = $connection['buffer']['usernick']; if ($nick != $connection['settings']['nick']) { foreach ($connection['channels'] as $channel) { if (isset($connection['channels'][$channel][$nick])) { unset($connection['channels'][$channel][$nick]); } } } break; /* ### NICK ### On NICK, if self, change settings; if someone else, copy and unset nick value in all channels */ case 'NICK': $nick = $connection['buffer']['usernick']; $newnick = $connection['buffer']['target']; if ($nick = $connection['settings']['nick']) { $connection['settings']['nick'] = $newnick; } foreach ($connection['channels'] as $channel) { if (isset($connection['channels'][$channel][$nick])) { $connection['channels'][$channel][$newnick] = $connection['channels'][$channel][$nick]; unset($connection['channels'][$channel][$nick]); } } break; /* ### /NAMES list ### When given /NAMES list, mark channel as compiling list and clear if first list, add nicks to channel, add umodes to users */ case '353': $list = substr($connection['buffer']['arguments'],strpos($connection['buffer']['arguments'],"#")); $channel = substr($list,0,strpos($list," ") - 1); if ($connection['channels'][$channel]['names'] = 0) { $connection['channels'][$channel]['users'] = array(); $connection['channels'][$channel]['names'] = 1; } $nicks = substr($list,strpos($list,":")); $nicks = explode(" ",$nicks); foreach ($nicks as $nick) { $umode = "1"; if (preg_match('/^[' . $connection['server']['modes']['prefixlist'] . '].*$/',$nick)) { $umode = substr($nick,0,1); $nick = substr($nick,1); } $connection['channels'][$channel]['users'][$nick] = $umode; } break; /* ### End of /NAMES list ### Mark channel as not compiling list */ case '356': $channel = $connection['buffer']['target']; $connection['channels'][$channel]['names'] = 0; break; } } ?>