false] ); $this->_ignoredChannels = is_array($ignored) ? $ignored : []; } catch (\ValueError $e) { $this->_ignoredChannels = []; } } else { $this->_ignoredChannels = [ '#a.b.cd.image' => false, '#a.b.console.ps3' => false, '#a.b.dvd' => false, '#a.b.erotica' => false, '#a.b.flac' => false, '#a.b.foreign' => false, '#a.b.games.nintendods' => false, '#a.b.inner-sanctum' => false, '#a.b.moovee' => false, '#a.b.movies.divx' => false, '#a.b.sony.psp' => false, '#a.b.sounds.mp3.complete_cd' => false, '#a.b.teevee' => false, '#a.b.games.wii' => false, '#a.b.warez' => false, '#a.b.games.xbox360' => false, '#pre@corrupt' => false, '#scnzb' => false, '#tvnzb' => false, 'srrdb' => false, ]; } if (config('irc_settings.scrape_irc_category_ignore') !== '') { $this->_categoryIgnoreRegex = (string) config('irc_settings.scrape_irc_category_ignore'); } if (config('irc_settings.scrape_irc_title_ignore') !== '') { $this->_titleIgnoreRegex = (string) config('irc_settings.scrape_irc_title_ignore'); } $this->elasticsearch = new ElasticSearchSiteSearch; $this->manticoreSearch = new ManticoreSearch; $this->_groupList = []; $this->_silent = $silent; $this->_debug = $debug; $this->_resetPreVariables(); $this->_startScraping(); } /** * Main method for scraping. */ protected function _startScraping(): void { // Connect to IRC. if ($this->connect((string) config('irc_settings.scrape_irc_server'), (int) config('irc_settings.scrape_irc_port'), (bool) config('irc_settings.scrape_irc_tls')) === false) { exit( 'Error connecting to ('. config('irc_settings.scrape_irc_server'). ':'. config('irc_settings.scrape_irc_port'). '). Please verify your server information and try again.'. PHP_EOL ); } // Normalize password to ?string $password = config('irc_settings.scrape_irc_password'); $password = ($password === false || $password === '' || $password === null) ? null : (string) $password; // Login to IRC. Note parameter order: nick, user, real, pass. if ($this->login((string) config('irc_settings.scrape_irc_nickname'), (string) config('irc_settings.scrape_irc_username'), (string) config('irc_settings.scrape_irc_realname'), $password) === false) { exit( 'Error logging in to: ('. config('irc_settings.scrape_irc_server').':'.config('irc_settings.scrape_irc_port').') nickname: ('.config('irc_settings.scrape_irc_nickname'). '). Verify your connection information, you might also be banned from this server or there might have been a connection issue.'. PHP_EOL ); } // Join channels. $channelsCfg = config('irc_settings.scrape_irc_channels'); if ($channelsCfg) { try { $channels = unserialize((string) $channelsCfg, ['allowed_classes' => false]); } catch (\ValueError $e) { $channels = ['#PreNNTmux' => null]; } if (! is_array($channels)) { $channels = ['#PreNNTmux' => null]; } } else { $channels = ['#PreNNTmux' => null]; } $this->joinChannels($channels); if (! $this->_silent) { echo '['. date('r'). '] [Scraping of IRC channels for ('. config('irc_settings.scrape_irc_server'). ':'. config('irc_settings.scrape_irc_port'). ') ('. config('irc_settings.scrape_irc_nickname'). ') started.]'. PHP_EOL; } // Scan incoming IRC messages. $this->readIncoming(); } /** * Process bot messages, insert/update PREs. * * @throws \Exception */ protected function processChannelMessages(): void { if (preg_match( '/^(NEW|UPD|NUK): \[DT: (?P