Purple exclamation mark.svg Planning the future of Botwiki! - Help us bring Botwiki up to date, contribute to our strategy discussion, add bot scripts, and contribute manuals, guides, and tutorials! Almost anything related to bots, particularly those used to edit mediawiki, is welcome.

Red exclamation mark.svg UNABLE TO EDIT? - We've experienced attacks by spambots lately and now require you to confirm your e-mail before you can edit (go to your preferences, enter an e-mail address, and request a confirmation e-mail, then go to your e-mail and click on the confirmation link). We also require new accounts to make a few edits and wait a few minutes before before you can create a page; however, if this is a problem contact us in #botwiki and we can manually confirm your account. Sorry for the inconvenience.

Python:Benvenuto

From Botwiki
(Redirected from Python:Benvenuto.py)
Jump to: navigation, search
Questo è il codice del bot (quello che parte da "#!/usr/bin/python"), per la spiegazione guarda qui!
Per le parolacce guarda invece qui (se sei admin, e se non lo sei chiedi al Webmaster per diventarlo). Prese le parolacce, sostituisci elencoaf = [], elencogz = [] e elencovarie = [] con le parolacce.
N.B.: This script is an old italian version of Python:Welcome.py, please use it.
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

"""
Benvenuto.py è uno script che serve per dare il benvenuto ai nuovi utenti.

Esso scarica il log dei nuovi utenti (fino ad un limite predefinito), controlla che il nick
non contenga una parola presente nei tre elenchi presenti nello script e, per ogni utente
che ancora non ha pagina di discussione, crea il seguente testo:

{{benvenuto}} --~~~~

Nel caso in cui il nick non sia adatto, vi chiederà che fare.

Le parole negli elenchi sono tante ed è possibile che il bot sbagli, in tal caso
scritemi qui: http://it.wikipedia.org/wiki/Discussioni_utente:Filnik dicendo a che utente
si è sbagliato

README:
Per farlo funzionare basta digitare benvenuto.py

Ci sono anche dei comandi aggiuntivi, ovvero:

-limit:     - permette di dire al bot quanti utenti controllare (e poi dare il benvenuto)
            di default sono 500
-always     - permette di inserire direttamente il template {{AvvisoBloccoTemporaneo}}
            e di salvare su [[Utente:Filbot/Report]] il nick affinché passi un amministratore
            per bloccare l'utente (quando chiede di bloccare, lascia infatti quell'avviso
            e basta :) )
-admin      -invece di lasciare AvvisoBloccoTemporaneo, lascia BloccoNomeUtente (disponibile
            solo per la modalità manuale) e non lascia il log.
            
N.B. In modalità MANUALE (non admin) lascia di default il template {{BloccoNomeUtente}} e sta a voi decidere se
metterlo o no (salverete comunque il nick su [[Utente:Filbot/Report]] e un admin verrà a bloccarlo
successivamente)
"""
#
#
# (C) Alfio, Pietrodn, Filnik it.wikipedia.
#

import urllib, re
import wikipedia
 
# Numero di utenti da controllare
limit = 500

# Metto una variabile per permettere di definire il limite di utenti utilizzando un parametro
for arg in wikipedia.handleArgs():
    if arg.startswith('-limit'):
        if len(arg) == 6:
            limit = int(wikipedia.input(u'Quante pagine vuoi controllare?'))
        else:
            limit = int(arg[7:])

# URL del log dei nuovi utenti
url = "http://%s/w/index.php?title=Speciale:Log&type=newusers&user=&page=&limit=%d" % (wikipedia.getSite().hostname(), limit)
 
# Utilizza una regex per trovare i link come questo (e la class attribute e' anche opzionale)
#<a href="/w/index.php?title=Discussioni_utente:Urizon9&action=edit" class="new" title="Discussioni utente:Urizon9">Discussione</a>
 
regexp = '</a> \(<a href=\"/w/index.php\?title=Discussioni_utente:(.*?)&action=edit'
 
# Mofica la string user-agent
class AppURLopener(urllib.FancyURLopener):
    version = "Alfio-Filnik-Pietrodn/2.0"
urllib._urlopener = AppURLopener()
 
# Leggo il log dei nuovi utenti
print "Sto prendendo il log dei nuovi utenti (gli ultimi %d)..." % limit
f = urllib.urlopen(url)
text = f.read()
f.close()

r = re.compile(regexp, re.UNICODE)

# Cominciano gli elenchi delle parolacce, da quello af vuol dire da "a" a "f", poi i rimanenti sono "gz" e varie sono le parole che non sono parolacce
# Ma che non vanno bene come nickname. State attenti a non mettere una parola due volte e a mettete tutte le parole minuscole!
elencoaf = []
elencogz = []
elencovarie = []
# "Attacco" tutti gli elenchi separati in uno unito (separati sono più leggibili)
elenco = elencoaf + elencogz + elencovarie
# Metto le variabili per le risposte nella modalità manuale
blocco = ["B", "b", "Blocco", "blocco", "block", "bloc", "Block", "Bloc"]
saluto = ["S", "s", "Saluto", "saluto", "Welcome", "welcome"]
# Metto dei parametri per permettere al bot di capire quando fermarsi, quando caricare un certo parametro e quando no.
running = True
manuale = True
admin = False
baduser = False
# Definisco "avviso"
avviso = u'{{AvvisoBloccoTemporaneo}}--~~~~'

# Aggiungo il parametro per modificare avviso a seconda che ci sia o meno -admin e aggiungo quello per mettere il bot in automatico.
for arg in wikipedia.handleArgs():
    if arg == '-always':
        manuale = False        
    elif arg == '-admin':
        avviso = u'{{BloccoNomeUtente}}--~~~~'
        admin = True

