微信也可以自动回复了?使用Python开发微信功能!

在移动社交时代,微信已经成为我们生活不可或缺的一部分。微信自上线以来,一直没有自动回复的功能,想必是有他们的理念。但是有些人群,确实很需要这个功能,例如:

  • 不愿时刻被消息打扰的人
  • 消息需要批量处理的人们(比如微商)

对此,我设计了几个功能:

  • 收到消息立即自动回复
  • 收到消息延迟指定时间回复
  • 对不同好友定制不同的回复内容
  • 在手机端随时进行控制

和微信有关的第三方框架很多,比如「wxpy」「wxBot」等,今天要使用的是其中著名的「itchat」Python模块,它是由第三方开发者@LittleCoder等架构实现的接口,该API的使用场景可以不仅仅只是一个微信机器人,更多的功能可以由我们自己去发现拓展。

itchat的功能非常强大,调用却十分简单,同时,将「itchat」结合「matplotlib」「jieba」等模块,可以对我们的微信好友的信息进行一些收集与分析,让我们能更直观的了解我们自己的圈子。itchat的原理是通过扫码进行远程微信网页端的登录,然后通过在移动端进行操作,网页端进行响应,来实现一些功能,虽然似乎绕了个弯子,但是在微信的限制下,这似乎已经是一种最佳的方式了。 

首先我们需要考虑别的问题是:程序如何在微信端接收到你的指令。此时出现了一个非常重要的角色:文件管理器。(当网页端微信登陆后,消息列表会出现)此时,文件管理器充当了移动端和web端的桥梁。比如你给文件管理器传一个字符串作为指令,网页端接收到数据后就能根据你的预定来执行相应操作。

我们可以先通过设定几个全局变量来做作为功能的开关和保存数据的容器。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#自动回复开关

SWITCH_REPLY=True

#延迟回复开关

SWITCH_DELAY=False

#延迟时间

DELAY_TIME=120

#消息前缀开关

SWITCH_PREFIX=True

#消息前缀内容

PREFIX_CONTENT="[自动回复]"

#回复内容字典

REPLY_DICT={}

#延迟回复字典

DELAY_REPLY_DICT={}

我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取

然后通过判断web端在”文件管理器“中接收到的字符串指令来进行不同操作,这一部分的代码比较简单且冗长,这里就不贴出来了。

假如此时我们收到了朋友的消息,需要程序给出自动回复。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#获取发送消息的朋友的信息

  target_friend=itchat.search_friends(userName = msg['FromUserName'])

  if target_friend:

   #获取ta的昵称

   nickName=target_friend['NickName']

   if not REPLY_DICT.__contains__(nickName):

    #设置默认回复

    REPLY_DICT[nickName]="抱歉我有事暂未看到消息,稍后回复,若有急事可以电话联系(•ω•`)"

    

   reply_content=REPLY_DICT[nickName]

   #判断自动回复开关

   if SWITCH_REPLY:

    #判断延时回复开关

    if SWITCH_DELAY:

     localtime = time.time()

     DELAY_REPLY_DICT[nickName]=[localtime,msg['FromUserName']]

     print (DELAY_REPLY_DICT)

      

    if not SWITCH_DELAY:

     #判断消息前缀开关

     if SWITCH_PREFIX:

      reply_content = PREFIX_CONTENT + REPLY_DICT[nickName]

     else:

      reply_content = REPLY_DICT[nickName]

     #发送消息

     itchat.send(reply_content, toUserName=msg['FromUserName'])

收到消息立即回复很简单,但如何做延时回复呢?(这个功能有没有必要先不管)现在就回到技术的问题,如何实现可设置时间的延时自动回复。

一般发送消息需要用到队列,进行入队和出队。设置一个字典来保存消息发送者的数据。键为消息发送者的昵称,值是一个长度为2的数组,分别保存消息发送者的微信id和接收消息时的时间戳。这样将每条发送过来的朋友信息保存在这个字典中,再通过将设定延迟时间同消息时间戳求和与当前时间戳进行对比,若当前时间戳较大,那么执行发送消息的操作。

此时再开启一个线程作为定时任务,定时去检测字典中每条数据是否到达了发送的临界要求(当前时间戳>=消息时间戳+设定的延迟时间)可以采用threading的Timer来充当定时器,不过要注意使用递归,否则将会出现运行一次就结束的情况。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#延迟发送消息的函数

def delay_reply():

 #print("开始执行")

 global DELAY_REPLY_DICT

 if SWITCH_DELAY:

  while len(DELAY_REPLY_DICT)>0:

   localtime = time.time()

   # print (localtime)

   # print (DELAY_REPLY_DICT[item][0])

   # print (int(DELAY_TIME))

   for item in list(DELAY_REPLY_DICT.keys()):

    if SWITCH_REPLY:

     reply_content = item + "," + str(round(int(DELAY_TIME) / 60, 1)) + "分钟过去了," + REPLY_DICT[item]

     itchat.send(reply_content, toUserName=DELAY_REPLY_DICT[item][1])

     # print ("发送消息")

     del DELAY_REPLY_DICT[item]

   print (DELAY_REPLY_DICT)

 

 global timer1

 timer1=threading.Timer(DELAY_TIME,delay_reply)

 timer1.start()

