zoukankan      html  css  js  c++  java
  • 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) – 设定欢迎内容,将在进入命令行后展示。
  • 相关阅读:
    一文让你明白Redis持久化
    spring-data-redis 2.0 的使用
    中间自适应布局的5种解法
    php实现只需要一个QQ号就可以获得用户信息
    基于LINUX下的进程管理问题
    【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
    初码-爬虫系列-文章目录
    初码-阿里云系列-文章目录
    初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
    初码-Azure系列-记一次MySQL数据库向Azure的迁移
  • 原文地址:https://www.cnblogs.com/taoyucheng/p/10292098.html
Copyright © 2011-2022 走看看