Daimona /
BotRiconferme
| 1 | <?php declare( strict_types=1 ); |
||
| 2 | /** |
||
| 3 | * Entry point for the bot, called by CLI |
||
| 4 | */ |
||
| 5 | |||
| 6 | require __DIR__ . '/vendor/autoload.php'; |
||
| 7 | |||
| 8 | use BotRiconferme\Bot; |
||
| 9 | use BotRiconferme\CLI; |
||
| 10 | use BotRiconferme\Config; |
||
| 11 | use BotRiconferme\MessageProvider; |
||
| 12 | |||
| 13 | if ( !CLI::isCLI() ) { |
||
| 14 | exit( 'CLI only!' ); |
||
| 15 | } |
||
| 16 | |||
| 17 | define( 'BOT_VERSION', '2.1' ); |
||
| 18 | |||
| 19 | date_default_timezone_set( 'Europe/Rome' ); |
||
| 20 | |||
| 21 | $cli = new CLI(); |
||
| 22 | |||
| 23 | /* URL (for debugging purpose) */ |
||
| 24 | $url = $cli->getURL() ?? 'https://it.wikipedia.org/w/api.php'; |
||
| 25 | |||
| 26 | define( 'DEFAULT_URL', $url ); |
||
| 27 | define( 'META_URL', 'https://meta.wikimedia.org/w/api.php' ); |
||
| 28 | |||
| 29 | /* START */ |
||
| 30 | |||
| 31 | $errTitle = $cli->getOpt( 'error-title' ); |
||
| 32 | |||
| 33 | $simpleLogger = new \BotRiconferme\Logger\SimpleLogger(); |
||
| 34 | // @fixme A bit of dependency hell here |
||
| 35 | $wiki = new \BotRiconferme\Wiki\Wiki( $simpleLogger ); |
||
| 36 | |||
| 37 | // FIXME global state. But don't let it depend on config. |
||
| 38 | $globalListTitle = $cli->getOpt( 'list-title' ); |
||
| 39 | |||
| 40 | Config::init( $cli->getOpt( 'config-title' ), $wiki ); |
||
|
1 ignored issue
–
show
Bug
introduced
by
Loading history...
|
|||
| 41 | $mp = new MessageProvider( $wiki, $cli->getOpt( 'msg-title' ) ); |
||
| 42 | $loginInfo = new \BotRiconferme\Wiki\LoginInfo( |
||
| 43 | $cli->getOpt( 'username' ), |
||
| 44 | $cli->getOpt( 'password' ) |
||
| 45 | ); |
||
| 46 | $wiki->setLoginInfo( $loginInfo ); |
||
| 47 | $wiki->setEditsAsBot( Config::getInstance()->get( 'bot-edits' ) ); |
||
| 48 | |||
| 49 | if ( $errTitle !== null ) { |
||
| 50 | // Use a different Wiki with higher min level. |
||
| 51 | $wikiLoggerLogger = new \BotRiconferme\Logger\SimpleLogger( \Psr\Log\LogLevel::ERROR ); |
||
| 52 | $wikiLoggerWiki = new \BotRiconferme\Wiki\Wiki( $wikiLoggerLogger ); |
||
| 53 | $wikiLoggerWiki->setLoginInfo( $loginInfo ); |
||
| 54 | $wikiLoggerWiki->setEditsAsBot( Config::getInstance()->get( 'bot-edits' ) ); |
||
| 55 | $errPage = new \BotRiconferme\Wiki\Page\Page( $errTitle, $wikiLoggerWiki ); |
||
| 56 | $wikiLogger = new \BotRiconferme\Logger\WikiLogger( |
||
| 57 | $errPage, |
||
| 58 | $mp->getMessage( 'error-page-summary' )->text(), |
||
| 59 | \Psr\Log\LogLevel::ERROR |
||
| 60 | ); |
||
| 61 | $mainLogger = new \BotRiconferme\Logger\MultiLogger( $simpleLogger, $wikiLogger ); |
||
| 62 | } else { |
||
| 63 | $mainLogger = $simpleLogger; |
||
| 64 | } |
||
| 65 | |||
| 66 | $errorHandler = function ( $errno, $errstr, $errfile, $errline ) { |
||
| 67 | throw new \ErrorException( $errstr, 0, $errno, $errfile, $errline ); |
||
| 68 | }; |
||
| 69 | // @phan-suppress-next-line PhanTypeMismatchArgumentInternal |
||
| 70 | set_error_handler( $errorHandler ); |
||
| 71 | |||
| 72 | $bot = new Bot( $mainLogger, $wiki, $mp ); |
||
| 73 | $taskOpt = $cli->getTaskOpt(); |
||
| 74 | $type = current( array_keys( $taskOpt ) ); |
||
| 75 | try { |
||
| 76 | if ( $type === 'task' ) { |
||
| 77 | $bot->runTask( $taskOpt['task'] ); |
||
| 78 | } elseif ( $type === 'subtask' ) { |
||
| 79 | $bot->runSubtask( $taskOpt['subtask'] ); |
||
| 80 | } else { |
||
| 81 | $bot->runAll(); |
||
| 82 | } |
||
| 83 | } catch ( Throwable $e ) { |
||
| 84 | $mainLogger->error( "$e" ); |
||
| 85 | } finally { |
||
| 86 | $mainLogger->flush(); |
||
| 87 | } |
||
| 88 |