Thành viên:Plantaest/Nháp 27
Giao diện
protect.py
from pywikibot import Site, User, Page
from datetime import timedelta
# Init variables
site = Site()
tags = ['mw-undo', 'mw-rollback', 'mw-manual-revert']
# Trả về danh sách các trang cần khóa: { title, revertEditNum, protection }
# Là các trang có ít nhất 2 sửa đổi lùi trong 10 ngày gần nhất
# Không tính các sửa đổi lùi lại chính mình
# Không tính sửa đổi mà ngay trước là 1 sửa đổi lùi khác?
def getPagesNeedToProtect():
end_time = site.server_time() - timedelta(hours = 24, minutes = 0)
feed = site.recentchanges(end = end_time, bot = False, namespaces = [0, 1])
# 1. Lấy danh sách các tên trang của sửa đổi lùi
titles = []
for edit in feed:
if any(x in tags for x in edit['tags']):
titles.append(edit['title'])
uniqueTitles = set(titles)
# 2. Duyệt qua danh sách tên trang
result = []
for title in uniqueTitles:
page = Page(site, title)
revertEditNum = 0
for rev in page.revisions(endtime = site.server_time() - timedelta(days = 10)):
if any(x in tags for x in rev['tags']):
# Không xét các sửa đổi lùi lại sửa đổi của mình ngay trước đó
parentRev = page._revisions.get(rev['parentid'])
if parentRev and rev['user'] != parentRev.user:
revertEditNum += 1
if revertEditNum >= 2:
result.append({ 'title': title, 'revertEditNum': revertEditNum, 'protection': page.protection() })
print('.', end = '', flush = True)
result.sort(key = lambda p: p['revertEditNum'], reverse = True)
return result
def report():
reportPage = Page(site, 'Thành viên:Plantaest/Nháp 25')
pages = getPagesNeedToProtect()
text = ''
for page in pages:
if 'edit' in page['protection']:
text += '# {{Pagelinks|%s}} / Revert edits: %s / {{Tình trạng khóa|%s}}\n' % (page['title'], page['revertEditNum'], page['title'])
else:
text += '# \'\'\'{{Pagelinks|%s}}\'\'\' / Revert edits: %s\n' % (page['title'], page['revertEditNum'])
reportPage.text = text
reportPage.save(summary = 'Trang cần khóa.', minor = True)
report()