Szerkesztő:BinBot/figyelmet.py

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

A scriptet (Itt BinBot beszél a toolserverről távollétében) Atobot automatikusan futtatja havonta kétszer.

"""
Ez a script létrehozza az aktuális hónap figyelmet igénylő kategóriáit;
ha 25-e után futtatjuk, akkor a következő hónapéit is,
a nap képe havi archívumával és a havi tmb-kategóriával együtt.
A korábbi hónapok kategóriáit végignézi, és az üreseket azonnalizza.
A magyar Wikipédiára van tervezve, máshol nem lehet tudni, mit fog csinálni.
(C) Bináris, 2011–2023, ato, 2015
"""

import time
import pywikibot
# from binbotutils import levelez  # Másnak nem szükséges

class Figyelmesbot(object):
    def __init__(self) -> None:
        global hiba
        self.summary = \
            'A havi karbantartási kategóriák egységes elkészítése bottal'
        self.ev = time.localtime()[0]
        self.ho = time.localtime()[1]
        self.nap = time.localtime()[2]
        self.fajta = [
            'Figyelmet igénylő lapok',
            'Csonkok',
            'Forráshivatkozásra váró lapok',
            'Lektorálandó lapok',
            'Megkérdőjelezett nevezetességű lapok',
            'Vitatott semlegességű lapok',
            'Szócikkek halott külső hivatkozásokkal',
            ]
        self.honapok =  [
            'januárjából',
            'februárjából',
            'márciusából',
            'áprilisából',
            'májusából',
            'júniusából',
            'júliusából',
            'augusztusából',
            'szeptemberéből',
            'októberéből',
            'novemberéből',
            'decemberéből',
            ]

    def monthtext(self, month: int) -> str:
        return self.honapok[month-1]

    def ment(self, name, text, summary: str) -> None:
        kat = pywikibot.Category(site, name)
        if text == kat.text or text == kat.text + '\n':
            # Az utolsó entert nem olvassa be a text.
            pywikibot.info(f'{kat.title()} – nincs változás')
            return
        try:
            # Teszteléshez:
            # pywikibot.info(name)
            # pywikibot.info(text)
            kat.put(text, summary)
        except:
            # Nem szelektálunk, toolserverről fog futni, e-mailezzen
            hiba =  True

    def havikat(self, year: int, month: int) -> None:
        """A havi gyűjtőkategória előállítása."""
        neve = f'{self.fajta[0]} {year} {self.monthtext(month)}'
        tartalma = \
            '{{rejtett kategória}}\n\n[[Kategória:Figyelmet igénylő lapok '
        tartalma += f'hónapok szerint| {year} {month:02d}]]\n'
        self.ment(neve, tartalma, self.summary)

    def kiskatok(self, melyik: int, year: int, month: int) -> None:
        """A négy havi kategória előállítása."""
        neve = f'{self.fajta[melyik]} {year} {self.monthtext(month)}'
        sablon = \
            '\n{{Megkérdőjelezett nevezetességű lapok kategóriáinak fejléce}}'\
            if neve.startswith('Megkérdőjelezett') else ''
        tartalma = '{{rejtett kategória}}'
        tartalma += sablon
        tartalma += '\n\n[[Kategória:Figyelmet igénylő lapok '
        tartalma += f'{year} {self.monthtext(month)}]]\n'
        tartalma += f'[[Kategória:{self.fajta[melyik]} hónapok szerint| '
        tartalma += f'{year} {month:02d}]]\n'
        self.ment(neve, tartalma, self.summary)

    def tmb(self, year: int, month: int) -> None:
        """Törlési megbeszélések (elég létrehozni, a törlésük esélytelen)."""
        neve = f'Törlési eljárások {year} {self.monthtext(month)}'
        tartalma = '{{rejtett kategória}}\n\n[[Kategória:Törlési eljárások| '
        tartalma += f'{year}-{month:02d}]]\n'
        self.ment(neve, tartalma, self.summary)

    def feldolgoz(self, year: int, month: int) -> None:
        self.havikat(year, month)
        for melyik in range(1, len(self.fajta)):
            self.kiskatok(melyik, year, month)
        self.tmb(year, month)

    def azonnaliz(self, kat: pywikibot.Category) -> None:
        purgesummary = \
            'Üres, elavult karbantartó kategória. A bot törlésre jelöli.'
        try:
            oldtext = kat.text
        except:
            hiba = True
            oldtext = ''
            # Elvileg nem lehet ilyen, mert akkor hogy lenne a kategóriában?
        if '{{azonnali|Üres' not in oldtext:
            text = '{{azonnali|Üres, elavult karbantartó kategória|~~~~}}\n'
            text += oldtext
            self.ment(kat.title(), text, purgesummary)

    def takarit(self, ev: int, ho: int) -> None:
        supercat = pywikibot.Category(site,
                                     'Figyelmet igénylő lapok hónapok szerint')
        for havi in supercat.subcategories():
            neve = havi.title()
            if neve.startswith('Kategória:Figyelmet'):
                # Négy tematikus kat. kizárva
                dat = neve[len('Kategória:' + self.fajta[0]):]
                if int(dat[1:5]) < ev or int(dat[1:5]) == ev and \
                                self.honapok.index(dat[6:]) < ho - 1:
                    nemkell = True
                    print()
                    pywikibot.info(f'\03<<lightgreen>>{neve}\03<<default>>')
                    # Megtaláltuk az ellenőrizendő havi gyűjtőkategóriát.
                    for kat in havi.subcategories():
                        pywikibot.info(kat.title())
                        if kat.isEmptyCategory():
                            # Erre kell tenni egy azonnalit.
                            pywikibot.info('*******ÜRES')
                            self.azonnaliz(kat)
                        else:
                            # Ha van nem üres alkategória, a főkategória marad.
                            nemkell = False
                    if nemkell:
                        pywikibot.info('*******ÜRES havi kategória')
                        self.azonnaliz(havi)

    def napkepe_havi(self, ev: int, ho: int) -> None:
        honeve = str(ev) + '-' + ('0' + str(ho))[-2:]
        oldal = pywikibot.Page(site, f'Wikipédia:A nap képe/{honeve}')
        text = '{{napképe-galéria|%s}}\n[[Kategória:A nap képe]]' % honeve
        comment = 'A havi gyűjtőoldal elkészítése bottal'
        if text != oldal.text:
            oldal.put(text, comment)

    def run(self) -> None:
        ev  = self.ev
        ho  = self.ho
        nap = self.nap
        self.feldolgoz(ev, ho)
        self.takarit(ev, ho)
        if nap > 25:
            ho += 1
            if ho > 12:
                ho -= 12
                ev += 1
            self.napkepe_havi(ev, ho)
            self.feldolgoz(ev, ho)

if __name__=="__main__":
    try:
        site = pywikibot.Site()
        hiba = False
        fatal = True
        bot = Figyelmesbot()
        bot.run()
        fatal = False
    finally:
        # levelez(fatal, hiba)
        pass