目录:

  • 目录:
  • 前言
  • 消息处理
  • 消息对象
  • 内容数据
  • 用户相关
  • 群聊相关
  • 回复方法
  • 转发消息
  • 自动处理消息
  • 开始运行
  • 示例代码
  • 已发送消息
  • 历史消息

前言

学习完了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)[源代码]下载图片、视频、语音、附件消息中的文件内容。可与 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)
defauto_reply(msg):# 如果是群聊,但没有被 @,则不回复if isinstance(msg.chat, Group) and not msg.is_at:returnelse:# 回复消息内容和类型return '收到消息: {} ({})'.format(msg.text, msg.type)忽略”一个无聊的群”的所有消息:@bot.register(boring_group)
defignore(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学习:消息处理相关推荐

  1. Python进阶_wxpy学习:常见问题

    目录: 目录: 前言 必看: 常见问题 FAQ 提示 每次登陆都要扫码? 小技巧 为什么要开发 wxpy? 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的是和微信端口自 ...

  2. Python进阶_wxpy学习:原始数据

    目录: 目录: 前言 itchat 与原始数据 使用 itchat 的原接口 使用原始数据 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的是和微信端口自动交互的wxpy ...

  3. Python进阶_wxpy学习:异常chu'li

    目录: 目录: 前言 异常处理 异常的抛出和捕捉 已知错误码 注意 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的是和微信端口自动交互的wxpy. 本文操靠wxpy的官 ...

  4. Python进阶_wxpy学习:实用组件

    目录: 目录: 前言 实用组件 聊天机器人 图灵 小 i 查找共同好友 忽略 ResponseError 异常 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的是和微信端 ...

  5. Python进阶_wxpy学习:愉快的探索和调试

    目录: 目录: 前言 愉快的探索和调试 使用 wxpy 命令 初始化一个名为 bot 的机器人: 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的和微信端口自动交互的wx ...

  6. Python进阶_wxpy学习:用微信监控你的程序

    目录: 目录: 前言 用微信监控你的程序 获得专用 Logger 指定接收者 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的和微信端口自动交互的wxpy. 本文操靠wx ...

  7. Python进阶_wxpy学习:机器人对象

    目录: 目录: 前言 机器人对象 初始化/登陆 搜索聊天对象 搜索好友: 搜索群聊: 在群聊中搜素: 搜索任何类型的聊天对象 (但不包含群内成员) 加好友和建群 自动接受好友请求: 其他 控制多个微信 ...

  8. Python进阶_wxpy学习:聊天对象

    目录: 目录: 前言 聊天对象 各类型的继承关系 基础类 实际类 基本聊天对象 公众号 前言 学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的和微信端口自动交互的wxpy. 本 ...

  9. python进阶之学习笔记_干货 | Python进阶系列之学习笔记(二)

    目录 对象 字符串 一.对象 (1)什么是对象 在python中一切都是对象,每个对象都有三个属性分别是,(id)身份,就是在内存中的地址,类型(type),是int.字符.字典(dic).列表(li ...

最新文章

  1. Chart.js-雷达图分析(参数分析+例图)
  2. fork()函数_fork()函数的使用
  3. 切换数据库_硬核数据库postgres使用pgpool完成主备自动切换,快来盘它
  4. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!
  5. 10 分钟快速入门海量数据搜索分析引擎 Elasticearch
  6. python小案例_Python的应用小案例
  7. 系统工程师主要做什么_Filecoin运维工程师在做什么?
  8. oracle 进入gdsctl,oracle的分析函数over 及开窗函数[转]
  9. Bokeh 借力其他库
  10. shell sort result to self
  11. LeetCode—数据库简单题(三)
  12. JSONObject.fromObject()方法报错解决方法
  13. Arduino学习之第一篇
  14. python内存泄漏_python 泄漏
  15. Duckduckgo搜索引擎
  16. 如何用Python画出玫瑰曲线和蝴蝶曲线
  17. 200行代码构建一个区块链
  18. 男人就是要对自己狠一点
  19. matlab行星运动轨迹仿真动画,利用Matlab可视化功能实现微分方程求解行星运动轨迹...
  20. 每日计划(2)——大二

热门文章

  1. change from a ppt to the report
  2. <<science>> new and potential research areas
  3. Unity 协程Coroutine综合测试
  4. 2019年清华自主招生部分试题
  5. 简单介绍Kubernetes
  6. C语言函数中的参数有const的问题
  7. 《Qt on Android核心编程》夹
  8. spring 的权限控制:security
  9. 2. 托管对象数据模型的基本知识(Core Data 应用程序实践指南)
  10. analyze table tablename