这时功能基本已经完成了,这就结束了吗?

用过微信web端的同学应该知道,当web端长期处于未操作的状态下会失去连接。在这个情况下,假如你长时间未收到微信消息,后台程序将会与微信失去连接,再次开启需要登上服务器重启程序,这显然非常麻烦。有没有什么简单的解决办法呢?

一些应用的后台通常会做一道心跳检测机制,我们可以模仿这个思路,定时给我的”文件管理器“发一个字符串,来保持连接。

1

2

3

4

5

6

def keep_alive():

 text="保持登录"

 itchat.send(text, toUserName="filehelper")

 global timer2

 timer2 = threading.Timer(60*60,keep_alive)

 timer2.start()

最后,我们需要将这个程序发布在服务器上,让它全天候为我的微信服务。

 

这里需要注意,如果仅用 python xxxx.py 来运行的话,关闭shell会导致进程结束,所以我们需要使用 nohup python xxxx.py & 来全方位守护进程,这里啰嗦一句,nohup和&的功能是不一样的,很多人容易混淆,感兴趣的话可以去查下资料区分一下。

觉得文章还可以的话不妨点个赞,有任何意见或者看法欢迎大家评论!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了编写微信自动回复脚本,我们可以使用itchat库,该库提供了对微信的接口,可以通过Python程序与微信进行交互。 以下是一个简单的微信自动回复脚本示例: ```python import itchat # 回复消息的函数 @itchat.msg_register(itchat.content.TEXT) def reply_msg(msg): if msg['FromUserName'] != myUserName: itchat.send_msg('自动回复:' + msg['Text'], msg['FromUserName']) # 登录微信 itchat.auto_login(hotReload=True) # 获取自己的用户名 myUserName = itchat.get_friends(update=True)[0]["UserName"] # 运行自动回复程序 itchat.run() ``` 这个脚本,我们使用`itchat.msg_register()`方法注册了一个消息处理函数`reply_msg()`,当收到文本消息时,该函数会自动回复消息内容,并附加上“自动回复”前缀。同时我们使用`itchat.auto_login()`方法登录微信,然后使用`itchat.get_friends()`方法获取自己的用户名,并保存到变量`myUserName`。最后,我们使用`itchat.run()`方法启动自动回复程序。 值得注意的是,为了使该脚本能够长时间运行,我们需要在登录时设置`hotReload=True`,这样可以让登录状态得到保存,避免重复扫码登录的情况发生。 当我们运行脚本后,微信的好友发送消息时,程序会自动回复消息内容,并附加上“自动回复”前缀。 ### 回答2: 使用Python编写微信自动回复脚本是可行的。首先,我们需要安装好Python运行环境和相关的第三方库,如itchat。然后,通过编写Python脚本,我们可以实现对微信好友消息的监听和自动回复。 在脚本,我们可以使用itchat库的API来实现微信的登录和消息的接收。通过捕获微信好友的文本消息,我们可以根据消息内容编写相应的逻辑来进行回复。例如,可以设置一些关键词回复,当好友发送包含特定关键词的消息时,自动回复相应的内容。 在编写脚本时,我们还可以使用正则表达式等高级技术来匹配和处理消息。例如,可以使用正则表达式来匹配特定格式的消息,并提取其的信息用于回复。还可以利用其他Python的库来实现更复杂的逻辑,如将接收到的消息进行文本处理、分析等。 此外,我们还可以通过配置文件的方式,使脚本可以针对不同的好友或消息类型进行不同的回复。通过读取配置文件,可以灵活地设置回复规则,实现个性化的自动回复功能。 总结来说,使用Python编写微信自动回复脚本是一种方便且可行的方式。我们可以通过编写Python脚本,利用itchat库的API和其他Python的库,实现对微信好友消息的监听和自动回复,从而实现个性化和自动化的微信聊天机器人。 ### 回答3: 使用Python编写微信自动回复脚本需要先安装一些必要的库,比如itchat,它可以模拟微信网页版的操作。 首先,在命令行安装itchat库,可以使用pip命令:pip install itchat 然后,在Python脚本导入itchat库:import itchat 接着,使用itchat库的login()函数登录微信账号:itchat.login() 登录成功后可以调用itchat库的函数获取微信好友列表:itchat.get_friends() 接下来,可以使用itchat库的run()函数开启微信消息监听模式,实现自动回复功能:itchat.run() 在run()函数,可以使用装饰器@itchat.msg_register()来装饰自定义的函数,这个函数将会在收到好友消息时被调用。通过这个函数可以进行消息的处理和回复。 例如,我们可以定义一个回复消息的函数reply_to_friend(msg),其msg是一个字典包含了收到的消息的具体信息。在函数的内部可以根据消息的类型进行逻辑判断和回复。 最后,运行整个Python脚本,扫描二维码登录微信账号后,即可实现自动回复功能。 需要注意的是,使用微信自动回复脚本有一定的限制,比如在非越狱的iPhone上,微信有防撤回机制,导致不能自动回复撤回消息。同时,使用自动回复脚本也需要谨慎,不要违反微信使用规定,以免被封号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值