日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python进阶_wxpy学习:消息处理

發布時間:2025/3/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python进阶_wxpy学习:消息处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

  • 目錄:
  • 前言
  • 消息處理
  • 消息對象
  • 內容數據
  • 用戶相關
  • 群聊相關
  • 回復方法
  • 轉發消息
  • 自動處理消息
  • 開始運行
  • 示例代碼
  • 已發送消息
  • 歷史消息

前言

學習完了python的基本概念和相應操作后,就要進入實戰階段了,首先選的和微信端口自動交互的wxpy。
本文操靠wxpy的官方文檔:官方文檔
機器人對象可以參考前文:機器人對象
聊天對象可以參考前文:聊天對象

消息處理

每當機器人接收到消息時,會自動執行以下兩個步驟
將消息保存到 Bot.messages 中
查找消息預先注冊的函數,并執行(若有匹配的函數)

消息對象

消息對象代表每一條從微信獲取到的消息。 基本屬性Message.type消息的類型,目前可為以下值:# 文本TEXT = 'Text'# 位置MAP = 'Map'# 名片CARD = 'Card'# 提示NOTE = 'Note'# 分享SHARING = 'Sharing'# 圖片PICTURE = 'Picture'# 語音RECORDING = 'Recording'# 文件ATTACHMENT = 'Attachment'# 視頻VIDEO = 'Video'# 好友請求FRIENDS = 'Friends'# 系統SYSTEM = 'System'返回類型: strMessage.bot接收此消息的 機器人對象Message.id消息的唯一 ID (通常為大于 064 位整型)

內容數據

Message.text消息的文本內容Message.get_file(save_path=None)[源代碼]下載圖片、視頻、語音、附件消息中的文件內容??膳c Message.file_name 配合使用。參數: save_path – 文件的保存路徑。若為 None,將直接返回字節數據Message.file_name消息中文件的文件名Message.file_size消息中文件的體積大小Message.media_id文件類消息中的文件資源 ID (但圖片視頻語音等其他消息中為空)Message.raw原始數據 (dict 數據)

用戶相關

Message.chat消息所在的聊天會話,即:對于自己發送的消息,為消息的接收者對于別人發送的消息,為消息的發送者返回類型: wxpy.User, wxpy.GroupMessage.sender消息的發送者返回類型: wxpy.User, wxpy.GroupMessage.receiver消息的接收者返回類型: wxpy.User, wxpy.GroupMessage.member若消息來自群聊,則此屬性為消息的實際發送人(具體的群成員)若消息來自其他聊天對象(非群聊),則此屬性為 None返回類型: NoneType, wxpy.MemberMessage.card好友請求中的請求用戶名片消息中的推薦用戶

群聊相關

Message.member若消息來自群聊,則此屬性為消息的實際發送人(具體的群成員)若消息來自其他聊天對象(非群聊),則此屬性為 None返回類型: NoneType, wxpy.MemberMessage.is_at當消息來自群聊,且被 @ 時,為 True時間相關Message.create_time服務端發送時間Message.receive_time本地接收時間Message.latency消息的延遲秒數 (發送時間和接收時間的差值)其他屬性Message.url分享類消息中的網頁 URLMessage.articles公眾號推送中的文章列表 (首篇的 標題/地址 與消息中的 text/url 相同)其中,每篇文章均有以下屬性:title: 標題summary: 摘要url: 文章 URLcover: 封面或縮略圖 URLMessage.location位置消息中的地理位置信息Message.img_height圖片高度Message.img_width圖片寬度Message.play_length視頻長度Message.voice_length語音長度

回復方法

Message.reply(...)等同于 Message.chat.send(...)Message.reply_image(...)等同于 Message.chat.send_image(...)Message.reply_file(...)等同于 Message.chat.send_file(...)Message.reply_video(...)等同于 Message.chat.send_video(...)Message.reply_msg(...)等同于 Message.chat.send_msg(...)Message.reply_raw_msg(...)等同于 Message.chat.send_raw_msg(...)

轉發消息

Message.forward(chat, prefix=None, suffix=None, raise_for_unsupported=False)[源代碼]將本消息轉發給其他聊天對象支持以下消息類型文本 (TEXT)視頻(VIDEO)文件 (ATTACHMENT)圖片/自定義表情 (PICTURE)但不支持表情商店中的表情名片 (CARD)僅支持公眾號名片,以及自己發出的個人號名片分享 (SHARING)會轉化為 標題 + 鏈接 形式的文本消息語音 (RECORDING)會以文件方式發送地圖 (MAP)會轉化為 位置名稱 + 地圖鏈接 形式的文本消息參數: chat (Chat) – 接收轉發消息的聊天對象prefix (str) – 轉發時增加的 前綴 文本,原消息為文本時會自動換行suffix (str) – 轉發時增加的 后綴 文本,原消息為文本時會自動換行raise_for_unsupported (bool) –為 True 時,將為不支持的消息類型拋出 NotImplementedError 異常例如,將公司群中的老板消息轉發出來: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(chats=None, msg_types=None, except_self=True, run_async=True, enabled=True)[源代碼]裝飾器:用于注冊消息配置參數: chats – 消息所在的聊天對象:單個或列表形式的多個聊天對象或聊天類型,為空時匹配所有聊天對象msg_types – 消息的類型:單個或列表形式的多個消息類型,為空時匹配所有消息類型 (SYSTEM 類消息除外)except_self – 排除由自己發送的消息run_async – 是否異步執行所配置的函數:可提高響應速度enabled – 當前配置的默認開啟狀態,可事后動態開啟或關閉小技巧chats 和 msg_types 參數可以接收一個列表或干脆一個單項。按需使用,方便靈活。chats 參數既可以是聊天對象實例,也可以是對象類。當為類時,表示匹配該類型的所有聊天對象。在被注冊函數中,可以通過直接 return <回復內容> 的方式來回復消息,等同于調用 msg.reply(<回復內容>)。

