1. 程式人生 > >Python實現微信自動回覆和指定傳送群聊訊息

Python實現微信自動回覆和指定傳送群聊訊息

閱讀本文大約需要5分鐘

先說一件事,抱著“沉澱成本不是成本”的態度,最近會將以前寫的文章刪除或者進行合併,按照高人的指點進行格式上和內容上的完善。

因為一直寫基礎的緣故,今天朋友提了下面這樣一個需求。就順便寫了一個小專案和大家分享一下

(圖片是微信截圖貼上不了,抱歉。但不影響下文閱讀)

2

itchat:

強大的微信個人號的開源介面,使用幾十行的程式碼就可以讓你快速瞭解你的微信好友,群,公眾號的資訊。像我們之前看到的統計個性簽名,好友全國分佈等等之類的資訊其實在你瞭解itchat之後都可以十分簡單的實現。

這次小專案的重點不是介紹itchat,我會解釋用到的部分(寫在程式的註釋部分)。如果你不熟悉或者想了解整個模組歡迎公眾號留言告訴我,會在以後和大家進行分享。

匯入模組和申明變數:

 1 import itchat
 2 from itchat.content import *
 3
 4
 5 gname = '設定群名'
 6 context = '這是一條我設定群的傳送訊息,微信正式處於託管狀態。大家可以忽略'
 7

自動回覆:

1 # 監聽msg是誰給我發訊息
2 @itchat.msg_register(INCOME_MSG)
3 #通過msg變數返回值定位傳送使用者
4 def text_reply(msg):
5    # 列印獲取到的資訊
6    # print(msg)
7    itchat.send("您傳送了:\'%s\'\n微信目前處於python託管,你的訊息我會轉發到手機,謝謝" %
8                (msg['Text']), toUserName=msg['FromUserName'])

這裡主要注意的是裝飾器的使用,這裡其實還是可以監聽圖片,視訊,文件之類的。為了簡便,這裡只是文字,所以如果對方傳送的是圖片,會列印成轉碼格式

群聊傳送訊息:

 1def SendChatRoomsMsg(gname, context):
 2    # 獲取群組所有的相關資訊(注意最好群聊儲存到通訊錄)
 3    myroom = itchat.get_chatrooms(update=True)
 4    # myroom = itchat.get_chatrooms()
 5    #定義全域性變數(也可以不定義)
 6    global username
 7    # 傳入指定群名進行搜尋,之所以搜尋,是因為群員的名稱資訊也在裡面
 8    myroom = itchat.search_chatrooms(name=gname)
 9    for room in myroom:
10        # print(room)
11        #遍歷所有NickName為鍵值的資訊進行匹配群名
12        if room['NickName'] == gname:
13            username = room['UserName']
14            # 得到群名的唯一標識,進行資訊傳送
15            itchat.send_msg(context, username)
16        else:
17            print('No groups found')

群裡傳送訊息主要麻煩在群名及相關資訊的查詢,要準確的瞭解get_chatrooms()和search_chatrooms()返回值

登入微信並保持登入狀態:

1 # 登入微信enableCmdQR表示的是當完全的命令列介面可以彈出文字繪製的二維碼
2 # 可以讓你得以掃碼登入,hotReload表示的連續幾次執行不需要再次掃碼
3 itchat.auto_login(enableCmdQR=True, hotReload=True)
4 # 呼叫函式傳送群訊息
5 SendChatRoomsMsg(gname, context)
6 # 保持登入狀態
7 itchat.run()

最後:

其實還可以做得更好玩,匯入time模組可以做成定時傳送訊息裝置。我今天也嘗試了做成刷屏模式,但是在使用while死迴圈傳送群訊息時,就沒辦法有程序來處理處於阻塞狀態的“自動回覆”了。我的解決辦法是匯入OS模組簡歷fork()建立多程序,有興趣的可以試試。

我將原始碼放到GitHub上面了,有興趣的可以檢視原始碼

微信掃一掃關注該公眾號