User:MordantMaenad/scripts/welcomeusers2.py

From RationalWiki
Jump to navigation Jump to search
"""
The difference between this and welcomeusers.py is that this accesses the user
creation log directly. This process is much faster, but it does not catch
unregistered (IP) editors, and is thus less inclusive.

by Miranda van Etten (User:Blue on RationalWiki)
"""
import wikipedia, userlib

def getUserContrib(userName, wikiPage):
    """
    Returns [None] if user has not made any revisions, returns set of sets
    containing user's revision ID and previous revision ID for diff
    purposes.
    """
    result = []
    site = wikipedia.getSite('en', 'rationalwiki')
    pageHist = wikiPage.fullVersionHistory()
    for marker, l in enumerate(pageHist):
        if l[2] == userName:
            prevRev = pageHist[marker - 1]
            result.append([prevRev[0], l[0]])
    return result or None

def getContribList(userName):
    """
    Returns a list of pages a user has edited (the Page object).
    """
    site = wikipedia.getSite('en', 'rationalwiki')
    user = userlib.User(site, userName)
    return [t[0] for t in user.contributions()]

def __main__():
    site = wikipedia.getSite('en','rationalwiki')
    uNum = wikipedia.input(u'Latest users to check: ')
    try:
        uNum = int(uNum)
    except ValueError:
        uNum = wikipedia.input(u'Latest users to check (defaults to 25): ')
        try:
            uNum = int(uNum)
        except ValueError:
            wikipedia.output(u'You are an imbecile. Defaulting.')
            uNum = 25
    wikipedia.output(u'Getting user creation log...')
    log = site.logpages(uNum, 'newusers')
    try:
        signature = unicode(wikipedia.input(u'Signature (defaults to none, type "exit" to leave): '))
    except UnicodeEncodeError:
        signature = unicode(wikipedia.input(u'One more time, with feeling: '))
    finally:
        pass
    if signature == u'exit':
        wikipedia.stopme()
        exit()
    for item in log:
        userCheck = user = item[1]
        talkPage = wikipedia.Page(site, u'User talk:' + userCheck)
        if not talkPage.exists():
            wikipedia.output(u'----------------')
            wikipedia.output(u'User:' + user + u':')
            last = getContribList(user)
            if last == []:
                wikipedia.output(u'No contributions.')
            else:
                wikipedia.output(u'Last edit was to ' + str(last[0]))
                if wikipedia.input(u'Show user contribs? (type "more" to show, enter = skip) ') == u'more':
                    wikipedia.output(u'Contributions:')
                    for item in last:
                        cl = getUserContrib(user, item)
                        if cl == None:
                            wikipedia.output(u"User's contribs deleted.")
                        else:
                            for edit in cl:
                                wikipedia.output(u'In ' + str(item) + u':')
                                wikipedia.showDiff(item.getOldVersion(edit[0]), item.getOldVersion(edit[1]))
            wikipedia.output(u'User is not welcomed. (enter = skip, type "exit" to leave)')
            action = wikipedia.input(u'Create page with: ')
            if action != u'' and action != u'exit':
                comment = wikipedia.input(u'Edit comment (defaults to "Welcome!"): ')
                if comment == u'':
                    comment = u'Welcome!'
                try:
                    talkPage.put(unicode(action) + u' ' + signature + u' ~~~~~', unicode(comment), False, False)
                except UnicodeEncodeError:
                    wikipedia.output(u"Please don't hurt the encoding.")
                    pass
                except wikipedia.PageNotSaved:
                    wikipedia.output(u'Error: page not saved.')
                    pass
                finally:
                    pass
                wikipedia.output(u'----------------')
                wikipedia.output(u'Searching...')
            elif action == u'exit':
                wikipedia.stopme()
                exit()
    wikipedia.output(u'Finished.')

if __name__ == "__main__":
    try:
        __main__()
    finally:
        wikipedia.stopme()
        exit()