array(), 1 => array() ); public function load($uplink, $old = false) { $this->uplink = $uplink; if(!$old) { $nick = "IPv6"; $ident = "ipv6"; $ip = "0::0"; $host = "fd00::C0CA:C01A:ADD5:11FE"; //coca cola adds life maybe someone undestands it :D $realname = "IPv6"; $modes = "ioknISD"; $this->ipv6 = $this->uplink->addUser($nick,$ident,$host,$ip,$modes,$realname); if(is_a($this->ipv6, "P10_User")) { $this->uplink->join($this->ipv6, "#IPv6", (P10_Channel::USERPRIV_OPED | P10_Channel::USERPRIV_VOICE)); $this->uplink->join($this->ipv6, "#dev", P10_Channel::USERPRIV_VOICE); } } else { $this->ipv6 = $old; } ModCMD::bind($this, BIND_JOIN, "recive_join"); ModCMD::bind($this, BIND_CHANMODE, "recive_mode"); ModCMD::bind($this, BIND_KICK, "recive_kick"); ModCMD::bind($this, BIND_QUIT, "recive_quit"); } public function unload($rehash = false) { if($rehash) { return $this->ipv6; } else { $this->uplink->delUser($this->ipv6, "Bye."); } } public function loop() { for($i = 0; $i < 2; $i++) { foreach($this->cache[$i] as $id => $cache) { if($cache < time()) unset($this->cache[$i][$id]); } } } private function botOppedOnChannel($channel) { $privs = $channel->getUserPrivs($this->ipv6); return ($privs & P10_Channel::USERPRIV_OPED); } public function recive_join($user, $channel, $isBurst) { if(!$this->botOppedOnChannel($channel)) return false; $ipv6 = '/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))(|\/[0-9]{1,3})$/'; if(preg_match($ipv6, $user->getIP())) { $privs = $channel->getUserPrivs($user); $privs |= (P10_Channel::USERPRIV_OPED | P10_Channel::USERPRIV_VOICE); $channel->setUserPrivs($user, $privs); $this->uplink->mode($this->ipv6, $channel, "+ov ".$user->getNumeric()." ".$user->getNumeric()); } else { $privs = $channel->getUserPrivs($user); $privs |= (P10_Channel::USERPRIV_VOICE); $channel->setUserPrivs($user, $privs); $this->uplink->mode($this->ipv6, $channel, "+v ".$user->getNumeric()); } } public function recive_mode($user, $channel, $modes) { if($user->getModes()->hasMode('o') || !$this->botOppedOnChannel($channel)) return false; if(array_key_exists($user->getNumeric(), $this->cache[0]) && $this->cache[0][$user->getNumeric()]['time'] > time()) { $this->uplink->kick($this->ipv6, $user, $channel, "you're not allowed to change modes in this channel!"); } else { $this->uplink->notice($this->ipv6, $user, "you're not allowed to change modes in this channel!"); $this->cache[0][$user->getNumeric()] = time() + 600; } $mode = explode(" ",$modes); $modestr=""; $params=""; $p=0; for($i=0;$iuplink->mode($this->ipv6, $channel, $modes); } public function recive_kick($user, $target, $channel, $modes) { if($user->getModes()->hasMode('o') || !$this->botOppedOnChannel($channel)) return false; if(array_key_exists($user->getNumeric(), $this->cache[1]) && $this->cache[1][$user->getNumeric()]['time'] > time()) { $this->uplink->delUser($user, "You have been warned not to kick users from this Channel!"); } else { $this->uplink->kick($this->ipv6, $user, $channel, "you're not allowed to kick users from this channel!"); $this->cache[1][$user->getNumeric()] = time() + 600; } } public function recive_quit($user, $reason) { if($user === $this->ipv6) { $this->load($this->uplink); } for($i = 0; $i < 2; $i++) { if(array_key_exists($user->getNumeric(), $this->cache[$i])) { unset($this->cache[$i][$user->getNumeric()]); } } } } ?>