wxpy微信模塊學習之消息處理


消息處理

    每當機器人接收到消息時,會自動執行以下兩個步驟

       1.將消息保存至Bot.messages中

       2.查找消息預先注冊的函數,並執行(若有匹配的函數)

消息對象

   消息對象代表每一條從微信獲取到的消息。

  基本屬性

      Message.type 消息的類型,目前可為以下值:

              返回類型:str

# 文本
TEXT = 'Text'
# 位置
MAP = 'Map'
# 名片
CARD = 'Card'
# 提示
NOTE = 'Note'
# 分享
SHARING = 'Sharing'
# 圖片
PICTURE = 'Picture'
# 語音
RECORDING = 'Recording'
# 文件
ATTACHMENT = 'Attachment'
# 視頻
VIDEO = 'Video'
# 好友請求
FRIENDS = 'Friends'
# 系統
SYSTEM = 'System'

 

      Message.bot 接收此消息的機器人對象

      Message.id 消息的唯一 ID (通常為大於 0 的 64 位整型)

 

  基本屬性

      Message.text 消息的文本內容

      Message.get_filr (save_path=None)

          下載圖片、視頻、語音、附件消息中的文件內容,可與Message.file_name配合使用。

          參數:save_path -- 文件的保存路徑。若為 None,將直接返回字節數據

       Message.file_name 消息中文件的文件名

         Message.file_size 消息中文件的大小

       Message.media_id 文件類消息中的文件資源 ID (但圖片視頻語音等其他消息中為空)

         Message.raw 原始數據 (dict 數據)

 

  基本屬性

      Message.chat 消息所在的聊天會話:

            對於自己發送的消息,為消息的接收者

            對於別人發送的消息,為消息的發送者

             返回類型:wxpy.User,wxpy.Group

      Message.sender 消息發送者:

             返回類型:wxpy.User,wxpy.Group

      Message.receiver 消息接收者:

             返回類型:wxpy.User,wxpy.Group

      Message.member 

            若消息來自群聊,則此屬性為消息的實際發送人(具體的群成員)

            若消息來自其他聊天對象(非群聊),則此屬性為 None

             返回類型:wxpy.User,wxpy.Group

      Message.card 

            好友請求中的請求用戶

            名片消息中的推薦用戶

 

  群聊相關

      Message.member 

            若消息來自群聊,則此屬性為消息的實際發送人(具體的群成員)

            若消息來自其他聊天對象(非群聊),則此屬性為 None

             返回類型:wxpy.User,wxpy.Group

      Message.is_at 當消息來自群聊,且被 @ 時,為 True

 

  時間相關

      Message.creaete_time 服務端發送時間

         Message.receive_time 本地接收時間

         Message.latency 消息的延遲秒數 (發送時間和接收時間的差值)

 

  其他屬性

      Message.url 分享類消息中的網頁 URL

         Message.articles 公眾號推送中的文章列表 (首篇的 標題/地址 與消息中的 text/url 相同)

            title: 標題;summary:摘要;url:文章URL;cover:封面或縮略圖URL;

         Message.location 位置消息中的地理位置信息

         Message.img_height 圖片高度

         Message.img_width 圖片高度

         Message.play_lenth 視頻長度

         Message.voice_lenth 語音長度

  回復方法

     類似於各send方法

      Message.reply()

      Message.reply_image()

      Message.reply_file()

      Message.reply_video()

      Message.reply_msg()

      Message.reply_raw_msg()

  轉發消息

      Message.forward(chat,prefix=None,suffix=None,raise_for_unsupported=False)

            將本消息轉發給其他聊天對象

             參數:chat--接收轉發消息的聊天對象

                        prefix(str)--轉發時增加的 前綴 文本,原消息為文本時會自動換行

                        sufffix(str)--轉發時增加的 后綴 文本,原消息為文本時會自動換行

                        raise_for_unsupported (bool) --True ,將為不支持的消息類型拋出 NotImplementedError 異常

      eg.

