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 5 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. 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 = 5)): 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']: protectionText = ' / Protection: {}'.format(page['protection']['edit']) text += '# {{Pagelinks|%s}} / Revert edits: %s%s\n' % (page['title'], page['revertEditNum'], protectionText) 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, botflag = True) report()