用户:Horizon Bot
本机器人由 Horizon98 维护,如果您对该机器人有建议或任何问题,请前往 Horizon98的讨论页 发起讨论。
贡献
- 修正了各个页面的跨语言链接(已于2021年1月26日全部修正过)。
- 更新了所有可被赠出的物品页面的NPC偏好(已于2021年1月30日全部更新过)。
- 修正重定向词条的链入页面或者折腾其他功能。
关于本机器人
使用Pywikibot框架,由于本人编程能力不足,调用了现成的脚本。不排除未来可能会对脚本进行小修改后使用。
采用半自动方式编辑,即机器人提交更改前进行手动确认。
如何使用Pywikibot
MediaWiki上有很多页面可供您参考,我主要参考了以下页面:
- 安装PywikiBot
- 在第三方网站上使用PywikiBot的快速上手指南
- 在第三方网站上使用PywikiBot
- 用于替换文本的replace.py的说明文档
- 用于自动更正或添加跨语言链接的interwiki.py的说明文档
- 所有脚本列表
一个简单的安装说明
如果你也想运行一个属于自己的Bot,请务必时刻关注Bot做出的编辑是否有误,如果Bot破坏了大量页面,首先会给这个Wiki带来很大的影响,其次还可能被管理员封号。
另外Bot账号应当与您的主账号不同,并需要及时向管理员申请将账号迁移到Bot用户组,以防Bot编辑时在“最近更改”这个页面刷屏。
下面的步骤是针对Windows的,也仅在本网站上测试过:
1. 已经安装Python3并配置环境变量。
2. 下载并解压PywikiBot的相关文件。
3. 打开解压后的文件夹,依次打开 pywikibot -> families 文件夹,在families文件夹下新建一个名为 stardewvalleywiki_family.py
的文件,使用适用于Python文件的编辑器打开并编辑其中的内容。配置文件如下(直接复制下列文本可能会有缩进问题,可参考families文件夹中的其他文件进行编辑):
# -*- coding: utf-8 -*- from pywikibot import family class Family(family.Family): name = 'stardewvalleywiki' # family的名称,与这个文件名称的前缀应当一致。 langs = { # 该网站各个语言的子域名 'de': 'de.stardewvalleywiki.com', 'en': 'stardewvalleywiki.com', 'es': 'es.stardewvalleywiki.com', 'fr': 'fr.stardewvalleywiki.com', 'it': 'it.stardewvalleywiki.com', 'ja': 'ja.stardewvalleywiki.com', 'ko': 'ko.stardewvalleywiki.com', 'hu': 'hu.stardewvalleywiki.com', 'pt': 'pt.stardewvalleywiki.com', 'ru': 'ru.stardewvalleywiki.com', 'tr': 'tr.stardewvalleywiki.com', 'zh': 'zh.stardewvalleywiki.com' } def scriptpath(self, code): return '/mediawiki' # 网站上api.php页面的路径 def protocol(self, code): return 'HTTPS' # 使用https协议连接 def version(self, code): return "1.35.1" # 该网站正在使用的mediawiki版本
需要说明的是,return '/mediawiki'
这行中是告知本网站的api接口位于/mediawiki路径下,即这个网页。有的网站会直接放在根目录下,即类似于 xxwiki.com/api.php
的网址,此时你需要将这一行修改为 return ''
。
最后一行1.35.1的版本号,你可以在Special:version这个页面找到,需要与当前网站使用的MediaWiki版本一致。
4. 打开解压后文件夹的根目录,即有 pwb.py 这个文件的目录,新建一个名为 user-config.py
的文件。使用适用于Python文件的编辑器打开并编辑其中的内容。配置文件如下(下列的配置仅适用于中文站点,其他语言的站点需要根据 stardewvalleywiki_family.py 中的配置将下面的内容稍作修改):
mylang = 'zh' family = 'stardewvalleywiki' usernames['stardewvalleywiki']['zh'] = '账号名称' authenticate['zh.stardewvalleywiki.com'] = ('账号名称','账号密码') noisysleep = 30.0
其中nosiysleep这个参数设置的应该是Bot提交编辑更改后,等待网站响应的最大时间(秒),超时后会重试。你也可以根据自己的需要进行修改。
5. 打开终端工具(Powershell、Windows Terminal等等),先用cd命令定位到你解压一开始下载的文件的目录(目录中有名为 pwb.py 的文件)。
6. 输入 python pwb.py login
尝试登录,第一次登录时需要输入账号密码。如果后面输出 Logged in on stardewvalleywiki:zh as xxx
就说明登录成功了。
7. 试着使用你的机器人做出一次编辑。找到一个只有很少页面的分类(例如:Category:餐桌)。输入以下命令:
python pwb.py add_text -cat:餐桌 -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up
然后在这个分类下的所有页面最顶部,会被机器人添加“This is a Test”的文字。(记得手动去删掉。)
一个简单的使用说明
个人用了这么久,觉得最常用的还是replace.py,可以批量替换文本。(当然Special:替换文本这个页面应该也能做到且效率更高,但是需要管理员权限。)
就用这个脚本举例吧。(个人其实对这方面并不是特别了解,因此最好去参考官方文档)
一行命令应该长这样:python pwb.py 脚本名称 参数
先举两个例子:
python pwb.py replace -page:救生圈 "信件" "邮件"
上面这行命令的意思是将“救生圈”这个页面中所有“信件”替换成“邮件”。
python pwb.py replace -namespace:0 -start "路人甲" "路人乙"
上面这行命令是遍历主命名空间下的所有条目,将各个条目中的“路人甲”替换为“路人乙”。
然后是我最常用的几个参数:
- -simulate ——> 通常加在一行命令的最后,用于模拟编辑。即在机器人提交编辑前停止运行,不影响其他参数。
- -page:页面名称 ——> 在指定页面上运行
- -ref:页面名称 ——> 在所有链入该页面的页面上运行
- -namespace(或-ns):命名空间序号 ——> 限制遍历的范围为给定的命名空间。例如模组和Talk便是不同的命名空间,主空间通常是最常被编辑的。
- -cat:分类名称 ——> 在指定分类下的所有页面上运行
- -regex "原来的文本(正则表达式)" "替代的文本(普通模式)" ——> 在筛选原始文本时使用正则表达式
以上几个参数除了最后的-regex,其他的一般在所有脚本上通用。
批量撤销Bot的编辑
如果Bot做出了大量错误的编辑,可以使用revertbot.py批量撤销编辑。
以上便是我在维护Bot时的一些经验,很浅显,也可能有些小错误。如果你也想维护一个Bot,希望这对你有帮助!