這是一台利用AppleScript 和Mac 版微信客戶端製作的簡易版微信機器人。這個機器人起源於,我想做一個ChatBot,幫我記錄消費、飲食、運動等數據,並幫我總結微信公眾號文章內容。目前利用個人微信實現ChatBot 的方案,主流的是wechaty,但是wechaty 使用的puppet 中,免費的網頁版或UOS 版本不夠穩定(意思是經常莫名奇妙被踢下線),穩定且功能豐富的ipadloacl 等方案又要花額外的金幣購買token。於是我經過一些小小的嘗試,實現了這個速度慢、功能少但足夠穩定的微信機器人(選擇Mac 版微信客戶端是因為我手上只有Mac 設備)。
這個機器人主要利用AppleScript 完成,輔以一些Python 程式碼,使用Python 是因為AppleScript 隨附的滑鼠點擊操作無法作用於微信用戶端,因此使用了額外的Python 程式庫來實現點擊操作。因此,你需要先有一個Python3 的解釋器,以及安裝PyUserInput:
pip3 install PyUserInput
當然,如果你有其他模擬滑鼠點擊的方案,也可以用自己的(在寫這篇README 時才發現PyUserInput 已經Deprecated 了)。
接下來,你需要修改wemac .applescript
中的一些配置,如下所示:
mouseclick.py
檔案的目錄;設定完上述變數後,就可以嘗試執行一次腳本了,運行前,請確保已登入Mac 版微信。執行腳本,你會發現AppleScript 會自動找到目標的聊天,點擊聊天窗口,並開始刪除最近的一條聊天記錄,沒錯,這個AppleScript 會刪除聊天記錄,當時的考慮是,由於沒有地方記錄每條訊息是否已被回复,只能透過刪除訊息的方式來避免重複回覆訊息;刪除完訊息後,如果這條訊息at 了機器人,則會回覆;然後,AppleScript 的執行就結束了,注意,一次AppleScript 執行只會處理一條訊息。
那麼如何讓機器人一直運作下去呢,可行的方案是寫個run.sh
,在裡面寫死循環不斷執行wemac .applescript
(事實上我自己也是這麼做的)。
如果想要自訂回覆內容,例如存取大語言模型,在wemac .applescript
的270 行,「訊息處理邏輯」註解處,你可以加入自己的回覆邏輯,由於AppleScript 本身能力有限,你可以利用shell 外接其他語言,例如Python,你可以用以下方式呼叫一個Python 腳本來自訂回應內容:
set replyMessage to do shell script "python3 your_script.py " & (my escaped(question))
被執行的shell 的標準輸出(stdout)將會賦值給replyMessage
,然後作為回復由機器人發出去。
在拼接shell 指令時,可以使用escaped
函數轉義參數,以避免注入攻擊。
至此,一個簡單的聊天機器人就跑起來了,期間可能遇到一些無法定位元素的錯誤,但是一般而言忽略他們重新運行一遍AppleScript 就可以了。
run.sh
中同時添加多個AppleScript 以處理不同的聊天,但這樣會拖慢運行速度;但好處就是夠穩定,只要登入上基本上能一直運作下去,而且用AppleScript 模擬點擊理論上也不會被微信偵測到導致封號。
使用的Mac 微信客戶端版本是Version. 3.8.6 (28078)
。