diff --git a/README.md b/README.md index f5fe44a..0f69cce 100644 --- a/README.md +++ b/README.md @@ -1,130 +1,134 @@ # Italian Wikipedia Deletion Bot This software is an Italian Wikipedia bot. It keeps updated the public deletion logs of Italian Wikipedia pages. More information here: https://it.wikipedia.org/wiki/Utente:BotCancellazioni ## Installation ``` sudo apt install git php-cli git clone --recursive https://gitpull.it/source/ItalianWikipediaDeletionBot.git ``` ## Update ``` git pull git submodule update --init --recursive ``` ## Configuration +Just run the bot to start the configuration wizard. + +Or, to configure it manually: + 1. Open the file `config-example.php` with a text editor 2. Fill your bot credentials 3. Save-as `config.php` ## Usage Run on today: ``` ./bot.php ``` Run on the latest 10 days from today: ``` ./bot.php --days=10 ``` Run on a specific date (year-month-day): ``` ./bot.php --from=2018-03-13 ``` Run on a specific date and for 10 days before it: ``` ./bot.php --days=10 --from=2018-03-13 ``` Quit if someone was running the bot just `5` minutes ago (that is the default behaviour): ``` ./bot.php --minutes-ago=5 ``` Ask before saving and enable verbose mode: ``` ./bot.php --ask --verbose ``` Help: ``` ./bot.php --help ``` ## Update To fetch the updates: ``` git pull --recurse-submodules ``` ## Hacking Most of the behaviours — as the content of the categories, the pages, their edit summaries, etc. — can be changed simply hacking the content of the files from the [/templates](/templates) directory. Trust me, you are able to do it. Start becoming familiar with their structure: ``` This is the place for some documentation, expecially about "placeholders". This is the place for a specific example This is the place for the most important part of this file. This part is what this template will generates. It uses stuff like "$1" or "%1%02d" as generic placeholders. ``` To be honest: everything above the `` line it's pure documentation sugar. It's written to help you. I've spent some minutes on them. Please RTFM. asd A non-traumatic template example can be found [here](templates/CATEGORY_YEAR.content.tpl). It describes the generation of the yearly category. ## Framework You may not want to know this: HTTP connections, MediaWiki APIs (including login and tokens etc.), and other stuff, are handled by the [boz-mw](https://gitpull.it/w/first_steps_with_boz-mw/) framework. ## License Copyright (C) 2018-2024 [Valerio Bozzolan](https://it.wikipedia.org/wiki/Utente:Valerio_Bozzolan), contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Original files released under [Creative Commons BY-SA 3.0 International](https://creativecommons.org/licenses/by-sa/3.0/) and [WMF terms](https://wikimediafoundation.org/wiki/Special:MyLanguage/Terms_of_Use/it) by [Mauro742](https://it.wikipedia.org/wiki/Utente:Mauro742)/[MauroBot](https://it.wikipedia.org/wiki/Utente:MauroBot): * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/main.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/bot.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/category.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/dateFunctions.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/core.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/globals.js * https://it.wikipedia.org/wiki/Utente:MauroBot/BotCancellazioni/gui.js diff --git a/bot.php b/bot.php index 6d38286..abf2dbe 100755 --- a/bot.php +++ b/bot.php @@ -1,97 +1,98 @@ #!/usr/bin/php . namespace itwikidelbot; // autoload classes require __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'autoload.php'; use cli\Log; -// load credentials -require __DIR__ . DIRECTORY_SEPARATOR . 'config.php'; +// Load credentials. +// If the file does not exist, a wizard starts. +config_wizard( __DIR__ . DIRECTORY_SEPARATOR . 'config.php' ); // the bot must be in sync with the italian community date_default_timezone_set( 'Europe/Rome' ); // allowed only from command line interface if( ! isset( $argv[ 0 ] ) ) { exit( 1 ); } // command line arguments $opts = getopt( 'h', [ 'ask', 'days:', 'from:', 'help', 'minutes-ago:', 'verbose', ] ); // help message if( isset( $opts[ 'help' ] ) || isset( $opts[ 'h' ] ) ) { printf( "usage: %s [OPTIONS]\n", $argv[ 0 ] ); echo " --days=DAYS how many days to be processed (default: 1)\n"; echo " --from=YYYY-MM-DD starting date (default: today)\n"; echo " --minutes-ago=N quits if the last edit was below N minutes ago (default: 5)\n"; echo " --ask ask before saving\n"; echo " --verbose verbose mode\n"; echo " -h --help show this help and exit\n"; exit( 0 ); } // days to be processed from now to the past $DAYS = isset( $opts[ 'days' ] ) ? (int) $opts[ 'days' ] : 1; // starting date formatted as 'YYYY-MM-DD' $DATE = isset( $opts[ 'from' ] ) ? $opts[ 'from' ] : 'now'; // minimum last edit age $MINUTES = isset( $opts[ 'minutes-ago' ] ) ? (int) $opts[ 'minutes-ago' ] : 5; // ask for every edit if( isset( $opts[ 'ask' ] ) ) { Page::$ASK_BEFORE_SAVING = true; } // verbose mode if( isset( $opts[ 'verbose' ] ) ) { Log::$DEBUG = true; } Log::info( 'start' ); $bot = Bot::createFromString( $DATE ); if( $MINUTES < 1 || $bot->isLasteditOlderThanMinutes( $MINUTES ) ) { for( $i = 0; $i < $DAYS; $i++ ) { $bot->run()->previousDay(); } } else { // do not insist Log::info( sprintf( 'skip: someone running less than %d minutes ago', $MINUTES ) ); } Log::info( 'end' ); diff --git a/includes/autoload.php b/includes/autoload.php index a7d2bb6..8ea2dfa 100644 --- a/includes/autoload.php +++ b/includes/autoload.php @@ -1,30 +1,30 @@ . // autoload local classes spl_autoload_register( function( $name ) { $prefix = substr( $name, 0, 13 ); if( 'itwikidelbot\\' === $prefix ) { $name = substr( $name, 13 ); $path = __DIR__ . DIRECTORY_SEPARATOR . "class-$name.php"; if( ! file_exists( $path ) ) { throw new Exception( "missing class $name" ); } require __DIR__ . DIRECTORY_SEPARATOR . "class-$name.php"; } } ); // autoload boz-mw classes -require __DIR__ . DIRECTORY_SEPARATOR . 'boz-mw' . DIRECTORY_SEPARATOR . 'autoload.php'; +require __DIR__ . DIRECTORY_SEPARATOR . 'boz-mw' . DIRECTORY_SEPARATOR . 'autoload-with-laser-cannon.php';