Пример #1
0
 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);
 }
Пример #2
0
 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);
 }
Пример #3
0
 public function claimServer(Dog_Server $server)
 {
     if ($server->getNick()->isTemp()) {
         if (false !== ($nick = Dog_Nick::getNickFor($server))) {
             $server->sendRAW("NICK {$nick->getName()}");
         }
     }
 }
Пример #4
0
 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);
         }
     }
 }
Пример #5
0
 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();
     }
 }
Пример #6
0
 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;
 }
Пример #7
0
 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);
             }
         }
     }
 }
Пример #8
0
 /**
  * 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;
 }
Пример #9
0
 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));
                 }
             }
         }
     }
 }
Пример #10
0
 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;
 }
Пример #11
0
 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);
     }
 }
Пример #12
0
 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;
 }
Пример #13
0
 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));
 }
Пример #14
0
 public static function flushPermcache(Dog_Server $server, Dog_User $user)
 {
     $user->unsetVar("dsp_{$server->getID()}");
 }
Пример #15
0
 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}");
         }
     }
 }
Пример #16
0
    $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');
Пример #17
0
 public static function getByServer(Dog_Server $server)
 {
     return self::table(__CLASS__)->getRow($server->getID());
 }
Пример #18
0
 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);
         }
     }
 }
Пример #19
0
 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"));
     }
 }
Пример #20
0
 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;
 }
Пример #21
0
 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));
     }
 }
Пример #22
0
 /**
  * @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;
 }
Пример #23
0
    $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'));
Пример #24
0
 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}'");
 }
Пример #25
0
 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;
     }
 }
Пример #26
0
 /**
  * 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;
 }
Пример #27
0
 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));
     }
 }