用python实现微信自动回复很简单,因为python有一个itchat模块,作者把微信网页版抓的包封装成到这个模块里,感谢作者
itchat可以通过pip install itchat命令直接导入,或者 在点击打开链接下载
先导入模块:
import itchat
登录与发送消息:
#登录操作(执行后会让你扫二维码)
itchat.auto_login()
#给文件助手发送消息
itchat.send("给自己发消息", toUserName = 'filehelper')
特别说明:UserName不是备注也不是昵称, 你可以当成某个唯一标识符,但每次登录都会改变
send() 函数无法发给自己消息,如果一定要发给自己消息,请通过文件助手
可以通过
itchat.auto_login(hotReload = True)
用来暂时保留登录状态
通讯录所有人的UserName可以通过
itchat.get_friends(update = True)[0:]['UserName']
来获取
通讯录第一个(第[0]位)元素是自己的UserName
当然现在你还不知道UserName对应的人是谁,所以你只能全部遍历,但 此时你肯定想到如何使用这几个来实现消息群发了(请自己试着实现一下)
想对某个特定的人发消息,这里我就先不说了,毕竟主题还是自动回复
接下来我来说一个itchat里方便于自动回复的东西——msg.register装饰器,实质上就是个事件监听器,有人发消息来便调用
@itchat.msg_register(['Text'])
def text_reply(msg):
return u'[自动回复] %s' % msg['Text']
这里的Text是文本消息,如果发送者发送的是文字消息,msg['Text']里存放着文本消息,如果对方发的是图片,语音的、,text里放的便是下载的方法
然后还有其他,如'Picture', 'Video', 'Recording', 'Attachment', 'Note'
函数返回时执行send函数,所以这相当于
itchat.send("[自动回复] %s" % msg['Text'], toUserName = msg['FromUserName'])
可以通过msg['FromUserName']得到发信者的UserName
主函数里要通过itchat.run()来执行,
这里先提供一部分源码:
import itchat
import time
@itchat.msg_register(['Text', 'Node', 'Map', 'Sharing', 'Card'])
def text_reply(msg):
print(msg)
global boot
#如果是发送人不是自己
if boot == True and msg['FromUserName'] != myUserName:
#发送一条消息给文件
itchat.send(
msg = u"[%s] @%s发来一条消息: %s" %
((time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime']) )),
msg['User']['RemarkName'], msg['Text']),
toUserName = 'filehelper')
#return实际上是调用send
return u'[自动回复]抱歉, 我暂时不在,等会再联系。\n[系统]已将您的消息发给Master\n内容为:%s\n' % msg['Text']
#如果是自己发的(即管理员消息)
elif msg['FromUserName'] == myUserName:
if msg['Text'] == 'Open':
boot = True
itchat.send("自动回复已开启", toUserName = 'filehelper')
# itchat.send(u'[自动回复]抱歉, 我暂时不在,等会再联系。\n[系统]已将您的消息发给Master\n内容为:%s\n' % msg['Text'], toUserName = 'filehelper')
elif msg['Text'] == 'Close':
boot = False
itchat.send("自动回复已关闭", toUserName = 'filehelper')
elif msg['Text'] == 'shutdown':
itchat.send("账号已下线", toUserName = 'filehelper')
itchat.logout()
if __name__ == '__main__':
itchat.auto_login(hotReload = True , enableCmdQR = True)
# itchat.load_login_status()
#获取自己的临时ID:联系人第0个即自己
myUserName = itchat.get_friends(update = True)[0]['UserName']
#是否开启
boot = True
itchat.run()
其中boot为控制开启关闭的变量, msg['CreateTime']的时间数我就不说了
msg['User']['RemarkName'] 即为备注姓名,
msg['User']['NickName'] 为昵称
其他参数请查阅官方文档以及源码
下面给个将发信者发送的图片,表情,语言,视频,文件等发送给文件助手的函数
代码里都写得很清楚了,我就不解释了,今天好困,先溜了
@itchat.msg_register(['Picture', 'Video', 'Recording', 'Attachment'])
def file_reply(msg):
print(msg)
if boot == True:# and msg['FromUserName'] != myUserName:
#msg['Text']是一个文件下载函数,下载文件到当前路径
msg['Text'](msg['FileName'])
#将下载的文件,按Type发送给文件助手,若指定类型不存在,就默认为file
msgsend = '@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName'])
"""
send消息,['@fil@', '@img@', '@msg@', '@vid@'],四个参数分别发送文件,图片,纯文本,视频音频
"""
itchat.send(msgsend, toUserName = 'filehelper')
return u"[自动回复]抱歉, 我暂时不在,等会再联系。\n[系统]已自动将您的[%s]发送给Master" % ({'Picture' : u'图片', 'Video' : u'视频', 'Recording' : u'语音'}.get(msg['Type'], u'文件'))