微信機器人有很多實作方式,有修改微信電腦版的方式、網頁版登入的方式等等。
我這邊使用的是 Python ,利用登入網頁版微信來做為溝通
註:這個作法是利用「個人」的帳戶方式,實現半自動化的功能。
可以自動拉入群、群發訊息、特定關鍵字回覆…等等的功能
我們使用 ItChat 的套件來實作微信的機器人。
網路上對於 ItChat 有許多分支,最原始的是 littlecodersh/ItChat 的版本,
但小弟在測試的時候發現這個版本有登入的問題(等等會解釋)。
所以改用 luvletter2333/ItChat 修改後的版本
相關文件:
https://itchat.readthedocs.io/zh/latest/
以下使用 Python 3.9 的環境實作。
安裝套件
pip3 install git+https://github.com/luvletter2333/ItChat.git
最基本的一個範例
import itchat
itchat.auto_login()
itchat.send('Hello, filehelper', toUserName='filehelper')
就是向給「文件傳輸助手」發一條「Hello, filehelper」訊息。
因爲不能自己發給自己,但每個人每個帳號都有「文件傳輸助手」故可以用它來測試。
列出好友列表
使用 get_friends()
方法可以獲取所有的好友(好友第一位是自己)
friendList = itchat.get_friends(update=True)[1:]
for friend in friendList:
print("%s %s" % ((friend['DisplayName'] or friend['NickName']), friend['UserName']))
可以得到 friend
物件,是一個 json 物件。
主要二個重點:
- UserName 使用者 ID
- NickName 顯示的暱稱
你發訊息的時候會需要 UserName
代表使用者 ID
資料類似這樣
@@f2148b83xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3644c
列出群組聊天
這邊有一個要注意:你的群組聊天,一定要勾選「儲存到通訊錄」
如果不儲存到通訊錄,是無法在各裝置之間同步的(所以 itchat 也無法讀取到)
讀取方式有二種
第一種,類似 get_friends()
的方式,使用 get_chatrooms()
來列出你有加的群組。
chatroomList = itchat.get_chatrooms(update=True)[1:]
for chatroom in chatroomList:
print("%s %s" % (chatroom['NickName'], chatroom['UserName']))
跟使用者一樣,有 NickName 與 UserName
- UserName 群組 ID
- NickName 顯示的暱稱
操作方式與使用者相同
第二種方式,使用 search_chatrooms
方法
chatroomName=u'MyChatGroup'
chatrooms = itchat.search_chatrooms(name=chatroomName)
if chatrooms is None:
print(u'Chatroom not found: ' + chatroomName)
else:
print("%s %s" % (chatrooms[0]['NickNameUserName'], chatrooms[0]['UserName']))
發訊息
使用 send
方法
itchat.send(u'Hello, world', userName)
參數就二個,第一個就是訊息,第二個就是 UserName
參數(代表你的群組 ID 或使用者 ID)
資料類似這樣
@@f2148b83xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3644c
使用 Docker 包裝
我會使用 Docker 鎖定執行的環境與所需材料,只要一個 docker run
就能帶入當時所使用的環境
FROM python:3.9.7-slim-bullseye
WORKDIR /data
RUN apt-get update
RUN apt-get install -y git
RUN pip3 install requests pyqrcode
RUN pip3 install git+https://github.com/luvletter2333/ItChat.git
ADD *.py /data/
CMD python3 main.py
使用 python 3.9.7 基於 Debian 11 (代號 bullseye) 的版本
加入所需套件 requests pyqrcode ItChat 等
然後執行之
實例
我寫了一個有趣的微信 Wechat 機器人
抓取財金資訊日曆,整理後貼回群組
提醒大家留意交易的時間點
QRCode 登入畫面(因為 QRCode 是個人登入使用,避免誤掃就隱藏起來)
發送訊息的樣子
對照原有 app
遇到問題
我在測試的時候遇到最多最不知道怎麼解的問題就是這個
「為了你的帳號安全,此微信號不能登錄網頁微信。你可以使用 Windows 微信或 Mac 微信在電腦端登錄」
找了一下相關的討論
Issue#943 這邊提到他用 why2lyj/ItChat-UOS
來實現,但包進 Docker 會沒辦法用。
Issue#939 這邊 luvletter2333/ItChat
的修改就可以用,也就是本文使用的版本
有網友使用老版本的網頁微信,就又可以使用了。
(什麼時候封禁不能用,不知道,看微信的臉色)
有網友回報新註冊的微信就已經不能使用了,
使用前請苛灼。