聊天对象

通过机器人对象 Bot 的 chats()friends()groups()mps() 方法, 可分别获取到当前机器人的 所有聊天对象、好友、群聊,以及公众号列表。

而获得到的聊天对象合集 Chats 和 Groups 具有一些合集方法,例如:Chats.search() 可用于按条件搜索聊天对象:

from wxpy import *
bot = Bot()
my_friend = bot.friends().search('游否', sex=MALE, city='深圳')[0]
# <Friend: 游否>

在找到好友(或其他聊天对象)后,还可使用该聊天对象的 send 系列方法,对其发送消息:

# 发送文本
my_friend.send('Hello, WeChat!')
# 发送图片
my_friend.send_image('my_picture.png')
# 发送视频
my_friend.send_video('my_video.mov')
# 发送文件
my_friend.send_file('my_file.zip')
# 以动态的方式发送图片
my_friend.send('@img@my_picture.png')

各类型的继承关系

在继续了解各个聊天对象之前,我们需要首先 理解各种不同类型聊天对象的继承关系

基础类

所有聊天对象,均继承于以下两种基础类,并拥有相应的属性和方法。

基本聊天对象 Chat
  • 所有的聊天对象均继承于此类型
  • 拥有 微信ID、昵称 等属性
  • 拥有 发送消息 Chat.send(), 获取头像 Chat.get_avatar() 等方法
单个聊天对象 User
  • 继承于 Chat,表示个体聊天对象 (而非群聊)。
  • 被以下聊天对象所继承
  • 拥有 性别、省份、城市、是否为好友 等属性
  • 拥有 加为好友 User.add(), 接受为好友 User.accept() 等方法

实际类

在实际使用过程中,我们会更多的用到以下实际聊天对象类型。

小技巧

请牢记,除了自身私有的属性和方法外,它们还拥有对应基础类的属性和方法 (未重复列出)。

注解

阅读以下内容,你将了解:

  • 如何获取他们的各种属性 (ID、昵称、性别、地区、是否为好友关系等)
  • 如何对他们进行发送消息、加为好友、加入群聊、下载头像 等操作

基本聊天对象

所有聊天对象都继承于”基本聊天对象”,并拥有相应的属性和方法。

classwxpy.Chat(rawbot)[源代码]

单个用户 (User) 和群聊 (Group) 的基础类

bot

所属的 机器人对象

raw

原始数据

puid

持续有效,且稳定唯一的聊天对象/用户ID,适用于持久保存

请使用 Bot.enable_puid() 来启用 puid 属性

小技巧

puid 是 wxpy 特有的聊天对象/用户ID
不同于其他 ID 属性,puid 可始终被获取到,且具有稳定的唯一性

注意

puid 映射数据 不可跨机器人使用

nick_name

该聊天对象的昵称 (好友、群员的昵称,或群名称)

name
该聊天对象的友好名称
具体为: 从 备注名称、群聊显示名称、昵称(或群名称),或微信号中
按序选取第一个可用的
send(content=Nonemedia_id=None)[源代码]

动态发送不同类型的消息,具体类型取决于 msg 的前缀。

参数:
  • content –

    • 由 前缀 和 内容 两个部分组成,若 省略前缀,将作为纯文本消息发送
    • 前缀 部分可为: ‘@fil@’, ‘@img@’, ‘@msg@’, ‘@vid@’ (不含引号)
    • 分别表示: 文件,图片,纯文本,视频
    • 内容 部分可为: 文件、图片、视频的路径,或纯文本的内容
  • media_id – 填写后可省略上传过程
返回类型:

wxpy.SentMessage

send_msg(msg=None)[源代码]

发送文本消息

参数: msg – 文本内容
返回类型: wxpy.SentMessage
send_image(pathmedia_id=None)[源代码]

发送图片

参数:
  • path – 文件路径
  • media_id – 设置后可省略上传
返回类型:

wxpy.SentMessage

send_file(pathmedia_id=None)[源代码]

发送文件

参数:
  • path – 文件路径
  • media_id – 设置后可省略上传
返回类型:

wxpy.SentMessage

send_video(path=Nonemedia_id=None)[源代码]

发送视频

参数:
  • path – 文件路径
  • media_id – 设置后可省略上传
返回类型:

wxpy.SentMessage

send_raw_msg(raw_typeraw_contenturi=Nonemsg_ext=None)[源代码]

以原始格式发送其他类型的消息。

参数:
  • raw_type (int) – 原始的整数消息类型
  • raw_content (str) – 原始的消息内容
  • uri (str) – 请求路径,默认为 ‘/webwxsendmsg’
  • msg_ext (dict) – 消息的扩展属性 (会被更新到 Msg 键中)
返回类型:

wxpy.SentMessage

例如,发送好友或公众号的名片:

my_friend.send_raw_msg(
    # 名片的原始消息类型
    raw_type=42,
    # 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友
    raw_content='<msg username="wxpy_bot" nickname="wxpy 机器人"/>'
)
mark_as_read()[源代码]

消除当前聊天对象的未读提示小红点

pin()[源代码]

将聊天对象置顶

unpin()[源代码]

取消聊天对象的置顶状态

get_avatar(save_path=None)[源代码]

获取头像

参数: save_path – 保存路径(后缀通常为.jpg),若为 None 则返回字节数据
uin

微信中的聊天对象ID,固定且唯一

因微信的隐私策略,该属性有时无法被获取到
建议使用 puid 作为用户的唯一 ID
alias

若用户进行过一次性的 “设置微信号” 操作,则该值为用户设置的”微信号”,固定且唯一

因微信的隐私策略,该属性有时无法被获取到
建议使用 puid 作为用户的唯一 ID
wxid

聊天对象的微信ID (实际为 .alias 或 .uin)

因微信的隐私策略,该属性有时无法被获取到
建议使用 puid 作为用户的唯一 ID
user_name

该聊天对象的内部 ID,通常不需要用到

注意

同个聊天对象在不同用户中,此 ID 不一致 ,且可能在新会话中 被改变

单个聊天对象

classwxpy.User(rawbot)[源代码]

好友(Friend)、群聊成员(Member),和公众号(MP) 的基础类

remark_name

备注名称

set_remark_name(remark_name)[源代码]

设置或修改好友的备注名称

参数: remark_name – 新的备注名称
sex

性别,目前有:

# 男性
MALE = 1
# 女性
FEMALE = 2

未设置时为 None

province

省份

city

城市

signature

个性签名

is_friend

判断当前用户是否为好友关系

返回: 若为好友关系,返回对应的好友,否则返回 False
add(verify_content='')[源代码]

把当前用户加为好友

参数: verify_content – 验证信息(文本)
accept(verify_content='')[源代码]

接受当前用户为好友

参数: verify_content – 验证信息(文本)
返回: 新的好友对象
返回类型: wxpy.Friend

好友

classwxpy.Friend(rawbot)[源代码]

好友对象

群聊

classwxpy.Group(rawbot)[源代码]

群聊对象

members

群聊的成员列表

search(keywords=None**attributes)[源代码]

在群聊中搜索成员

注解

搜索结果为一个 Chats (列表) 对象
建议搭配 ensure_one() 使用
参数:
  • keywords – 成员名称关键词
  • attributes – 属性键值对
返回:

匹配的群聊成员

返回类型:

wxpy.Chats

owner

返回群主对象

is_owner

判断所属 bot 是否为群管理员

self

机器人自身 (作为群成员)

update_group(members_details=False)[源代码]

更新群聊的信息

参数: members_details – 是否包括群聊成员的详细信息 (地区、性别、签名等)
add_members(usersuse_invitation=False)[源代码]

向群聊中加入用户

参数:
  • users – 待加入的用户列表或单个用户
  • use_invitation – 使用发送邀请的方式
remove_members(members)[源代码]

从群聊中移除用户

参数: members – 待移除的用户列表或单个用户
rename_group(name)[源代码]

修改群聊名称

参数: name – 新的名称,超长部分会被截断 (最长32字节)

群成员

classwxpy.Member(rawgroup)[源代码]

群聊成员对象

display_name

在群聊中的显示昵称

remove()[源代码]

从群聊中移除该成员

name
该群成员的友好名称
具体为: 从 群聊显示名称、昵称(或群名称),或微信号中,按序选取第一个可用的

实用技巧

判断一位用户是否在群中只需用 in 语句:

friend = bot.friends().search('游否')[0]
group = bot.groups().search('wxpy 交流群')[0]

if friend in group:
    print('是的,{} 在 {} 中!'.format(friend.name, group.name))
    # 是的,游否 在 wxpy 交流群 中!

若要遍历群成员,可直接对群对象使用 for 语句:

# 打印所有群成员
for member in group:
    print(member)

若需查看群成员数量,直接使用 len() 即可:

len(group) # 这个群的成员数量

若需判断一位群成员是否就是某个好友,使用 == 即可:

member = group.search('游否')[0]
if member == friend:
    print('{} is {}'.format(member, friend))
    # <Member: 游否> is <Friend: 游否>

公众号

classwxpy.MP(rawbot)[源代码]

公众号对象

聊天对象合集

好友、公众号、群聊成员的合集

在 Chats 对象中,除了最常用到的 search() 外,还有两个特别的方法,stats() 与 stats_text(),可用来统计好友或群成员的性别和地区分布:

bot.friends().stats_text()
# 游否 共有 100 位微信好友\n\n男性: 67 (67.0%)\n女性: 23 (23.0%) ...
classwxpy.Chats(chat_list=Nonesource=None)[源代码]

多个聊天对象的合集,可用于搜索或统计

search(keywords=None**attributes)[源代码]

在聊天对象合集中进行搜索

注解

搜索结果为一个 Chats (列表) 对象
建议搭配 ensure_one() 使用
参数:
  • keywords – 聊天对象的名称关键词
  • attributes – 属性键值对,键可以是 sex(性别), province(省份), city(城市) 等。例如可指定 province=’广东’
返回:

匹配的聊天对象合集

返回类型:

wxpy.Chats

stats(attribs=('sex''province''city'))[源代码]

统计各属性的分布情况

参数: attribs – 需统计的属性列表或元组
返回: 统计结果
stats_text(total=Truesex=Truetop_provinces=10top_cities=10)[源代码]

简单的统计结果的文本

参数:
  • total – 总体数量
  • sex – 性别分布
  • top_provinces – 省份分布
  • top_cities – 城市分布
返回:

统计结果文本

add_all(interval=3verify_content='')[源代码]

将合集中的所有用户加为好友,请小心应对调用频率限制!

参数:
  • interval – 间隔时间(秒)
  • verify_content – 验证说明文本

群聊的合集

classwxpy.Groups(group_list=None)[源代码]

群聊的合集,可用于按条件搜索

search(keywords=Noneusers=None**attributes)[源代码]

在群聊合集中,根据给定的条件进行搜索

参数:
  • keywords – 群聊名称关键词
  • users – 需包含的用户
  • attributes – 属性键值对,键可以是 owner(群主对象), is_owner(自身是否为群主), nick_name(精准名称) 等。
返回:

匹配条件的群聊列表

返回类型:

wxpy.Groups

Python-wxpy继承关系的更多相关文章

  1. 【python】继承关系和isinstance

    来源:廖雪峰 继承关系是: object -> Animal -> Dog -> Husky 那么,isinstance()就可以告诉我们,一个对象是否是某种类型.先创建3种类型的对 ...

  2. (转)Python异常类的继承关系

    原文:https://blog.csdn.net/Dragonfli_Lee/article/details/52350793 https://www.cnblogs.com/Lival/p/6203 ...

  3. Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系)

    Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系) 在面向对象的中,类与类之间存在三种关系:依赖关系.组合关系.继承关系. 1.依赖关系:将一个类的类名或对象当做参数传递给另一个函数被 ...

  4. Python rest-framework 中类的继承关系(as_view)

    一. 背景 最近几天一直在学习restful framework的源代码,用户请求的流程,在路由系统这块遇到一个疑问,关于类的继承关系,当请求进来到路由这块,执行as_view()方法的时候,为什么会 ...

  5. selenium之python源码解读-webdriver继承关系

    一.webdriver继承关系 在selenium中,无论是常用的Firefox Driver 还是Chrome Driver和Ie Drive,他们都继承至selenium\webdriver\re ...

  6. python的继承

    继承是面向对象的重要特征之一,继承是两个类或者多个类之间的父子关系,子进程继承了父进程的所有公有实例变量和方法.继承实现了代码的重用.重用已经存在的数据和行为,减少代码的重新编写,python在类名后 ...

  7. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  8. 【Python】python 普通继承方式和super继承方式

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.举一个很常见的例子:>>&g ...

  9. Python 类继承,__bases__, __mro__, super

    Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... ...

  10. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

随机推荐

  1. Tomcat启动时项目重复加载,导致资源初始化两次!

    一.现象: 每次启动Tomcat 的时候,工程会被加载两次 二.原因: 在tomcat/conf/server.xml配置虚拟目录引起,如下配置: 我们在Host标签里配置了appBase=" ...

  2. 洛谷P4561 [JXOI2018]排序问题(二分 期望)

    题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...

  3. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现

    大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌.这期我们继续实现接下来的功能--叫地主. 1.首先这两天,学习了DOTween,这是一个强大的Unity动画 ...

  4. Loadrunner 脚本优化-事务函数简介

    脚本优化-事务函数简介 by:授客 QQ:1033553122 1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 l ...

  5. Flutter 布局控件完结篇

    本文对Flutter的29种布局控件进行了总结分类,讲解一些布局上的优化策略,以及面对具体的布局时,如何去选择控件. 1. 系列文章 Flutter 布局详解 Flutter 布局(一)- Conta ...

  6. 淘宝开放平台使用WebClient,WebRequest访问时的错误提示导致麻烦

    淘宝开放平台(TOP)提供OAuth2.0支持 通过C#的WebClient/WebRequest直接访问时会提示grant type is empty,这是一个非常恼人的错误,你会发现即使传了这个参 ...

  7. canvas代替imgage,可以有效的提高大图片加载的速度!

    //加载zepto插件 <script> //定义图片的数量 var total = 17; //获取屏幕的宽度 var zWin = $(window); //定义渲染图片的方法 var ...

  8. Linux/Unix 中 wheel 组的来源

    使用过 Linux/Unix 的朋友应该知道,将用户添加都 wheel用户组,让用户可以通过在命令在前加 sudo 临时获取 root 用户的权限.但是有没有朋友会想知道为何这个用户组要交 wheel ...

  9. 前端AntD框架的upload组件上传图片时遇到的一些坑

    前言 本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 前端做文件上传这个功能,是很有技术难度的.既然框架给我们提供好了,那就直接用呗.结果用的时 ...

  10. java实现wc

    github项目传送门:https://github.com/yanghuipeng/wc 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程 ...