Szerkesztő:BinBot/baz.py
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()