# Prendo gli utenti e metto i messaggi di benvenuto nelle pagine utente vuote
pos = 0
while 1:
	m = r.search(text, pos)
	if m == None:
		break
	pos = m.end()

        # Definisco username, ovvero i nickname degli utenti trovati nel link
        username = m.group(1)

        # Loop principale, in pratica qua definisco se l'utente vuole agire manualmente o automaticamente
        if manuale == True:
            # Definisco la pagina discussione dell'utente e se ci o meno delle parolacce
            page = u'Discussioni utente:%s' % username
            baduser = False
            for parl in elenco:
                if parl.lower() in username.lower():
                    baduser = True
            # Ecco cosa succede se le parolacce sono incluse nel nickname
            if baduser == True:
                # Metto il while, così, se si sbaglia a digitare viene riproposta la domanda
                while running:
                    print "L'Utente %s ha un nome Inappropiato, che faccio?" % username
                    risposta = wikipedia.input(u"[B]locco o do il [S]aluto?")

                    # Dico al bot che fare se l'utente dici di bloccare l'utente
                    for parol in blocco:
                            if parol in risposta:
                                print "Ora lo blocco..."
                        
                                p = wikipedia.Page(wikipedia.getSite(), page)

                                # Modifico messaggio oggetto
                                wikipedia.setAction("Troll!")
                
                                # Additional check: make a get to prevent the rare case where a discussion page
                                # is created between the newuser log download and now.
                                try:
                                        p.get()
                                except wikipedia.NoPage:
                                        newtext = avviso
                                        p.put(newtext)
                                # Definisco cosa deve fare il bot se il parametro -admin è dato o meno
                                if admin == False:                            
                                    paginetta=wikipedia.Page('it', 'Utente:Filbot/Report')

                                    if paginetta.exists():      
                                        testoattuale=paginetta.get()
                                    else:
                                        testoattuale=''

                                    # Ecco, ora si crea il log del nick inadatto su Utente:Filbot/Report 
                                    paginetta.put(testoattuale + "\n" + "#" + "[[Discussioni utente:" + username + "|" + username + "]] {{subst:LOCALTIME}}", comment = "Aggiunto utente da bloccare", minorEdit = False)
                    
                                    print u"Bloccato!"
                                    running = False
                                elif admin == True:
                                    print u"Bloccato!" 
                                    running = False
                    # Dico ora al bot che fare se invece l'utente dice di salutarlo (la parolaccia è stata usata erroneamente)
                    for parla in saluto:
                            if parla in risposta:
                                print "Ok, allora lo saluto..."

                                # Modifico messaggio oggetto
                                wikipedia.setAction("benvenuto")
                    
                                p = wikipedia.Page(wikipedia.getSite(), page)
 
                                # Additional check: make a get to prevent the rare case where a discussion page
                                # is created between the newuser log download and now.
                                try:
                                        p.get()
                                except wikipedia.NoPage:                   
                                        newtext = u'{{benvenuto}}--~~~~'
                                        p.put(newtext)
                                        print u"Dato il benvenuto!"
                                        running = False    
            elif baduser == False:
                p = wikipedia.Page(wikipedia.getSite(), page)

                # Modifico messaggio oggetto
                wikipedia.setAction("benvenuto")
 
                # Additional check: make a get to prevent the rare case where a discussion page
                # is created between the newuser log download and now.
                try:
                        p.get()
                except wikipedia.NoPage:
                        newtext = u'{{benvenuto}}--~~~~'
                        p.put(newtext)
                        print u"Dato il benvenuto!"
                finally:
                    wikipedia.stopme()
        # Ecco cosa succede invece se il bot viene lanciato con il parametro -always
        # Il funzionamento è quasi uguale al precedente, cambia solo il messaggio
        # Inserito nel qual caso il nickname non sia appropiato
        elif manuale == False:           
            page = u'Discussioni utente:%s' % username
            baduser = False
            for parl in elenco:
                if parl.lower() in username.lower():
                    baduser = True
            if baduser == True:
                print "L'Utente %s ha un nome Inappropiato!" % username
                        
                p = wikipedia.Page(wikipedia.getSite(), page)

                # Modifico messaggio oggetto
                wikipedia.setAction("Troll!")
                
                # Additional check: make a get to prevent the rare case where a discussion page
                # is created between the newuser log download and now.
                try:
                    p.get()
                except wikipedia.NoPage:
                    newtext = avviso
                    p.put(newtext)
                    
                paginetta=wikipedia.Page('it', 'Utente:Filbot/Report')

                if paginetta.exists():      
                    testoattuale=paginetta.get()
                else:
                    testoattuale=''

                paginetta.put(testoattuale + "\n" + "#" + "[[Discussioni utente:" + username + "|" + username + "]] {{subst:LOCALTIME}}", comment = "Aggiunto utente da bloccare", minorEdit = False)
                print u"Bloccato!"
            elif baduser == False:
                p = wikipedia.Page(wikipedia.getSite(), page)

                # Modifico messaggio oggetto
                wikipedia.setAction("benvenuto")
     
                # Additional check: make a get to prevent the rare case where a discussion page
                # is created between the newuser log download and now.
                try:
                        p.get()
                except wikipedia.NoPage:
                        newtext = u'{{benvenuto}}--~~~~'
                        p.put(newtext)
                        print u"Dato il benvenuto!"       
                finally:
                    wikipedia.stopme()
Personal tools
Share