当前位置: 首页 > 后端技术 > Python

【Python开发微信小助手】01自动回复功能

时间:2023-03-25 20:08:11 Python

简介:全国疫情好转很多,但我还困在老家,无法复工。在家要看一些东西,码点码一直在状态。【微信个人助理Python开发】将是一个长期更新系列。既然叫私人助理,就要满足不同人的不同需求。每个需求都会是一个独立的功能模块,代码也会模块化开发。需求背景作为微信的深度用户,在工作的时候经常会收到各种各样的微信消息。重点是我是人,记忆力不是很好,处理完这些消息都忘了自己要干什么了。所以,模仿QQ的自动回复功能,我打算也做一个微信自动回复功能。一来不会影响我的工作,二来不会因为我很久没有回复或者仓促回复而让人觉得不礼貌。实现自动回复公众号上篇文章讲了很多Python使用ItChat登录微信发送消息的例子,也有相应的代码。本文不会介绍ItChat库。先新建一个主程序main.py,然后登录微信:importitchatitchat.auto_login(hotReload=True)itchat.run()登录微信后,就开始收听微信消息了。可以通过监听获取发件人的ID,以及发件人的昵称和信件内容等:@itchat.msg_register([TEXT,MAP,CARD,NOTE,SHARING])deftext_reply(msg):sender=msg['User']['UserName']if'UserName'inmsg['User']else'filehelper'nickname=msg['User']['NickName']if'NickName'inmsg['User']else'filehelper'content=msg['Content']下面分析一下自动回复这个函数。自动回复顾名思义,自然就是在有人发了消息之后,用固定的或者自定义的句子自动回复他。发件人的ID之前是已知的。如果你想回复一个固定的消息,就像这样:itchat。】工作中,请留言!',sender)或自定义:itchat.send_msg('您的消息<{}>已收到,正忙,稍后回复!'.format(content),sender)个人倾向后者,将他发送的消息发回给他会让他知道我确实收到了消息,但我现在没有时间处理它。下图右边是开启自动回复功能的测试账号(感谢朋友提供的壁纸):自动回复升级到这里,基本的自动回复就完成了,是不是很简单?这时候有人会说:我不用一直工作。如果我有空和别人聊天,这个【自动回复】会一直弹出。有事请留言!,即使我不讨厌,别人也会讨厌。所以这时候除了关闭个人助理之外,还有一个办法就是给个人助理加一个开关。忙碌时打开开关,空闲时关闭开关,方便您控制您的私人助理。怎么做?只需要在主程序中添加一个全局变量,通过这个全局变量来控制自动回复功能的开启或关闭:is_auto_reply=False#你还需要在函数的开头声明这个为全局变量...globalis_auto_reply...上面的代码表示默认关闭自动回复功能。那么,如何改变它的状态呢?我们只需要向文件传输助手发送相应的命令即可。然后最上面的代码,在自动回复前加上判断:cmd=content.lstrip().rstrip()ifcmd=='开启自动回复':is_auto_reply=Trueelifcmd=='关闭自动回复':is_auto_reply=False通过启用自动回复和禁用自动回复两条命令来控制自动回复功能的开启和关闭。有时发送的指令可能不标准,所以在第一句做简单的预处理。【本文来自TitusCosmos微信公众号Titus,ID为TitusCosmos,转载请注明!][为防止各种爬虫在网络上四处乱爬,故意删除原作者信息,故在文中加入作者信息,望读者谅解]同时,对于此类控制指令,控制者往往希望个人助理在执行命令后有响应。一些反馈,所以改变功能的启用状态后,需要向控制器返回状态信息:ifcmd=='自动回复开启':is_auto_reply=Trueitchat.send_msg('自动回复开启!',sender)elifcmd=='Turnoffauto-reply':is_auto_reply=Falseitchat.send_msg('Auto-replyhasbeenturnedoff!',sender)最后,如果收到的消息不是控制命令,它是在决定是否自动回复之前需要先判断是否启用了自动回复功能Reply:#继续前面的代码else:ifis_auto_reply:itchat.send_msg('【自动回复】工作中,有什么事请留言!',sender)#oritchat.send_msg('您的消息<{}>已收到,正在忙,稍后回复!'.format(content),sender)else:pass至此,我们已经成功添加了开关自动回复功能。下图右侧是开启自动回复功能的测试账号:自动回复再升级。可能有人会觉得我自动回复的内容太老土了。能不能好玩点,或者在使用的时候可以自定义自动回复的内容吗?羊毛布?当然!同上,添加一个全局变量,声明:custom_reply_content='【自动回复】工作中,有什么请留言!'#还需要在函数的最开始声明这是一个全局变量...globalis_auto_reply,custom_reply_content...和之前一样,需要添加判断和设置自动回复内容指令的语句。不同的是,现在需要额外输入一条自定义自动回复内容,默认用中文逗号分隔:#如果收到:设置自动回复,我现在忙,稍后回复你如果可能的!...elifcmd.startswith('设置自动回复,'):custom_reply_content=content.replace('设置自动回复,','')itchat.send_msg('自动回复内容设置成功!',sender)..然后直接在自动回复里回复这个custom_reply_content就可以了。同样,下图右边是开启了自动回复功能的测试账号:会生效,因为我们没有判断是不是你自己发来的消息。所以还是需要在代码中限制一下。必须是文件传输助手或自己微信发送的信息来判断是否是指令。代码如下:ifnickname=='filehelper'ornickname=='AdminNameToFillIn':cmd=content.lstrip().rstrip()ifcmd=='Autoreplyenabled':is_auto_reply=Trueitchat.send_msg('Autoreplyenabled!',sender)elifcmd=='Autoreplydisabled':is_auto_reply=Falseitchat.send_msg('自动回复已关闭!',sender)elifcmd.startswith('自动回复已设置,'):custom_reply_content=content.replace('自动回复已设置,','')itchat.send_msg('自动回复内容已设置Success!',sender)else:ifis_auto_reply:itchat.send_msg('【自动回复】生效,请留言!',sender)#oritchat.send_msg('您的留言<{}>已收到,现在忙,稍后回复!'.format(content),sender)else:pass只有在这里,助手才有完整的自动回复功能。后记不管写什么,都希望能和更多的人交流。如果您有任何问题或需求,欢迎随时交流。我所有的项目源码都会放在下面的github仓库,有需要的可以参考,有问题请指正,谢谢!https://github.com/TitusWongCN/以下是我的公众号,里面有一些记录,有兴趣可以扫一扫: