大家好,欢迎来到IT知识分享网。
注意!!!只有能够登录网页版微信的账号,才可以正常使用wxpy库。
官方文档:https://wxpy.readthedocs.io/zh/latest/index.html
推荐最近比较热门的微信机器人项目:https://github.com/miloira/wxhook
# import os # os.environ["WXHOOK_LOG_LEVEL"] = "INFO" # 修改日志输出级别 # os.environ["WXHOOK_LOG_FORMAT"] = "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{message}</level>" # 修改日志输出格式 from wxhook import Bot from wxhook import events from wxhook.model import Event def on_login(bot: Bot, event: Event): print("登录成功之后会触发这个函数") def on_start(bot: Bot): print("微信客户端打开之后会触发这个函数") def on_stop(bot: Bot): print("关闭微信客户端之前会触发这个函数") def on_before_message(bot: Bot, event: Event): print("消息事件处理之前") def on_after_message(bot: Bot, event: Event): print("消息事件处理之后") bot = Bot( # faked_version="3.9.10.19", # 解除微信低版本限制 on_login=on_login, on_start=on_start, on_stop=on_stop, on_before_message=on_before_message, on_after_message=on_after_message ) # 消息回调地址 # bot.set_webhook_url("http://127.0.0.1:8000") @bot.handle(events.TEXT_MESSAGE) def on_message(bot: Bot, event: Event): bot.send_text("filehelper", "hello world!") bot.run()
文章地址:https://blog.csdn.net/_/article/details/
机器人对象
—登录和初始化
from wxpy import * def login(): print('状态:登录成功 ',end='') def login_out(): print('微信已退出!') bot=Bot(login_callback=login,logout_callback=login_out,cache_path='login.pkl',qr_path='login_qr.png') print('当前用户:'+bot.self.name) bot.auto_mark_read()#自动清除手机端消息红点提示 bot.enable_puid(path='wxpy_puid.pkl')#启用puid属性 具有稳定性的标识
聊天对象
—接受好友添加
@bot.register(msg_types=FRIENDS) def auto_accept(msg): if '自定义消息' in msg.text: new_friend=msg.card.accept() #或new_friend=bot.accept_friend(msg.card) new_friend.send('已添加成功了哦!')
—获取用户信息
my_chats=bot.chats().search('A招商代理~欣怡')[0]#按关键字搜索好友 print(my_chats.nick_name) #原始昵称 print(my_chats.name) #获取好友名称 my_chats.set_remark_name('小姐姐')#设置好友备注 print(my_chats.remark_name) #获取好友备注 print(my_chats.sex) #获取性别 1为男 2为女 print(my_chats.province) #获取省份名 print(my_chats.city) #获取城市名 print(my_chats.signature) #获取个性签名 print(my_chats.is_friend) #检测是否是好友 with open(my_chats.name+'.jpg','wb') as f: f.write(my_chats.get_avatar())#获取头像 print('用户:'+my_chats+' 头像已保存!') 输出: >>状态:登录成功 当前用户:写诗喂狗 >><Friend: 多多> >>A招商代理~欣怡 >>小姐姐 >>2 >>上海 >>崇明 >>当初的愿望实现了吗 >><Friend: 小姐姐> >>用户:小姐姐 头像已保存!
—操作聊天对象
friend=bot.friends().search('多多')[0]#按关键字搜索好友 friend.pin() #置顶聊天对象 friend.unpin() #取消置顶 friend.mark_as_read() #消除该聊天对象未读红点 friend.add(verify_content='验证消息') #添加当前用户为好友 friend.accept() #接受当前用户添加
群聊对象
—创建群聊
bot.create_group(users,topic=None)
参数:
- users – 用户列表 (不含自己,至少 2 位)
- topic – 群名称
返回:
- 若建群成功,返回一个新的群聊对象
返回类型:
- wxpy.Group
—获取群聊信息
my_groups=bot.groups().search('华夏校园成长群')[0]#关键字搜索群聊 print(my_groups.name) #获取群聊名 print(my_groups.owner.name) #获取群主名 print(my_groups.is_owner) #检测机器人是否是群主 print(my_groups.self.name) #获取机器人自己的名称 print(my_groups.members) #获取群聊所有成员名 输出: >>华夏校园成长群 >>杨震 >>False >>写诗喂狗 >>[<Member: 杨震>, <Member: 话别>, <Member: LGE-Decade>, <Member: 写诗喂狗>, <Member: 你是天使吗>, <Member: 希望再爱你一生>, <Member: 陈勇刚>, <Member: 浅唱つ繁花似雨>, <Member: 孤麋鹿>, <Member: 陈佳磊>, <Member: 辉强>, <Member: 霏晖>, <Member: Light>, <Member: Rebecca>, <Member: Amy>]
—群聊操作
my_groups=bot.groups().search(groupname)[0] #搜索群 #groupname是字符串类型 my_groups.update_group(members_details=True) #更新群聊的信息 #更新群成员的地区、性别、签名信息 my_groups.add_members(users, use_invitation=False)#向群聊中加入用户 #users可以是一个对象也可以是一个列表 my_groups.remove_members(members) #从群聊中移除用户 #members可以是一个对象也可以是一个列表 my_groups.rename_group(name) #修改群聊名称 #name是字符串类型
—群成员操作
my_groups=bot.groups().search('华夏校园成长群')[0]#关键字搜索群聊 member=my_groups.members.search('Light')[0] #获取成员对象 member.remove() #群主移除群成员 print(member.name) #获取成员名称 print(member.display_name) #获取成员在群里的名称
发送消息
—发送文本消息
friend.send_msg('文本消息')
—发送图片消息
friend.send_image('1.png',media_id=None)#media_id=None省略发送过程
—发送文件
friend.send_file('cs.py',media_id=None)#media_id=None省略发送过程
—发送视频
friend.send_video('1.mp4',media_id=None)#media_id=None省略发送过程
—发送名片
friend.send_raw_msg( # 名片的原始消息类型 raw_type=42, # 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友 raw_content='<msg username="微信号" nickname="昵称"/>' )
—发送原始数据
friend.send_raw_msg( # 名片的原始消息类型 raw_type=42, # 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友 raw_content='<msg username="wxpy_bot" nickname="wxpy 机器人"/>' )
参数:
- raw_type (int) – 原始的整数消息类型
- raw_content (str) – 原始的消息内容
- uri (str) – 请求路径,默认为 ‘/webwxsendmsg’
- msg_ext (dict) – 消息的扩展属性 (会被更新到 Msg 键中)
消息处理
—消息回复
- chats – 消息所在的聊天对象:单个或列表形式的多个聊天对象或聊天类型,为空时匹配所有聊天对象
- msg_types – 消息的类型:单个或列表形式的多个消息类型,为空时匹配所有消息类型 (SYSTEM 类消息除外)
- except_self – 排除由自己发送的消息
- run_async – 是否异步执行所配置的函数:可提高响应速度
- enabled – 当前配置的默认开启状态,可事后动态开启或关闭
msg_types
消息类型可选参数:
# 文本 TEXT = 'Text' # 位置 MAP = 'Map' # 名片 CARD = 'Card' # 提示 NOTE = 'Note' # 分享 SHARING = 'Sharing' # 图片 PICTURE = 'Picture' # 语音 RECORDING = 'Recording' # 文件 ATTACHMENT = 'Attachment' # 视频 VIDEO = 'Video' # 好友请求 FRIENDS = 'Friends' # 系统 SYSTEM = 'System'
friends=bot.friends() @bot.register(friends) def reply(msg): msg.reply('回复的内容') embed()
—基本属性
friends=bot.friends() @bot.register(friends) def reply(msg): print(msg.type)#获取消息类型 print(msg.bot)#获取消息发送者 print(msg.id)#获取消息的唯一ID embed() #给机器人发送任意信息后 输出: >>Text >><Bot: 写诗喂狗> >>
—内容数据
@bot.register(friends) def reply(msg): print(msg.text) #消息文本内容 msg.get_file(save_path=msg.file_name)#保存文件 print(msg.file_name) #获取文件名 print(msg.file_size) #获取文件大小 print(msg.media_id) #获取媒体文件ID print(msg.raw) #获取文件原始数据 embed() 输出: >>None >>-.png >> >>{
'MsgId': '', 'FromUserName': '@d167feda5970b4fcdaf31d772f4528ca73637d2ba7ef01dee5f9', 'ToUserName': '@484d6acf1c391ff77040aaac70e49f7e2c04d8f2319c25a17a', 'MsgType': 3, 'Content': '@c215aa3a8be92eb237c4637a8db8694db3257ba863fae934c7fbedef2352dd61b44f1ef8c4d43da3ce09ac51a59caf08be7f54c93bef42d64e37633b2e0986dd5de634fb53077cbc06ca76c09243d00f73a3a63d95c3fdfea24ff942a4c1319d8a61d1af75f3a3893d3b3b1666f46e33b5ae01e3155efeb85a56df03a9aa01c4ec0ce4d000495dbcc472e072adc591ee8bd587ce3e82b48f4bdc17e708c79536c2345c67ba94aa8bbbdfeede6dee4df3e19c5712c6d6f9d6390da93c1c470d96d786f6caef51e601d2dee8df8a47fee34f1d9d287c8ec30264b53befe2b5be1bff72e36ec9935eeb00bd664c7449ec686dcdbaf5a470d782e1914a20dbd30eb1939a87d486fbddc72f6135ec68e370f8283bafb73356a11fce573adcc8824fd35ceeec6c2c2c37b28bc5038a27f6de6be55b36ab16842fa2886b38cebdd20d89aed19d5fc85f18e12f99c3fc0f3d53462efc27b15b8b2a3710a825dfb4ec210fcfd2af5e24b8f6904ebfa0974abb3b2eaeac4cc210ada62daa53d3567e5deec37ffc8d6c675f3d78bcef0ef146b47dbd99c519fa9060cceda9da0a8999e9a1e8e4778d81dcde714cbe1a469c58f9c33e7f93d4fd6c80cff04cc27dc211c4d8afd68b80a4a1a21b3f044660bfea151d7b73ba9aae11993eaf65dc40bdf3a42abd3b0b959f0fc8ab63aa6b1c2d6181fec2dfeeb03f8f63a2445b1637d584a38b1627a7c72a2ecab5e3b5ebaf7d4bc2f43a0376a7f5bb4bb9c775d0ab8ccadd6078f7be778a8a6dcc5dc87a1f77ee9b5ebbbb358a32e9ea828c9b3a9bd0b9e4ce6d3fdcd4622f9ec', 'Status': 3, 'ImgStatus': 2, 'CreateTime': , 'VoiceLength': 0, 'PlayLength': 0, 'FileName': '-.png', 'FileSize': '', 'MediaId': '', 'Url': '', 'AppMsgType': 0, 'StatusNotifyCode': 0, 'StatusNotifyUserName': '', 'RecommendInfo': {
'UserName': '', 'NickName': '', 'Num': 0, 'Province': '', 'City': '', 'Content': '', 'Signature': '', 'Alias': '', 'Scene': 0, 'VerifyFlag': 0, 'AttrStatus': 0, 'Sex': 0, 'Ticket': '', 'OpCode': 0}, 'ForwardFlag': 0, 'AppInfo': {
'AppID': '', 'Type': 0}, 'HasProductId': 0, 'Ticket': '', 'ImgHeight': 80, 'ImgWidth': 120, 'SubMsgType': 0, 'NewMsgId': , 'OriContent': '', 'EncryFileName': '', 'Type': 'Picture', 'Text': <function get_download_fn.<locals>.download_fn at 0x00000131A155B0D0>}
—用户相关
@bot.register(friends) def reply(msg): print(msg.chat) #消息所在的聊天对话 #对于自己发送的消息,为消息的接收者 #对于别人发送的消息,为消息的发送者 print(msg.sender) #消息的发送者 print(msg.reciver) #消息的接受者 print(msg.member) #消息的实际发送者 print(msg.card) #好友请求中的请求用户 名片消息中的推荐用户 embed()
—群聊相关
groups=bot.groups() @bot.register(groups) def reply(msg): print(msg.is_at)#群聊中被@时返回True embed()
—时间相关
@bot.register(friends) def reply(msg): print(msg.create_time)#服务端发送数据 print(msg.recive_time)#本地接收时间 print(msg.latency) #消息延时秒数 embed() 输出: >>2019-06-18 22:18:30
—其他属性
@bot.register(friends) def reply(msg): print(msg.url) #分享消息的url print(msg.location)#获取位置信息 embed() 输出: >>http://apis.map..com/uri/v1/geocoder?coord=30.,114. >>{
'x': 30., 'y': 118., 'scale': 16, 'label': '位置名', 'maptype': 0, 'poiname': '[位置]', 'poiid': ''}
@bot.register(friends) def reply(msg): print(msg.img_height) #图片高度 print(msg.img_width) #图片宽度 print(msg.play_length) #视频长度 print(msg.voice_lentgth)#语音长度 embed() 输出: >>120 >>120
—回复方法
msg.reply(...) Message.reply_image(...) Message.reply_file(...) Message.reply_video(...) Message.reply_msg(...) Message.reply_raw_msg(...)
—消息转发
friend=bot.friends().search('多多')[0] @bot.register(friend) def reply(msg): #将收到的消息转发回去 msg.forward(friend,prefix='这是前缀消息',suffix='这是后缀消息') embed()
参数:
- chat (Chat) – 接收转发消息的聊天对象
- prefix (str) – 转发时增加的 前缀 文本,原消息为文本时会自动换行
- suffix (str) – 转发时增加的 后缀 文本,原消息为文本时会自动换行
- raise_for_unsupported (bool) – 为 True 时,将为不支持的消息类型抛出
NotImplementedError 异常
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126130.html