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) – 设定欢迎内容,将在进入命令行后展示。

原文地址:https://www.cnblogs.com/taoyucheng/p/10292098.html

时间: 2024-10-24 09:38:28

wxpy微信模块学习之消息处理的相关文章

wxpy微信模块学习之聊天对象

聊天对象   通过Bot的Chats(),friends(),groups(),mps()方法,可分别获取到当前机器人的 所有聊天对象.好友.群聊,以及公众号列表. 获得的合集有合集方法,如search() from wxpy import * bot = Bot() my_friend = bot.friends().search('游否', sex=MALE, city='深圳')[0] # <Friend: 游否> 找到好友(或其他聊天对象)后,还可使用该聊天对象的send系列方法,对其

微信开发学习总结(二)——微信开发入门

上一篇<微信开发学习总结(一)——微信开发环境搭建>我们已经完成了微信开发的准备工作,准备工作完成之后,就要开始步入正题了. 一.微信公众平台的基本原理 在开始做之前,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器.应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再将具体响应信息回复到微信App终端. 通信协议为:HTTP 数据传输格式为:XML 具体的流程如下图所示:

Python 模块学习

模块学习: http://wsyht90.blog.51cto.com/9014030/1845737 1.getpass 2.os 3.sys 4.subprocess 5.hashlib 6.json 7.pickle 8.shutil 9.time 10.datetime 11.re 12.random 13.configparser 14.traceback 15.yaml 16.itertools 17.logging 18.urllib.urllib2 19.paramiko ###

python模块学习(2)——re模块

正则表达式并不是python的一部分,正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程:  正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符

Node.js笔记(0003)---Express框架Router模块学习笔记

这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: Map logic to route parameters. 大概意思就是路由参数的映射逻辑 这个可能一时半会也不明白其作用,尤其是不知道get和param的执行顺序 再看看源码里面的介绍: Map the given param placeholder `name`(s) to the given callbac

xposed微信模块源代码

xposed源代码-微信二次开发 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信机器人.微信群发.多群转播(直播)等...)目前支持功能:发文本消息发图片消息发语音消息获取微信好友列表群列表支持群发消息[注:本模块为开发版,是用于开发者做二次开发的,所提到的功能只是提供接口,并不是安装模块就可以使用这些功能,开发者可以使用这些接口来开发相应功能的软件,如果你不是开发者,请下载提供的示例软件测试相关功能]更多功能更新中... 微信模块 http://repo.xpo

CSDN专家精选,微信开发学习路线大有看头!

1999年成立至今,CSDN积累了丰富的IT专业技术内容.现在,我们邀请了数百位各领域专家,深入挖掘CSDN站内优质资源,按照从基础到高阶的学习路径,逐步打造覆盖热门技术领域的学习路线,并结合CSDN产品家族(视频学院.技术问答.交流社区等),为广大开发者和IT从业人员提供最为便捷与专业的在线学习平台. CSDN推出的开发技术精品资源合集,按照技术领域,分为不同的学习路线.内容涵盖入门.进阶.实战三个阶段,以帮助开发者系统学习掌握专项技术,快速提升开发水平. 截止目前,已经上线了Rust开发技术

openoffice osl模块学习1

由" can i get a char* , please?"看起: Just barely. OO.o has at least six string wrappers, although the C implementations are of little interest: rtl_String - sal/inc/rtl/string.h"Normal" string plus reference counting. rtlstring->buffe

Day5 - Python基础5 常用模块学习

Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,