Gebruiker:Edoderoobot/nl-mod-activiteit.py

# -*- coding: utf-8 -*-
# Author Simon Bijl, Edo de Roo, user:bdijkstra
# 2015, MIT-License

import sys
import datetime
from datetime import datetime, date, time
from itertools import islice
import pywikibot
from pywikibot.data.api import ListGenerator

debugmode = False
site = pywikibot.getSite(u'nl')
editLimit = 500

now = site.getcurrenttime()
oneYearAgo = now.replace(now.year - 1)

def main():
    wikiString = u'Onderstaande tabel geeft een indicatie van de activiteit van een moderator. De vermelde aantallen zijn het aantal niet-verwijderde bijdragen van de moderator in het afgelopen jaar. Alleen moderatoren met minder dan %d van zulke bijdragen worden getoond. Laatste update: {{subst:#timel:Y-m-d H:i (T)}}. \n\n{| class="wikitable sortable"\n! Gebruikersnaam || Aantal\n' % editLimit
    sysopNames = getSysopNames() # Get sysop list

    # Process for each sysop:
    for username in sysopNames:
        editCount = lastYearEditCount(username)
        if editCount < editLimit:
            tableRow = u'|-\n| [[Gebruiker:%(u)s|%(u)s]] || style="text-align:right" | %(ec)s\n' % { 'u':username, 'ec':editCount }
            wikiString += tableRow
            if debugmode:
                print(tableRow)
    wikiString += u'|}\n\n[[Categorie:Wikipedia:Moderatoren]]\n'
 
    if not debugmode: 
        pywikibot.Page(site, u'Wikipedia:Regelingen_rond_moderatoren/Activiteit_moderatoren').put(wikiString, comment=u'Update') #Save page

# Returns the user's number of (non-deleted) edits in the last year,
# capped at `editLimit`+2
def lastYearEditCount(username):
    user = pywikibot.User(site, username)
    contributions = user.contributions(total=editLimit+2, end=oneYearAgo)
    editCount = 0
    for contribution in contributions:
        editCount += 1
    return editCount

# Returns list with usernames of all sysops active on site
def getSysopNames():
    array = []
    users = ListGenerator('allusers', site=site, augroup='sysop')
    for user in users:
        array.append(user['name'])
    return array

if __name__ == '__main__':
    try:
        main()
    finally:
        pywikibot.stopme()