User:Surjection/inactive sysops.py

from pywikibot import Site, Page, Category, Timestamp from datetime import datetime, timedelta

"removal of admin rights without prejudice (i.e. returnable upon request) due to inactivity (no admin tools used in the past five years)"

"""

Admin rights
Hi, I have removed your admin rights due to our policy on admin inactivity, as you have not used any admin tools in the past five years. This removal is without prejudice and you can request your admin rights to be restored at any time. ~ """

enwikt = Site("en", fam="wiktionary") enwikt.login

now = datetime.now cutoff = now.replace(year=now.year - 5) cutoff_iso = cutoff.isoformat cutoff_ts = Timestamp.fromISOformat(cutoff_iso)

print("Cutoff:", cutoff_ts)

DEBUG = True CONTRIB_UPPER_LIMIT = 10000

admins = [admin['name'] for admin in enwikt.allusers(group='sysop')]

for username in admins: if username in {"Abuse filter"}: # never active, that nerd continue

def is_active(username): for event in enwikt.logevents(user=username, end=cutoff_ts): action = event.action if "abusefilter" in action: if DEBUG: print(username.ljust(50) + "modified abuse filters") return True if action in {"block", "reblock", "unblock",   # self-explanatory "delete", "restore",             # page (un)deletion "protect", "unprotect", "modify", # page (un)protection or modifying a protection "event",                         # deletion of log events "revision",                      # revision (un)deletion "rights"                         # changing of user rights }:               if DEBUG: print(username.ljust(50) + "performed admin action {}".format(action)) return True if action in {"move", "move_redir"} and event.suppressedredirect: if DEBUG: print(username.ljust(50) + "moved page without redirect") return True

for contribs, page in enumerate(enwikt.preloadpages(Page(enwikt, edit["title"]) for edit in enwikt.usercontribs(user=username, end=cutoff_ts))): if contribs > CONTRIB_UPPER_LIMIT: if DEBUG: print(username.ljust(50) + "has been an active contributor") return True try: if page.ns in {8}: if DEBUG: print(username.ljust(50) + "edited a system message {}".format(page.title)) return True except AttributeError: continue if page.protection.get('edit', None): if page.protection.get('edit', None) != 'autoconfirmed': if DEBUG: print(username.ljust(50) + "edited a protected page {}".format(page.title)) return True

return False

if not is_active(username): print(username)