#!/usr/bin/env python3"""An incomplete sample script.This is not a complete bot; rather, it is a template from which simplebots can be made. You can rename it to mybot.py, then edit it inwhatever way you want.Use :ref:`global<Global Options>` ``-simulate`` option for test purposes.No changes to live wiki will be done.The following parameters are supported:-always The bot won't ask for confirmation when putting a page-text: Use this text to be added; otherwise 'Test' is used-replace: Don't add text but replace it-top Place additional text on top of the page-summary: Set the action summary message for the edit.This sample script is a :class:`ConfigParserBot <bot.ConfigParserBot>`.All settings can be made either by giving option with the command lineor with a settings file which is scripts.ini by default. If you don'twant the default values you can add any option you want to change tothat settings file below the [basic] section like:.. code:: ini [basic] ; inline comments starts with colon # This is a commend line. Assignments may be done with '=' or ':' text: A text with line break and continuing on next line to be put replace: yes ; yes/no, on/off, true/false and 1/0 is also valid summary = Bot: My first test edit with pywikibotEvery script has its own section with the script name as header.In addition the following generators and filters are supported butcannot be set by settings file:¶ms;"""## (C) Pywikibot team, 2006-2024## Distributed under the terms of the MIT license.#from__future__importannotationsimportpywikibotfrompywikibotimportpagegeneratorsfrompywikibot.botimport(AutomaticTWSummaryBot,ConfigParserBot,ExistingPageBot,SingleSiteBot,)# This is required for the text that is shown when you run this script# with the parameter -help.docuReplacements={'¶ms;':pagegenerators.parameterHelp}# noqa: N816
[docs]classBasicBot(# Refer pywikobot.bot for generic bot classesSingleSiteBot,# A bot only working on one siteConfigParserBot,# A bot which reads options from scripts.ini setting file# CurrentPageBot, # Sets 'current_page'. Process it in treat_page method.# # Not needed here because we have subclassesExistingPageBot,# CurrentPageBot which only treats existing pagesAutomaticTWSummaryBot,# Automatically defines summary; needs summary_key):"""An incomplete sample bot. :ivar summary_key: Edit summary message key. The message that should be used is placed on /i18n subdirectory. The file containing these messages should have the same name as the caller script (i.e. basic.py in this case). Use summary_key to set a default edit summary message. :type summary_key: str """use_redirects=False# treats non-redirects onlysummary_key='basic-changing'update_options={'replace':False,# delete old text and write the new text'summary':None,# your own bot summary'text':'Test',# add this text from option. 'Test' is default'top':False,# append text on top of the page}
[docs]deftreat_page(self)->None:"""Load the given page, do some changes, and save it."""text=self.current_page.text################################################################# NOTE: Here you can modify the text in whatever way you want. ################################################################## If you find out that you do not want to edit this page, just return.# Example: This puts Text on a page.# Retrieve your private option# Use your own text or use the default 'Test'text_to_add=self.opt.textifself.opt.replace:# replace the page texttext=text_to_addelifself.opt.top:# put text on toptext=text_to_add+textelse:# put text on bottomtext+=text_to_add# if summary option is None, it takes the default i18n summary from# i18n subdirectory with summary_key as summary key.self.put_current(text,summary=self.opt.summary)
[docs]defmain(*args:str)->None:"""Process command line arguments and invoke bot. If args is an empty list, sys.argv is used. :param args: command line arguments """options={}# Process global arguments to determine desired sitelocal_args=pywikibot.handle_args(args)# This factory is responsible for processing command line arguments# that are also used by other scripts and that determine on which pages# to work on.gen_factory=pagegenerators.GeneratorFactory()# Process pagegenerators argumentslocal_args=gen_factory.handle_args(local_args)# Parse your own command line argumentsforarginlocal_args:arg,_,value=arg.partition(':')option=arg[1:]ifoptionin('summary','text'):ifnotvalue:pywikibot.input('Please enter a value for '+arg)options[option]=value# take the remaining options as booleans.# You will get a hint if they aren't pre-defined in your bot classelse:options[option]=True# The preloading option is responsible for downloading multiple# pages from the wiki simultaneously.gen=gen_factory.getCombinedGenerator(preload=True)# check if further help is neededifnotpywikibot.bot.suggest_help(missing_generator=notgen):# pass generator and private options to the botbot=BasicBot(generator=gen,**options)bot.run()# guess what it does