python搭建微信自动回复

用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'文件'))
		







猜你喜欢

转载自blog.csdn.net/ljt735029684/article/details/79815769
今日推荐