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
![]() |
|||
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 |