由于使用網(wǎng)頁版微信疲牵,機(jī)器人往往不能夠永遠(yuǎn)地在線。如果無法一直在線榆鼠,也就失去了自動(dòng)回復(fù)程序的意義纲爸。在此,我們使用兩種方式來監(jiān)控機(jī)器人程序:
- 自動(dòng)定時(shí)發(fā)送消息
- 使用supervisor進(jìn)行監(jiān)控
自動(dòng)發(fā)送消息
準(zhǔn)備
如果需要定時(shí)發(fā)送消息妆够,使用sleep
方式來等待計(jì)時(shí)會(huì)阻塞線程识啦,因此我們會(huì)使用threading
來進(jìn)行多線程的操作。把一個(gè)線程分配給自動(dòng)給特定人發(fā)送微信消息神妹。
定義自動(dòng)發(fā)送消息的方法
在進(jìn)行多線程操作之前颓哮,我們先定義一個(gè)自動(dòng)發(fā)送消息的方法以備調(diào)用:
def send_online_notification(name):
my_friend = ensure_one(bot.search(name))
while True:
my_friend.send('Hello!') # 你想發(fā)送的消息
time.sleep(3600) # 一小時(shí)后在進(jìn)行發(fā)送
wxpy的ensure_one()
方法會(huì)確認(rèn)返回的內(nèi)容僅有一個(gè)值,如果返回的列表超過一個(gè)值(或是沒有返回)鸵荠,它會(huì)進(jìn)行報(bào)錯(cuò)冕茅。我們?cè)谶@里尋找name
相關(guān)的好友,并且保證只有一個(gè)這樣的好友。如果你需要給多個(gè)好友發(fā)送消息姨伤,我建議再使用一個(gè)循環(huán)來遍歷好友列表哨坪。
我們寫一個(gè)阻塞線程的死循環(huán),在死循環(huán)中給需要尋找發(fā)送特定消息乍楚,并讓線程停止一小時(shí)当编,由此來打成定時(shí)發(fā)送消息的方法。
增加線程
另一邊徒溪,我們需要利用多線程調(diào)用這個(gè)方法凌箕。
positiveSendingThread = threading.Thread(target=send_online_notification, args=(u'乙醚。',)) # 請(qǐng)?jiān)谶@里輸入你想要尋找的好友昵稱或備注
positiveSendingThread.setDaemon(True)
positiveSendingThread.start()
這樣就成功啟用了一個(gè)線程來進(jìn)行自動(dòng)發(fā)送消息了词渤。
利用Supervisor監(jiān)控
安裝
supervisor是一個(gè)python寫成的程序,因此可以簡(jiǎn)單地通過pip
來進(jìn)行安裝:
pip install supervisor
調(diào)整 wxpy設(shè)置
如果想使用supervisor的重啟功能串绩,我們必須開啟wxpy的緩存功能以儲(chǔ)存登錄狀態(tài)缺虐,具體操作在登錄時(shí)增加cache_path
參數(shù):
bot = Bot(cache_path=True)
你也可以自由選擇將緩存存在什么文件中,以免多個(gè)機(jī)器人沖突
同時(shí)礁凡,你需要阻塞進(jìn)程而非進(jìn)入python控制臺(tái)高氮,否則機(jī)器人退出時(shí)程序不退出,將不會(huì)進(jìn)入重啟:
# embed()
bot.join()
配置
官方提供了一個(gè)默認(rèn)的配置文件顷牌,你可以使用這條命令輸出到你放置機(jī)器人的文件夾中:
echo_supervisord_conf > supervisord.conf
在這個(gè)supervisord.conf
后面剪芍,我們?cè)僮芳訉?duì)微信機(jī)器人程序的控制
[program:bot]
command=python ./wxbot.py ;執(zhí)行機(jī)器人文件,請(qǐng)修改文件名
process_name=%(program_name)s
autostart=true ; 程序是否隨supervisor啟動(dòng)而啟動(dòng)
autorestart=true ;程序停止時(shí)窟蓝,是否自動(dòng)重啟
startsecs=10
啟動(dòng)和控制
從命令啟動(dòng)supervisor只需要一句:
supervisord -c supervisord.conf
-c
用以指定配置文件罪裹,也就是我們剛剛編寫的文件。
使用supervisor還可以方便的開始运挫、重啟和停止程序:
supervisorctl start bot # 開始程序状共,bot 是剛剛填寫的程序名
supervisorctl restart bot # 重啟程序
supervisorctl stop bot # 停止程序
使用supervisor查看自己的程序運(yùn)行狀態(tài)
supervisorctl status # 查看狀態(tài)
因此,只要將wxpy的緩存打開谁帕,并且使用supervisor進(jìn)行自動(dòng)重啟峡继,我們就可以獲得一個(gè)長(zhǎng)時(shí)間保持登錄的自動(dòng)回復(fù)機(jī)器人啦!
機(jī)器人代碼
我的微信機(jī)器人的代碼在GitHub托管匈挖,歡迎查看(づ ̄3 ̄)づ╭?~