public function __toString() { $uid = $this->user ? $this->user->getID() : '?'; $cid = $this->channel ? $this->channel->getID() : '?'; $sid = $this->server ? $this->server->getID() : '?'; return sprintf('SCOPE(U:%s,C:%s,S:%s)', $uid, $cid, $sid); }
public static function onKick(Dog_Server $server, Dog_Channel $channel, Dog_User $user, $message) { echo "PG: {$message}\n"; // $server->sendPRIVMSG($channel->getName(), $user->getName().': '.$message); $server->getConnection()->sendRAW(sprintf("KICK %s %s :%s", $channel->getName(), $user->getName(), $message)); $event = new self(array('lpg_uid' => $user->getID(), 'lpg_time' => time())); self::onBan($server, $channel, $user, $message); }
public function claimServer(Dog_Server $server) { if ($server->getNick()->isTemp()) { if (false !== ($nick = Dog_Nick::getNickFor($server))) { $server->sendRAW("NICK {$nick->getName()}"); } } }
public static function sendServerMessage(Dog_Server $server, $message) { foreach ($server->getChannels() as $chan) { $chan instanceof Dog_Channel; if (!Dog_Conf_Mod_Chan::isModuleDisabled('Shadowlamb', $chan->getID())) { $chan->sendPRIVMSG($message); } } }
public static function server(Dog_Server $server, $message, $direction = ' << ') { echo $server->getTLD() . $direction . $message . PHP_EOL; if ($server->isLogging()) { $host = GWF_String::remove($server->getHost(), '/', '!'); GWF_Log::rawLog("dog/{$host}/{$host}", $message); GWF_Log::flush(); } }
private function initQueues() { if (false === ($this->queue_in = msg_get_queue(1000 + $this->server->getID()))) { return false; } if (false === ($this->queue_out = msg_get_queue(2000 + $this->server->getID()))) { return false; } return true; }
public static function onQuit(DOGMOD_QuitJoin $QUITJOIN, Dog_Server $server, Dog_User $user) { $noteworthy = $QUITJOIN->getConfig('noteworthy', 's'); foreach ($server->getChannels() as $channel) { $channel instanceof Dog_Channel; if ($channel->getUserByID($user->getID()) !== false) { if (!Dog_Conf_Mod_Chan::isModuleDisabled('QuitJoin', $channel->getID())) { self::onQuitChannel($QUITJOIN, $server, $channel, $user, $noteworthy); } } } }
/** * Grant a user all privileges on a server. * @param int $sid * @param int $uid */ public static function grantAllToAll(Dog_Server $server, Dog_User $user, $bits = NULL) { $uid = $user->getID(); $all = $bits === NULL ? Dog_IRCPriv::allBits() : intval($bits); foreach (GDO::table('Dog_Channel')->selectColumn('chan_id', "chan_sid={$server->getID()}") as $cid) { if (false === self::table(__CLASS__)->insertAssoc(array('priv_cid' => $cid, 'priv_uid' => $uid, 'priv_privs' => $all))) { return false; } $user->setVar("dcp_{$cid}", $all); } return true; }
public function onEvent(Lamb $bot, Dog_Server $server, $event, $from, $args) { if ($event === 'JOIN') { if (false !== ($user = $server->getUserFromOrigin($from, $args[0]))) { if (false !== ($ip = $this->getIPfromOrigin($from))) { if ($this->auto_probe) { $this->addIP($server, $ip); } else { $this->output(sprintf('User %s has IP %s.', $user->getName(), $ip)); } } } } }
private static function sendNick(Dog_IRC $conn, Dog_Server $server, Dog_Nick $nick) { if (!$conn->send("NICK {$nick->getName()}")) { return false; } if (NULL !== ($pass = $nick->getPass())) { if ($server->isBNC()) { return $conn->send('PASS ' . $pass); } else { return $server->sendPRIVMSG('NickServ', 'IDENTIFY ' . $pass); } } return true; }
private function onPG(Dog_Server $server, Dog_User $user, $from, $origin, $message) { if ($user->isBot()) { return; } if (false === ($channel = $server->getChannel($origin))) { // echo "Unknown channel: $origin\n"; return; } if (self::CAPS_LOCK === true) { $this->onCapslockFlood($server, $channel, $user, $message); } if (self::HIGHLIGHT === true) { $this->onHighlightFlood($server, $channel, $user, $message); } }
public function connect(Dog_Server $server, $blocking = 0) { $this->server = $server; if (false === ($this->context = @stream_context_create())) { return Dog_Log::error('Dog_IRC::connect() ERROR: stream_context_create()'); } $url = $server->getURL(); if (false === ($socket = @stream_socket_client($url, $errno, $errstr, $server->getTimeout(), STREAM_CLIENT_CONNECT, $this->context))) { Dog_Log::error("Dog_IRC::connect() ERROR: stream_socket_client(): URL={$url} CONNECT_TIMEOUT=" . $server->getTimeout()); return Dog_Log::error(sprintf('Dog_IRC::connect() $errno=%d; $errstr=%s', $errno, $errstr)); } if ($server->isSSL()) { if (false === @stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { return Dog_Log::error('Dog_IRC::connect() ERROR: stream_socket_enable_crypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT)'); } } if (false === @stream_set_blocking($socket, 0)) { return Dog_Log::error('Dog_IRC::connect() ERROR: stream_set_blocking(): $blocked=0'); } $this->timestamp = time(); $this->socket = $socket; return true; }
public function onSend(Dog_Server $server, Dog_User $user, $message) { // $c = Dog::getTrigger(); if (false === ($nickname = Common::substrUntil($message, ' ', false))) { return $this->lang('help_send'); } $message = Common::substrFrom($message, ' '); if (false === ($user_to = Dog_User::getForServer($server->getID(), $nickname))) { return Dog::lang('err_user'); } if (false === Dog_Note::isWithinLimits($user->getID())) { return $this->lang('err_limit', array(Dog_Note::LIMIT_AMT, GWF_Time::humanDuration(Dog_Note::LIMIT_TIME))); } if (false !== ($channel = Dog::getChannel())) { if (false !== $channel->getUserByName($nickname)) { return $this->lang('err_in_chan', array($nickname)); } } if (false === Dog_Note::insertNote($user, $user_to, $message)) { return GWF_HTML::lang('ERR_DATABASE', array(__FILE__, __LINE__)); } return $this->lang('msg_sent', array($nickname)); }
public static function flushPermcache(Dog_Server $server, Dog_User $user) { $user->unsetVar("dsp_{$server->getID()}"); }
private function tryAutoLogin(Dog_Server $server, Dog_User $user) { if ($user->isRegistered()) { $username = $user->getName(); if (in_array($server->getID(), $this->status, true)) { $this->sendNickservStatus($server, $username); } else { $server->getConnection()->sendRAW("WHOIS {$username}"); } } }
$prot = $server->isSSL() ? 'ircs' : 'irc'; $port = $server->getPort(); } else { $url = parse_url($argv[0]); if (!isset($url['host'])) { return $plugin->rply('err_url'); } $host = $url['host']; $prot = isset($url['scheme']) ? strtolower($url['scheme']) : 'irc'; if ($prot !== 'irc' && $prot !== 'ircs') { return $plugin->rply('err_url'); } $default_port = $prot === 'ircs' ? 6697 : 6667; $port = isset($url['port']) ? intval($url['port']) : $default_port; $options = Dog_Server::DEFAULT_OPTIONS; $options |= $prot === 'ircs' ? Dog_Server::SSL : 0; } if (false !== ($server = Dog::getServerByArg($argv[0])) || false !== ($server = Dog::getServerByArg($host))) { $plugin->reply('reconnecting'); $server->saveOption(Dog_Server::ACTIVE, true); $server->saveOption(Dog_Server::SSL, $prot === 'ircs'); $server->saveVar('serv_port', $port); } else { $plugin->reply('adding_server'); $server = Dog_Server::getOrCreate($host, $port, $options); $server->setVar('dog_connector', Dog::getUser()); $server->setConf('ircoppass', GWF_Random::randomKey(8)); Dog::addServer($server); } $server->setConnectIn(0.5); $plugin->rply('connect');
public static function getByServer(Dog_Server $server) { return self::table(__CLASS__)->getRow($server->getID()); }
private function onBoardServerTimer(array $entries, Dog_Forum $board, Dog_Server $server) { foreach ($server->getChannels() as $channel) { if ($this->isEnabled($server, $channel)) { $this->onBoardServerChannelTimer($entries, $board, $server, $channel); } } }
private static function processServer(Dog_Server $server) { self::$LAST_SERVER = $server; if (!$server->isConnected()) { $server->connect(); return; } $server->sendQueue(); while (false !== ($message = $server->getMessage())) { // echo 'Rec: '.$message.PHP_EOL; self::processMessage($server, rtrim($message, "\r\n")); } }
public function isTriggerEnabled(Dog_Server $server, $channel, $trigger) { $mod = $this->getName(); $sid = $server->getID(); if (!$this->isEnabled($server, $channel) || Dog_Conf_Mod_Serv::isTriggerDisabled($mod, $sid, $trigger, '0') || $channel !== false && Dog_Conf_Mod_Chan::isTriggerDisabled($mod, $channel->getID(), $trigger, $this->getDefDis($trigger))) { return false; } return true; }
public static function initTimersDirServer($entry, $fullpath, $null = NULL) { if (false !== ($server = Dog_Server::getByTLD($entry))) { if (false !== ($server = Dog::getServerByID($server->getID()))) { GWF_File::filewalker($fullpath, true, array(__CLASS__, 'initTimersDir'), false, $server); } else { Dog_Log::debug(sprintf("Server %d-%s for Timer in path \"%s\" is not Online.", $serverid, $entry, $fullpath)); } } else { Dog_Log::debug(sprintf('Timer in path "%s" could not find it\'s server: %s.', $fullpath, $entry)); } }
/** * @param int $sid * @param string $name * @return Dog_Channel */ public static function getOrCreate(Dog_Server $server, $name) { $sid = $server->getID(); if (false !== ($channel = self::getForServer($sid, $name))) { return $channel; } $channel = new self(array('chan_id' => '0', 'chan_sid' => $sid, 'chan_name' => $name, 'chan_lang' => $server->getLangISO(), 'chan_pass' => NULL, 'chan_modes' => '', 'chan_triggers' => NULL, 'chan_options' => self::DEFAULT_OPTIONS)); return $channel->insert() ? $channel : false; }
$prot = Common::substrUntil($host, '://'); $ssl = $prot === 'ircs' ? true : false; $host = Common::substrFrom($host, '://', $host); $server->saveVars(array('serv_host' => $host, 'serv_port' => $port)); $server->saveOption(Dog_Server::SSL, $ssl); } # Copy Nicknames + passwords from config global $LAMB_CFG; $nicks = GDO::table('Dog_Nick'); $nicks->createTable(true); GDO::table('Dog_Channel')->update('chan_options=0x02'); foreach ($LAMB_CFG['servers'] as $srv) { $nickname = $srv['nickname']; $nickname = Common::substrUntil($nickname, ',', $nickname); $password = $srv['password']; if (false === ($server = Dog_Server::getByTLD(Common::getDomain($srv['host'])))) { die('OUCH!'); } $nicks->insertAssoc(array('nick_sid' => $server->getID(), 'nick_name' => $nickname, 'nick_pass' => $password)); if (isset($srv['options'])) { $server->saveOption(Dog_Server::BNC); } $co = Dog_Channel::DEFAULT_OPTIONS; foreach (explode(',', $srv['channels']) as $chan_name) { GDO::table('Dog_Channel')->update("chan_options={$co}", "chan_sid={$server->getID()} AND chan_name='{$chan_name}'"); } } foreach ($servers->selectAll('*', '', '', NULL, -1, -1, GDO::ARRAY_O) as $server) { $server instanceof Dog_Server; if (false === $nicks->selectVar('1', 'nick_sid=' . $server->getID())) { $nicks->insertAssoc(array('nick_sid' => $server->getID(), 'nick_name' => 'Lamb3', 'nick_pass' => 'lamblamb'));
public static function getExistingNick(Dog_Server $server, $nickname) { $nick = self::escape($nickname); return self::table(__CLASS__)->selectFirstObject('*', "nick_sid={$server->getID()} AND nick_name='{$nick}'"); }
private function response(Dog_Server $server, $message) { if ($this->origin === $server->getBotsNickname()) { $server->reply($this->user->getVar('user_name'), $message); return; } switch (self::GLOBAL_BEHAVIOUR) { case 0: $server->reply($this->origin, $message); break; case 1: Lamb::instance()->globalMessage($message); break; case 2: Lamb::instance()->superGlobalMessage($message); break; default: break; } }
/** * Check if plugin is enabled for server and optional channel. * @param Dog_Server $server * @param DOG_Channel $channel * @return boolean */ public function isEnabled(Dog_Server $server, $channel) { $plg = $this->name; if (Dog_Conf_Plug::isDisabled($plg) || Dog_Conf_Plug_Serv::isDisabled($plg, $server->getID()) || $channel !== false && Dog_Conf_Plug_Chan::isDisabled($plg, $channel->getID(), $this->defdis)) { return false; } return true; }
private function onPrivmsgB(Dog_Server $server, Dog_User $user, $link, $origin, $message) { echo __METHOD__ . "({$link})"; $targets = explode(',', $link); $spam = false; foreach ($targets as $i => $target) { list($sid, $chan) = explode(':', $target); $sid2 = $server->getID(); if ($origin === $chan && $sid == $sid2) { unset($targets[$i]); $spam = true; } } if (!$spam) { return; } $b = chr(2); $lamb = Lamb::instance(); foreach ($targets as $target) { list($sid, $chan) = explode(':', $target); if (false === ($s = $lamb->getServer($sid))) { echo "Can not spam server {$sid}.\n"; continue; } if (false === ($c = $s->getChannel($chan))) { echo "Can not spam server {$sid} channel {$chan}.\n"; continue; } $s->sendPRIVMSG($chan, sprintf("<{$b}%s:%s{$b}>: %s", $server->getID(), $user->getName(), $message)); } }