使用者: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,希望這對你有幫助!