我想回滚某个IP地址已编辑的每个页面,并删除他们所做的任何页面。
如何使用机器人或插件甚至默认功能来执行此操作?我找到了机器人文档(here),但是无法找到任何源代码来获取用户贡献并回滚。
感谢您的帮助!这应该最好是PHP。
答案 0 :(得分:2)
我们遇到了同样的问题,最后我创建了一个SQL脚本。看这里。我只尝试了两次,它对我有用。以下是脚本的链接。
http://www.gc-k.org/index.php/Cleaning_up_after_Vandals_%28Media_Wiki_Mass_Rollback%29
这是脚本本身。 在使用之前更改数据库属性。第一个命令行参数应该是用户的名称或IP。
echo off
clear
USER=$1
DB_USR=XXX
DB_PWD=XXX
DB_NAME=XXX
echo "For all pages affected by $USER activities set last revision to the last untouched one"
mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="update page p set p.page_latest=( SELECT max(r.rev_id) FROM revision r WHERE r.rev_page=p.page_id and r.rev_user_text!='$USER' ) where p.page_id in (select distinct r2.rev_page from revision r2 where r2.rev_user_text='$USER')"
echo "For all pages make sure that page len is set equal to revision len"
mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="update page p set p.page_len=( SELECT r.rev_len FROM revision r WHERE r.rev_page=p.page_id and r.rev_id=p.page_latest )"
echo "Delete revisions done by $USER"
mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="delete from revision where rev_user_text='$USER'"
echo Delete $USER from the recent changes
mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="delete from recentchanges where rc_user_text='$USER'"
# Optional - clear cache
# mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="delete FROM `objectcache`"
# mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="delete FROM `querycache`"
# mysql $DB_NAME --user=$DB_USR --password=$DB_PWD --execute="delete FROM `querycachetwo`"
运行脚本后,您必须在浏览器中重新加载页面时按住SHIFT键。否则将呈现缓存版本,您将不会注意到实际发生了回滚。
答案 1 :(得分:2)
显式编写Extension:Nuke以删除给定用户一次创建的所有页面。
我认为没有工具可以删除或恢复一个用户所做的所有贡献,但只需点击一下就可以编辑rollback个脚本。另请参阅Manual:Combating vandalism。
答案 2 :(得分:1)
根据Stan Sokolov的SQL查询,我设法在我的wiki中清理了一个可怕的混乱 - 我没有监视它半年,它充满了垃圾邮件。 我必须从特定日期开始清理它。
如果您打算尝试相同,请先备份 - 这些SQL查询可能会破坏您的wiki,杀死小猫并导致怀孕。
在此示例中,“tr_”是我的前缀,“189”是最后一个好的页面ID,“41”是最后一个好用户ID,“20130215152547”是第一个垃圾邮件输入日期。
#Update page state to last good before the date
UPDATE tr_page p SET p.page_latest=( SELECT MAX(r.rev_id) FROM tr_revision r
WHERE r.rev_page=p.page_id
AND rev_timestamp <20130215152547) WHERE p.page_id IN
(SELECT r2.rev_page FROM tr_revision r2 WHERE rev_timestamp >=20130215152547);
#Update page length to match actual
UPDATE tr_page p SET p.page_len=( SELECT r.rev_len FROM tr_revision r WHERE
r.rev_page=p.page_id AND r.rev_id=p.page_latest );
#Clean up spam revisions
DELETE FROM tr_revision WHERE rev_timestamp >=20130215152547;
#Clear recent changes
DELETE FROM tr_recentchanges WHERE rc_timestamp >=20130215152547;
#Block all new bad users from ever entering wiki with this login
UPDATE tr_user SET
user_password = '',
user_newpassword = '',
user_email = '',
user_token = ''
WHERE user_id>41;
#Delete pages, staring from the last good id
DELETE FROM tr_page WHERE page_id>189;
#Also, you will need TO clean TABLE tr_pagelinks.
#You will have to do it manually. It's easy, use some editor
#like PHPMyAdmin or SQLyog
#Clean cache
DELETE FROM `tr_objectcache`;
DELETE FROM `tr_querycache`;
DELETE FROM `tr_querycachetwo`;
答案 3 :(得分:0)
你可以明确地pywikipediabot做到这一点,不应该太难。
答案 4 :(得分:0)
如果您不想为机器人编写代码,可以使用Navigation Popups,它只需一次点击破坏版,就可以快速恢复50次编辑。