User:MordantMaenad/scripts/welcomeusers2.py
From RationalWiki
< User:MordantMaenad(Redirected from User:Blue/scripts/welcomeusers2.py)
""" 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()