Szerkesztő:BinBot/baz.py

A Wikipédiából, a szabad enciklopédiából

Ez az adminscript elrendezi az elfogadhatatlan azonosító körüli tennivalókat. Olyankor célszerű használni, ha nyilvánvalóan nem tévedésből hozták létre a blokkolandó azonosítót, és nem akarunk különösebben társalogni vele. A blokkolandó neveket egyelőre a forrásba kell beírni a megjelölt helyre, u betűvel együtt. Használat után vegyük ki, hogy ne legyen galiba véletlenül. A döntés természetesen az adminisztrátoré, a gép csak a mechanikát kezeli! A user-config.py-ban ki kell tölteni a sysopnames rovatot is.

#!/usr/bin/python
# -*- coding: utf-8  -*-
"""
Blokkológép elfogadhatatlan azonosító esetére
Fapados program. Naná, hogy adminjog kell hozzá.

Így kell beírni a blokkolandókat a minta szerint, vesszővel elválasztva,
és pontosan egymás alá vagy mindet egy sorba (ez egy éles példa volt):
tagok=[u'Vandálteszt',
       u'Vandálteszt2',
       u'Vandálteszt3',
      ]

Na ide írd be, a fenti csak minta volt:
"""
tagok=[u'Teszteszter',
      ]
#Blokkoláshoz (a szabványüzeneten túl):
speckomment=u''

"""
1.0, 100819:
Örökblokkolja a usert, {{baz}} sablont tesz a userlapra, redirt a vitalapra, 
levédi mind a kettőt.
1.1, 101023:
Több usert kezel, és akkor is megy, ha már blokkolva volt.
TODO:
- paraméterezés?
- naplózás
- hibakezelés
- alternatíva: a vitalapot ne (ha már van ott valami)

"""
# basic.py
# (C) Pywikipedia bot team, 2006-2010
#
# Distributed under the terms of the MIT license.
# Na ebből van farigcsálva.
#

import wikipedia as pywikibot
import userlib

class BasicBot:
    msg = {
        'hu': u'{{blokkolt azonosító}} sablon körüli adminisztráció botmeghajtással',
    }

    def __init__(self):
        # Set the edit summary message
        self.summary = pywikibot.translate(pywikibot.getSite(), self.msg)

    def run(self):
        #tag betöltése
        site=pywikibot.getSite()
        for tag in tagok:
            user=userlib.User(site,tag)

            #tag blokkolása
            """
            from userlib.py:
            def block(self, expiry = None, reason = None, anon= True, noCreate = False,
              onAutoblock = False, banMail = False, watchUser = False, allowUsertalk = True,
              reBlock = False):
            """
            if len(speckomment)>0:
               komment=u'(%s) ' % speckomment
            else:
               komment = ''
            blockmessage = u'[[Wikipédia:Azonosító|Elfogadhatatlan azonosító]] %s(Blokkolás botmeghajtással)' % komment
            try:
                user.block(expiry='infinite', reason=blockmessage)
                pywikibot.output(u'%s blokkul járt.' % user.name()) 
            except userlib.AlreadyBlocked:
                pywikibot.output(u'%s már blokkolva volt.' % user.name())
            else:
               pywikibot.output(u'%s blokkolása nem sikerült.' % user.name())

            #Userlap és vitalap megírása és mentése
            userlap=user.getUserPage()
            pywikibot.output(userlap.title())
            vitalap=user.getUserTalkPage()
            pywikibot.output(vitalap.title())
            usertext=u'{{blokkolt azonosító}}'
            vitatext=u'#ÁTIRÁNYÍTÁS %s' % userlap.title(asLink=True)
            pywikibot.output(vitatext)
            if not self.save(usertext, userlap, self.summary):
                pywikibot.output(u'Page %s not saved.' % page.title(asLink=True))
            if not self.save(vitatext, vitalap, self.summary):
                pywikibot.output(u'Page %s not saved.' % title(asLink=True))

            #Userlap és vitalap levédése
            del userlap
            del vitalap
            userlap=user.getUserPage()
            vitalap=user.getUserTalkPage()
            userlap.protect(reason=self.summary)
            vitalap.protect(reason=self.summary)
            """
            Ez volt a hibaüzenet, amíg nem volt benne a két del és az újbóli értékadás:
            {u'error': {u'info': u"Existing titles can't be protected with 'create'", u'code': u'create-titleexists'}}
            Itt írtam le a problémát:
            http://lists.wikimedia.org/pipermail/pywikipedia-l/2010-August/006332.html
            Ez volt a megoldás:
            http://lists.wikimedia.org/pipermail/pywikipedia-l/2010-August/006336.html
            Teljes thread: http://lists.wikimedia.org/pipermail/pywikipedia-l/2010-August/thread.html
            """

    def save(self, text, page, comment, minorEdit=True, botflag=True):
        #Egy új sor jön, ideiglenes if a kikommentezett helyett:
        if True:
            try:
                # Save the page
                page.put(text, comment=comment,
                         minorEdit=minorEdit, botflag=botflag)
            except pywikibot.LockedPage:
                pywikibot.output(u"Page %s is locked; skipping."
                                 % page.title(asLink=True))
            except pywikibot.EditConflict:
                pywikibot.output(
                    u'Skipping %s because of edit conflict'
                    % (page.title()))
            except pywikibot.SpamfilterError, error:
                pywikibot.output(
u'Cannot change %s because of spam blacklist entry %s'
                    % (page.title(), error.url))
            else:
                return True
        return False

if __name__ == "__main__":
    try:
        bot = BasicBot()
        bot.run()
    finally:
        pywikibot.stopme()