Usuari:Iradigalesc Bot/Canvis.py
Aparença
Aquesta pàgina és obsoleta. Trobareu l'última versió del codi del bot a http://tools.wikimedia.de/~iradigalesc/pywikipedia/bot.py. |
Aquest és el codi que utilitza el bot per revisar els canvis que es produeixen a la Viquipèdia. Cal executar-lo juntament amb la resta d'scripts del Pywikipediabot. No té cap utilitat ja que s'ha de passat mitjançant un script local, però el poso perquè serveixi per donar idees a altra gent o perquè algú expert m'ajudi a trobar-hi errors. És possible que no estigui actualitzat i que estigui usant una versió modificada de l'script:
#!/usr/bin/python # -*- coding: utf-8 -*- """ Script per detectar i notificar les mancances de les noves pàgines creades a la Viquipèdia com per exemple la negreta inicial, les categories, els enllaços interns o per revertir els canvis clarament vandàlics de les pàgines ja creades. Només es revisaran les pàgines noves sense les plantilles {{Inacabat}} o {{Enconstrucció}}. Està pensat per actuar de manera autònoma sense que hi hagi d'intervenir cap humà. Implementat per l'usuari Iradigalesc amb la col·laboració de Pasqual. """ import sys, thread, re, time, irclib from ircbot import SingleServerIRCBot import wikipedia def avisa(titol, usuari, discussio, motiu): try: contingutdiscussio = discussio.get() + u"\n" except wikipedia.IsRedirectPage: contingutdiscussio = u"" except wikipedia.NoPage: contingutdiscussio = u"" if contingutdiscussio == u"": if usuari.count(u".") == 3: if usuari.replace(u".", u"").isdigit(): contingutdiscussio = u"{{subst:Registre}}--~~~~\n" else: contingutdiscussio = u"{{Benvinguda}}--~~~~\n" else: contingutdiscussio = u"{{Benvinguda}}--~~~~\n" if motiu == u"ninapropiat": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Destrucció/Contingut inapropiat/Avís|%s}}" %titol, u"Avís automàtic per destrucció a causa de contingut inapropiat en la pàgina [[%s]]." %titol, minorEdit=False) return if motiu == u"nbreu": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Destrucció/Massa breu/Avís|%s}}" %titol, u"Avís automàtic per destrucció a causa de la brevetat de la pàgina [[%s]]." %titol, minorEdit=False) return if motiu == u"nformat": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Millorar/Avís|%s}}" %titol, u"Avís automàtic de bot en la pàgina [[%s]] per millorar-ne el format de la negreta inicial i dels enllaços interns." %titol, minorEdit=False) return if motiu == u"nnegreta": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Millorar/Negreta/Avís|%s}}" %titol, u"Avís automàtic de bot en la pàgina [[%s]] per millorar-ne el format de la negreta inicial." %titol, minorEdit=False) return if motiu == u"nenllaços": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Millorar/Enllaços/Avís|%s}}" %titol, u"Avís automàtic de bot en la pàgina [[%s]] per millorar-ne el format dels enllaços interns." %titol, minorEdit=False) return if motiu == u"eesborrat": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Revertit/Esborrat|%s}}" %titol, u"Avís automàtic de reverssió de bot en la pàgina [[%s]]." %titol, minorEdit=False) return if motiu == u"einapropiat": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Revertit/Inapropiat|%s}}" %titol, u"Avís automàtic de reverssió de bot en la pàgina [[%s]]." %titol, minorEdit=False) return if motiu == u"introduccio": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/Revertit/Introducció|%s}}" %titol, u"Avís automàtic de reverssió de bot en la pàgina [[%s]]." %titol, minorEdit=False) return if motiu == u"OD": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/OD|%s}}" %titol, u"Avís automàtic de plantilla OD a [[%s]]." %titol, minorEdit=False) return if motiu == u"JD": discussio.put(contingutdiscussio + u"{{subst:Usuari:Iradigalesc Bot/JD|%s}}" %titol, u"Avís automàtic de plantilla JD a [[%s]]." %titol, minorEdit=False) return def introduccio(titol, pagina, usuari, discussio): try: contingut = pagina.get() contingutantic = pagina.getPreviousVersion() except wikipedia.IsRedirectPage: return except wikipedia.NoPage: return if not u"{{Si us plau, no esborreu aquesta línia}}" in contingut: if u"{{Si us plau, no esborreu aquesta línia}}" in contingutantic: pagina.put(contingutantic, u"[[VP:B|Bot]] revertint els canvis de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per suprimir la línia \"{{Si us plau, no esborreu aquesta línia}}\"." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"introduccio") print u"-[[%s]] (editat per %s) s'ha revertit; suprimida plantilla introducció." %(titol, usuari) return def novaimatge(imatge, usuari, discussio): pagina = wikipedia.Page(wikipedia.getSite(), imatge) try: contingut = pagina.get() except wikipedia.IsRedirectPage: return except wikipedia.NoPage: return if contingut == u"": pagina.put(contingut + u"\n{{OD|--~~~~}}", u"[[VP:B|Bot]] afegint la plantilla d'Origen Desconegut a la imatge carregada per [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]])." %(usuari, usuari, usuari, usuari)) avisa(imatge, usuari, discussio, u"OD") print u"-[[%s]] (pujat per %s) s'ha marcat amb OD." %(imatge, usuari) return if not u"{{Justificaci" in contingut: pagina.put(contingut + u"\n{{JD|--~~~~}}", u"[[VP:B|Bot]] afegint la plantilla de Justificació Desconeguda a la imatge carregada per [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]])." %(usuari, usuari, usuari, usuari)) avisa(imatge, usuari, discussio, u"JD") print u"-[[%s]] (pujat per %s) s'ha marcat amb JD." %(imatge, usuari) return def novaedicio(titol, pagina, usuari, discussio, exprVulgars): try: contingut = pagina.get() contingutantic = pagina.getPreviousVersion() except wikipedia.IsRedirectPage: return except wikipedia.NoPage: return if 10*len(contingut) < len(contingutantic): pagina.put(contingutantic, u"[[VP:B|Bot]] revertint els canvis de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per suprimir gran part del contingut." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"eesborrat") print u"-[[%s]] (editat per %s) s'ha revertit; supressió de contingut." %(titol, usuari) return if re.search(exprVulgars, contingut +r"", re.I) is not None: if re.search(exprVulgars, contingutantic +r"", re.I) is None: pagina.put(contingutantic, u"[[VP:B|Bot]] revertint els canvis de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per afegir contingut inapropiat." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"einapropiat") print u"-[[%s]] (editat per %s) s'ha revertit; afegit contingut inapropiat." %(titol, usuari) return def novapagina(titol, pagina, usuari, discussio, exprVulgars): try: contingut = pagina.get() except wikipedia.IsRedirectPage: return except wikipedia.NoPage: return ignora = r"(\{\{([Dd]esambiguaci|[Ii]nacabat|[Ee]nconstrucci)|[Ll]listat?)" if re.search(ignora, contingut +r"") is not None: return if re.search(exprVulgars, contingut +r"", re.I) is not None: if len(contingut) < 1000: pagina.put(u"{{Usuari:Iradigalesc Bot/Destrucció/Contingut inapropiat}}" + u"\n" + contingut, u"[[VP:B|Bot]] marcant pàgina de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per destruir automàticament degut a contingut inapropiat." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"ninapropiat") print u"-[[%s]] (creat per %s) s'ha marcat per destruir; contingut inapropiat." %(titol, usuari) return if len(contingut) < 100: pagina.put(u"{{Usuari:Iradigalesc Bot/Destrucció/Massa breu}}" + u"\n" + contingut, u"[[VP:B|Bot]] marcant pàgina de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per destruir automàticament degut a la seva brevetat." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"nbreu") print u"-[[%s]] (creat per %s) s'ha marcat per destruir; massa breu." %(titol, usuari) return negreta = enllacos = False if not u"'''" in contingut: if not "[[" + titol + "]]" in contingut: negreta = True if not u"[[" in contingut: enllacos = True if negreta and enllacos: pagina.put(u"{{Usuari:Iradigalesc Bot/Millorar}}" + u"\n" + contingut, u"[[VP:B|Bot]] marcant pàgina de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per millorar a causa de la negreta inicial i dels enllaços interns." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"nformat") print u"-[[%s]] (creat per %s) s'ha marcat per millorar-ne el format; negreta i enllaços." %(titol, usuari) return else: if negreta: pagina.put(u"{{Usuari:Iradigalesc Bot/Millorar/Negreta}}" + "\n" + contingut, u"[[VP:B|Bot]] marcant pàgina de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per millorar a causa de la negreta inicial." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"nnegreta") print u"-[[%s]] (creat per %s) s'ha marcat per millorar-ne el format; negreta." %(titol, usuari) return if enllacos: pagina.put(u"{{Usuari:Iradigalesc Bot/Millorar/Enllaços}}" + "\n" + contingut, u"[[VP:B|Bot]] marcant pàgina de [[User:%s|%s]] ([[Special:Contributions/%s|contribucions]] · [[User talk:%s|discussió]]) per millorar a causa dels enllaços interns." %(usuari, usuari, usuari, usuari)) avisa(titol, usuari, discussio, u"nenllaços") print u"-[[%s]] (creat per %s) s'ha marcat per millorar-ne el format; enllaços." %(titol, usuari) return class TestBot(SingleServerIRCBot): def __init__(self, channel, nickname, server, port=6667, reconnection_interval=5): SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname) self.channel = channel self.nickname = nickname self.angus = 0 def keepitgoin(self): printedyet = False while True: if not self.connection.is_connected(): printedyet = False self.connection.disconnect() else: if not printedyet: printedyet = True pass time.sleep(30) def on_nicknameinuse(self, c, e): c.nick(c.get_nickname() + '_') def on_welcome(self, c, e): c.join(self.channel) thread.start_new_thread(self.keepitgoin, ()) def on_join(self, c, e): pass def on_kick(self, c, e): nick = nm_to_n(e.source()) c.join(self.channel) def on_privmsg(self, c, e): orig = (e.arguments()[0]).decode('utf-8', 'replace') lastgots.append(time.time()) lastgots.remove(lastgots[0]) pass def on_pubmsg(self, c, e): missatge = (e.arguments()[0]).decode('utf-8', 'replace') titol = missatge.split(u"[[")[1] titol = titol[3:].split(u"]]")[0] titol = titol[:-3] if titol == u"Viquipèdia:Pàgina de proves": return usuari = missatge.split(u"5*")[1] usuari = usuari[5:].split(u"5*")[0] usuari = usuari[:-3] administradors = (u"Barcelona", u"Brion VIBBER", u"Dúnadan", u"Felato", u"Friviere", u"Joanjoc", u"Jordicollcosta", u"Lohen11", u"Makinal", u"Martorell", u"Oersted", u"Paucabot", u"Pepetps", u"Plàcid Pérez Bru", u"SMP", u"Vriullop", u"Xevi", u"Xtv") for administrador in administradors: if administrador == usuari: return pagina = wikipedia.Page(wikipedia.getSite(), titol) discussio = wikipedia.Page(wikipedia.getSite(), u"User talk:" + usuari) if titol == u"Viquipèdia:Introducció": introduccio(titol, pagina, usuari, discussio) return if titol == u"Viquipèdia:Introducció/Simple": introduccio(titol, pagina, usuari, discussio) return exprVulgars = r"\b(put(ad)?[ae]s?|fuck(ing|e[dr])?|culo?s?|fot(re|[ie]n)|(foll|jod)[ae][nr]|cacalane?s|vi[xs]ca lo regne de valencia|tont[ao]s?|mi?erd[ae]s?)\b" if pagina.namespace() == -1: if "upload" in titol: imatge = missatge.split(u"[[")[2] imatge = imatge.split(u"]]")[0] imatge = imatge[3:] imatge = imatge[:-3] novaimatge(imatge, usuari, discussio) espais=[1,5,7,9,11,13,14,15,101,103] for espai in espais: if pagina.namespace() == espai: return if pagina.namespace() == 2: if titol == u"Usuari:" + usuari: return if u"Usuari:" + usuari + u"/" in titol: return if pagina.namespace() == 3: if titol == u"Usuari Discussió:" + usuari: return if u"Usuari Discussió:" + usuari + u"/" in titol: return exprVulgars = "" opcions = missatge.split(u"]]")[1] opcions = opcions.split(u"02http://")[0] if u"N" in opcions: novapagina(titol, pagina, usuari, discussio, exprVulgars) else: novaedicio(titol, pagina, usuari, discussio, exprVulgars) def main(): channel = '#ca.wikipedia' nickname = 'IradiBot' while True: bot = TestBot(channel, nickname, 'irc.wikimedia.org', 6667) bot.start() if __name__ == '__main__': try: estat = wikipedia.Page(wikipedia.getSite(), u"Usuari:Iradigalesc Bot/Estat") estat.put(u"Funcionant", u"[[VP:B|Bot]] en marxa.") main() finally: estat = wikipedia.Page(wikipedia.getSite(), u"Usuari:Iradigalesc Bot/Estat") estat.put(u"Aturat", u"[[VP:B|Bot]] aturat.") wikipedia.stopme()