開始運行

注解 在完成注冊操作后,若沒有其他操作,程序會因主線程執行完成而退出。 因此務必堵塞線程以保持監聽狀態! wxpy 的 embed() 可在堵塞線程的同時,進入 Python 命令行,方便調試,一舉兩得。from wxpy import *bot = Bot()@bot.register() def print_messages(msg):print(msg)# 堵塞線程,并進入 Python 命令行 embed()wxpy.embed(local=None, banner='', shell=None)[源代碼]進入交互式的 Python 命令行界面,并堵塞當前線程支持使用 ipython, bpython 以及原生 python參數: shell (str) –指定命令行類型,可設為 ‘ipython’,’bpython’,’python’,或它們的首字母;若為 None,則按上述優先級進入首個可用的 Python 命令行。local (dict) – 設定本地變量環境,若為 None,則獲取進入之前的變量環境。banner (str) – 設定歡迎內容,將在進入命令行后展示。

示例代碼

在以下例子中,機器人將

忽略 “一個無聊的群” 的所有消息 回復好友 “游否” 和其他群聊中被 @ 的 TEXT 類消息 打印所有其他消息

初始化機器人,并找到好友和群聊:

from wxpy import * bot = Bot() my_friend = bot.friends().search('游否')[0] boring_group = bot.groups().search('一個無聊的群')[0]

打印所有其他消息:

@bot.register() def just_print(msg):# 打印消息print(msg)

回復好友”游否”和其他群聊中被 @ 的 TEXT 類消息:

@bot.register([my_friend, Group], TEXT) def auto_reply(msg):# 如果是群聊,但沒有被 @,則不回復if isinstance(msg.chat, Group) and not msg.is_at:returnelse:# 回復消息內容和類型return '收到消息: {} ({})'.format(msg.text, msg.type)忽略”一個無聊的群”的所有消息:@bot.register(boring_group) def ignore(msg):# 啥也不做return堵塞線程,并進入 Python 命令行:embed()動態開關注冊配置注解該操作需要在額外的線程中進行!查看當前的注冊配置情況:bot.registered # [<MessageConfig: just_print (Async, Enabled)>, # <MessageConfig: auto_reply (Async, Enabled)>, # <MessageConfig: ignore (Async, Enabled)>]關閉所有注冊配置:bot.registered.disable()重新開啟 just_print 函數:bot.registered.enable(just_print)查看當前開啟的注冊配置:bot.registered.enabled # [<MessageConfig: just_print (Async, Enabled)>]class wxpy.api.messages.Registered(bot)[源代碼]保存當前機器人所有已注冊的消息配置參數: bot – 所屬的機器人get_config(msg)[源代碼]獲取給定消息的注冊配置。每條消息僅匹配一個注冊配置,后注冊的配置具有更高的匹配優先級。參數: msg – 給定的消息返回: 匹配的回復配置get_config_by_func(func)[源代碼]通過給定的函數找到對應的注冊配置參數: func – 給定的函數返回: 對應的注冊配置enable(func=None)[源代碼]開啟指定函數的對應配置。若不指定函數,則開啟所有已注冊配置。參數: func – 指定的函數disable(func=None)[源代碼]關閉指定函數的對應配置。若不指定函數,則關閉所有已注冊配置。參數: func – 指定的函數enabled檢查處于開啟狀態的配置返回: 處于開啟狀態的配置disabled檢查處于關閉狀態的配置返回: 處于關閉狀態的配置

已發送消息

class wxpy.SentMessage(attributes)[源代碼]程序中通過 .send/reply() 系列方法發出的消息使用程序發送的消息也將被記錄到歷史消息 bot.messages 中提示大部分屬性與 Message 相同recall()[源代碼]撤回本條消息 (應為 2 分鐘內發出的消息)

歷史消息

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

消息列表為 Messages 對象,具有搜索功能。

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

sent_msgs = bot.messages.search(sender=bot.self) print(sent_msgs) class wxpy.Messages(msg_list=None, max_history=200)[源代碼]多條消息的合集,可用于記錄或搜索max_history設置最大保存條數,即:僅保存最后的 n 條消息。bot = Bot()# 設置歷史消息的最大保存數量為 10000 條bot.messages.max_history = 10000search(keywords=None, **attributes)[源代碼]搜索消息記錄參數: keywords – 文本關鍵詞attributes – 屬性鍵值對返回: 所有匹配的消息返回類型: wxpy.Messages# 搜索所有自己發送的,文本中包含 'wxpy' 的消息bot.messages.search('wxpy', sender=bot.self)

總結

以上是生活随笔為你收集整理的Python进阶_wxpy学习:消息处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。