from wxpy import *

bot = Bot()

# 定位公司群
company_group = ensure_one(bot.groups().search('公司微信群'))

# 定位老板
boss = ensure_one(company_group.search('老板大名'))

# 將老板的消息轉發到文件傳輸助手
@bot.register(company_group)
def forward_boss_message(msg):
    if msg.member == boss:
        msg.forward(bot.file_helper, prefix='老板發言')

# 堵塞線程
embed()

 

自動處理消息

  可通過 預先注冊 的方式,實現消息的自動處理。

  注冊消息

      每當收到新消息時,將根據注冊規則找到匹配條件的執行函數

      並將消息對象作為唯一參數傳入該函數。

       將 Bot.register()作為函數的裝飾器,即可完成注冊。

# 打印所有*群聊*對象中的*文本*消息
@bot.register(Group, TEXT)
def print_group_msg(msg):
    print(msg)

 

      *優先匹配 后注冊 的函數,且僅匹配 一個 注冊函數。

      Bot.register(chat=None,msg_types=None, except_self=True, run_async=True, enabled=True)

            裝飾器:用於注冊消息配置

             參數:chats--消息所在的聊天對象:單個或列表形式的多個聊天對象或聊天類型,為空時匹配所有聊天對象

                        msg_types--消息的類型:單個或列表形式的多個消息類型,為空時匹配所有消息類型 (SYSTEM 類消息除外)

                        except_self--排除由自己發送的消息

                        run_async -- 是否異步執行所配置的函數:可提高響應速度

                        enabled -- 當前配置的默認開啟狀態,可事后動態開啟或關閉

開始運行

  在完成注冊操作后,若沒有其他操作,程序會因主線程執行完成而退出。因此務必堵塞線程以保持監聽狀態!

 

from wxpy import *

bot = Bot()

@bot.register()
def print_messages(msg):
    print(msg)

# 堵塞線程,並進入 Python 命令行
embed()

      wxpy.embed(local=None, banner='', shell=None)

            進入交互式的 Python 命令行界面,並堵塞當前線程

             參數:shell (str) --指定命令行類型,可設為 ‘ipython’,’bpython’,’python’,或它們的首字母;

                             若為None,則按上述優先級進入首個可用的 Python 命令行。

                        local (dict)-排除由自己發送的消息

                        run_async -- 設定本地變量環境,若為None,則獲取進入之前的變量環境。

                        banner (str) -- 設定歡迎內容,將在進入命令行后展示

   已發送消息

      wxpy.SentMessage(attributes)

            程序中通過 .send/reply() 系列方法發出的消息

              使用程序發送的消息也將被記錄到歷史消息 bot.messages 中

             大部分屬性與Message相同

       recall() 撤回本條消息 (應為 2 分鍾內發出的消息)

    歷史消息

      可通過訪問bot.Messages 來查看歷史消息列表。

      為Message對象,具有搜索功能

       例如,搜索所有自己在手機上發出的消息

sent_msgs = bot.messages.search(sender=bot.self)
print(sent_msgs)

 

       class wxpy.Messages(msg_list=None,max_history=200)

            多條消息的合集,可用於記錄或搜索

             參數:max_history --設置最大保存條數,即:僅保存最后的 n 條消息

       search(keywords=None,**attributes)

            搜索消息記錄

             參數:keywords --文本關鍵詞

                        attributes--屬性鍵值對

             返回:所有匹配的消息

             返回類型:wxpy.Messages

  • shell (str) –
    指定命令行類型,可設為 ‘ipython’,’bpython’,’python’,或它們的首字母;
    若為 None,則按上述優先級進入首個可用的 Python 命令行。
  • local (dict) – 設定本地變量環境,若為 None,則獲取進入之前的變量環境。
  • banner (str) – 設定歡迎內容,將在進入命令行后展示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM