Index: wikipedia.py
===================================================================
--- wikipedia.py	(Revision 8656)
+++ wikipedia.py	(Arbeitskopie)
@@ -7127,6 +7127,10 @@
         """Return path to Special:Contributions for user 'target'."""
         return self.family.contribs_address(self.lang,target,limit,offset)
 
+    def globalusers_address(self, target='', limit=500, offset='', group=''):
+        """Return path to Special:GlobalUsers for user 'target' and/or group 'group'."""
+        return self.family.globalusers_address(self.lang, target, limit, offset, group)
+
     def __hash__(self):
         return hash(repr(self))
 
Index: family.py
===================================================================
--- family.py	(Revision 8656)
+++ family.py	(Arbeitskopie)
@@ -3765,13 +3765,13 @@
         return '%s?title=%s&action=unprotect&useskin=monobook' % (self.path(code), name)
 
     def block_address(self, code):
-      return '%s?title=%s:Blockip&action=submit&useskin=monobook' % (self.path(code), self.special_namespace_url(code))
+        return '%s?title=%s:Blockip&action=submit&useskin=monobook' % (self.path(code), self.special_namespace_url(code))
 
     def unblock_address(self, code):
-      return '%s?title=%s:Ipblocklist&action=submit&useskin=monobook' % (self.path(code), self.special_namespace_url(code))
+        return '%s?title=%s:Ipblocklist&action=submit&useskin=monobook' % (self.path(code), self.special_namespace_url(code))
 
     def blocksearch_address(self, code, name):
-      return '%s?title=%s:Ipblocklist&action=search&ip=%s&useskin=monobook' % (self.path(code), self.special_namespace_url(code), name)
+        return '%s?title=%s:Ipblocklist&action=search&ip=%s&useskin=monobook' % (self.path(code), self.special_namespace_url(code), name)
 
     def linksearch_address(self, code, link, limit=500, offset=0):
         return '%s?title=%s:Linksearch&limit=%d&offset=%d&target=%s&useskin=monobook' % (self.path(code), self.special_namespace_url(code), limit, offset, link)
@@ -3782,6 +3782,9 @@
     def export_address(self, code):
         return '%s?title=%s:Export&useskin=monobook' % (self.path(code), self.special_namespace_url('_default'))
 
+    def globalusers_address(self, code, target='', limit=500, offset='', group=''):
+        return '%s?title=%s:GlobalUsers&username=%s&limit=%s&offset=%s&group=%s&useskin=monobook' % (self.path(code), self.special_namespace_url(code), target, limit, offset, group)
+
     def query_address(self, code):
         return '%s?' % self.querypath(code)
 
Index: botlist.py
===================================================================
--- botlist.py	(Revision 8656)
+++ botlist.py	(Arbeitskopie)
@@ -83,7 +83,29 @@
             params['aufrom'] = data['query-continue']['allusers']['aufrom']
         else:
             break
- 
+
+    pywikibot.output(u'Retrieving global bot user list for %s.' % repr(site))
+    pywikibot.put_throttle() # It actually is a get, but a heavy one.
+    m1 = True
+    offset = ''
+    while m1:
+        text = site.getUrl(site.globalusers_address(offset=offset, group='Global_bot'))
+
+        m1 = re.findall(u'<li>.*?</li>', text)
+        for item in m1:
+            m2 = re.search(u'<li>(.*?)\((.*?),\s(.*?)\)</li>', item)
+            (bot, flag_local, flag_global) = m2.groups()
+
+            bot         = bot[:-2]
+            flag_local  = (flag_local[:2] == u'<a')
+            flag_global = True # since group='Global_bot'
+
+            if bot not in botlist:
+                botlist.append( bot )
+
+        #print len(botlist)
+        offset = bot.encode(site.encoding())
+
     # Save the botlist to disk
     # The file is stored in the botlists subdir. Create if necessary.
     if sysop:
