wxpy微信模块学习之聊天对象
聊天对象
通过Bot的Chats(),friends(),groups(),mps()方法,可分别获取到当前机器人的 所有聊天对象、好友、群聊,以及公众号列表。
获得的合集有合集方法,如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,表示个体聊天对象(而非群聊)
Friend(好友对象)、Member(群成员对象)、Mp(公众号对象)
拥有 性别、省份、城市、是否为好友 等属性
拥有 加为好友User.add(),接收为好友User.accept()等方法
基本聊天对象
所有聊天对象都继承于”基本聊天对象”,并拥有相应的属性和方法。
class wxpy.Chat(raw,bot)
单个用户User和群聊Group的基础类
bot:所属的机器人对象;
raw:原始数据;
puid:持续有效,且稳定唯一的聊天对象/用户ID,适用于持久保存;使用Bot.enable_puid()来启动;
nick_name:该聊天对象的昵称 (好友、群员的昵称,或群名称);
name:该聊天对象的友好名称(从 备注名称、群聊显示名称、昵称(或群名称),或微信号中按序选取第一个可用的);
send(content=None,media_id=None):
参数:content -- 由 前缀 和 内容 两个部分组成,若 省略前缀,将作为纯文本消息发送
前缀 部分可为: ‘@fil@’, ‘@img@’, ‘@msg@’, ‘@vid@’ (不含引号)
分别表示: 文件,图片,纯文本,视频
内容 部分可为: 文件、图片、视频的路径,或纯文本的内容
media_id -- 填写后可省略上传过程
返回类型:wxpy.SentMessage
send_msg(msg=None)
发送文本消息
参数:msg -- 文本内容
返回类型:wxpy.SentMessage
send_image(path,media_id=None)
发送图片
参数:path -- 文本路径
media_id -- 填写后可省略上传过程
返回类型:wxpy.SentMessage
sent_file(path,media_id=None)
发送文件
参数:path -- 文本路径
media_id -- 填写后可省略上传过程
返回类型:wxpy.SentMessage
sent_video(path,media_id=None)
发送视频
参数:path -- 文本路径
media_id -- 填写后可省略上传过程
返回类型:wxpy.SentMessage
sent_raw_msg(raw_type, raw_content, uri=None, msg_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():取消将当前聊天对象置顶;
sent_video(path,media_id=None)
获取头像
参数:save_path -- 保存路径(后缀通常为.jpg),若为None则返回字节数据
uin:微信中的聊天对象ID,固定且唯一(因微信的隐私策略,该属性有时无法被获取到,建议使用puid作为用户的唯一ID);
alias:若用户进行过一次性的 “设置微信号” 操作,则该值为用户设置的”微信号”,固定且唯一(同上);
wxid:聊天对象的微信ID (实际为 .alias 或 .uin)(同上);
user_name:该聊天对象的内部 ID,通常不需要用到;
单个聊天对象
class wxpy.User(raw,bot)
好友(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;
好友
class wxpy.Friend(raw,bot)
好友对象
群聊
class wxpy.Group(raw,bot)
群聊对象
members:群聊的成员列表;
search(keywords=None,**attributes):
在群聊中搜索成员
参数:keywords -- 成员名称关键词;
attributes -- 属性键值对;
返回:匹配的群聊成员;
返回类型:wxpy.Chats;
owner:返回群主对象;
is_owner:判断所属 bot 是否为群管理员;
self:机器人自身 (作为群成员);
upgate_group(members_detail=False):
更新群聊的信息
参数:members_details -- 是否包括群聊成员的详细信息 (地区、性别、签名等);
add_members(users,use_invitation=False):
向群聊中加入用户
参数:users -- 待加入的用户列表或单个用户;
use_invitation -- 使用发送邀请的方式;
remove_members(members):
从群聊中移除用户
参数:members -- 待移除的用户列表或单个用户;
rename_group(name):
修改群聊名称
参数:name -- 新的名称,超长部分会被截断 (最长32字节);
群成员
class wxpy.Member(raw,bot)
群聊成员对象
display_name:群聊的显示昵称;
remove():从群聊中移除该成员;
name:该群成员的友好名称(从 群聊显示名称、昵称(或群名称),或微信号中,按序选取第一个可用的);
公众号
class wxpy.Mp(raw,bot)
公众号对象
聊天对象合集
class wxpy.Chats(raw,bot)
stats()与stats_text():群统计好友或群成员的性别和地区分布;
bot.friends().stats_text() # 游否 共有 100 位微信好友\n\n男性: 67 (67.0%)\n女性: 23 (23.0%) ...
search(keywords=None,**attributes):
在群聊中搜索成员
参数:keywords -- 成员名称关键词;
attributes -- 属性键值对,键可以是 sex(性别), province(省份), city(城市) 等。
例如可指定 province=’广东’;
返回:匹配的群聊成员;
返回类型:wxpy.Chats;
stats(attribs=('sex','province',‘city')):
统计各属性的分布情况
参数:attribs -- 需统计的属性列表或元组;
返回:统计结果;
stats_text(total = True,sex=True,top_province=10,top_cities=10):
简单的统计结果的文本
参数:total -- 总体数量;
sex -- 性别分布;
top_provinces -- 省份分布;
top_citys -- 城市分布;
返回:统计结果文本;
add_all(interval=3,verify_content=""):
将合集中的所有用户加为好友,请小心应对调用频率限制!
参数:interval -- 间隔时间(秒);
verify_content-- 验证说明文本;
群聊合集
class wxpy.Groups(group_list=None)
群聊的合集,可用于按条件搜索
search(keywords=None,users=None,**attributes):
在群聊合集中,根据给定的条件进行搜索
参数:keywords -- 群聊名称关键词;
users -- 需包含的用户;
attributes -- 属性键值对,键可以是 owner(群主对象), is_owner(自身是否为群主),
nick_name(精准名称) 等
返回:匹配条件的群聊列表;
返回类型:wxpy.Groups;