Help:Bots

From Dota 2 Wiki
Jump to: navigation, search
Robot.png

A bot is a computer program that automatically retrieves or updates wiki pages when it is executed. In general, bots are used for repetitive maintenance tasks, whose volume and characteristics are too large to be performed manually by users.

Developing and executing bots is normally outside the role of normal users, requires programming experience and must be done in coordination with the wiki's admins or other staff.

Flagging a bot

Bot accounts can be flagged as a bot using Special:UserRights by a bureaucrat or by Gamepedia Staff. By default, bot edits are hidden in Special:RecentChanges. Any subsequent edits made by a bot will be marked as such by an uncapitalized letter B (b) next to their edits when viewed in Recent changes.

Framework and interface for bot development

Bots do not access the wiki through the normal user interface. MediaWiki has an API (Application Programming Interface) available for this purpose. An API is a protocol for standardised communication between two computer programs. Check mw:API:Client code for more information.

Bots used several different frameworks, the most popular being AutoWikiBrowser and Pywikibot. Several bot operators create their own frameworks, for fun or because of the many limitations that existing frameworks have.

Authentication

The method for setting up an account to use a bot or other external editors using the API interface has been updated as of 1 March 2017. Logging in to third-party tools now makes use of a password generator to create a new login for automated tools, accessible at Special:BotPasswords on any Gamepedia wiki.

PyWikiBot[edit]

For all of those who are interested in using PWB. Here's a step-by-step guide:

  • Check if Python was added to your windows path. ;C:\Python3x
To permanently modify the default environment variables, click Start and search for ‘edit environment variables’, or open System properties, Advanced system settings and click the Environment Variables button. In this dialog, you can add or modify User and System variables. To change System variables, you need non-restricted access to your machine (i.e. Administrator rights).
  • From now on you need CMD, the windows command line. Install the "request" module via python setup.py install. You can change the directory with cd to go wherever you unpacked the "request" setup.py.
  • Download PWB and unpack it somewhere (e.g. under C:/Programs/PWB)
  • Create an empty file called "dota2_family.py" in C:/Programs/PWB/pywikibot/families/ and paste in the following content:
# -*- coding: utf-8 -*-

from pywikibot import family
from pywikibot.tools import deprecated

class Family(family.Family):
    def __init__(self):
        family.Family.__init__(self)
        self.name = 'dota2'
        self.langs = {
            'de': 'dota2-de.gamepedia.com',
            'en': 'dota2.gamepedia.com',
            'pt': 'dota2-pt.gamepedia.com',
            'ru': 'dota2-ru.gamepedia.com',
            'zh': 'dota2-zh.gamepedia.com',
        }

    def scriptpath(self, code):
        return {
            'de': '',
            'en': '',
            'pt': '',
            'ru': '',
            'zh': '',
        }[code]

    def protocol(self, code):                                                         
        return 'HTTPS'
  • Run python generate_user_files.py from your PWB folder via CMD. Follow the instructions.
  • Optionally delete the two example files.
  • Open the user-config.py and do some modifications: These were my modifications. Of course you are neither admin (sysop) on every page, nor do you have a need for listing all of languages. Just take what you need.
# If you use either of these functions to define the family to work on by
# default (the ‘family’ variable below), you must place the function call
# before the definition of the ‘family’ variable.
family = 'dota2'

# The language code of the site we're working on.
mylang = 'en'

# The dictionary usernames should contain a username for each site where you
# have a bot account. If you have a unique username for all languages of a
# family , you can use '*'

password_file = "user-password.py"

usernames['dota2']['en'] = u'Username'
usernames['dota2']['de'] = u'Username'
usernames['dota2']['pt'] = u'Username'
usernames['dota2']['ru'] = u'Username'
usernames['dota2']['zh'] = u'Username'
sysopnames['dota2']['en'] = u'Username'
sysopnames['dota2']['de'] = u'Username'
sysopnames['dota2']['pt'] = u'Username'
sysopnames['dota2']['ru'] = u'Username'
sysopnames['dota2']['zh'] = u'Username'
  • Create a new password file called user-password.py in the folder with the following content. Replace <Text> with the details you defined for the bot access:
("<Username>", BotPassword("<Botname>", "<Botpassword>"))
  • Done, you can make a checkrun with such a command. It will list all pages that contain "Slar" (e.g. Slark and Slardar):

python pwb.py listpages -format:3 -titleregex:'Slar' -start:!

AutoWikiBot[edit]

Grow icon.png
Play They call me Tiny.
This article is a stub. As such, it is not complete.
You can help Dota 2 Wiki by expanding it.

mwclient[edit]

Official documentation: Read the Docs

mwclient is a more lightweight alternative to PyWikiBot. It does not come with preinstalled scripts.

  1. Download Python (any version >2.7 should work).
  2. Install mwclient by entering pip3 install mwclient (pip install mwclient if you are using Python 2.x)
  3. Create a new text file and save it with the .py extension.
  4. Write your script in the file you just created.
  5. Run it by entering python3 path/to/your/file.py (python path/to/your/file.py for Python version 2.x)

Explanation[edit]

The mwclient module is based around the Site() object. This object needs to be setup at the beginning of your script:

import mwclient


site = mwclient.Site('dota2.gamepedia.com', path='/')

To authenticate yourself you use the Site.login() method. The needed bot account can be created from Special:BotPasswords.

site.login('bot_user_name', 'bot_password')

From there you can use the the methods explained in the documentation.

Example[edit]

import mwclient


site = mwclient.Site('dota2.gamepedia.com', path='/')
site.login('bot_user_name', 'bot_password')


page = site.Pages['Evil Geniuses']
text = page.text()
text = text.replace('Arteezy', 'Fear')
page.save(text, summary='Bot: Arteezy left the team.')