Python实现微信自动回复和指定发送群聊消息

本文章首发于公众号: 琦度 

Python实现微信自动回复和指定发送群聊消息_第1张图片

阅读本文大约需要5分钟

先说一件事,抱着“沉淀成本不是成本”的态度,最近会将以前写的文章删除或者进行合并,按照高人的指点进行格式上和内容上的完善。

因为一直写基础的缘故,今天朋友提了下面这样一个需求。就顺便写了一个小项目和大家分享一下

(图片是微信截图粘贴不了,抱歉。但不影响下文阅读)

 

2

itchat:

强大的微信个人号的开源接口,使用几十行的代码就可以让你快速了解你的微信好友,群,公众号的信息。像我们之前看到的统计个性签名,好友全国分布等等之类的信息其实在你了解itchat之后都可以十分简单的实现。

 

这次小项目的重点不是介绍itchat,我会解释用到的部分(写在程序的注释部分)。如果你不熟悉或者想了解整个模块欢迎公众号留言告诉我,会在以后和大家进行分享。

 

导入模块和申明变量:

 

 1 import itchat
 2 from itchat.content import *
 3
 4
 5 gname = '设定群名'
 6 context = '这是一条我设定群的发送消息,微信正式处于托管状态。大家可以忽略'
 7

 

自动回复:

1 # 监听msg是谁给我发消息
2 @itchat.msg_register(INCOME_MSG)
3 #通过msg变量返回值定位发送用户
4 def text_reply(msg):
5    # 打印获取到的信息
6    # print(msg)
7    itchat.send("您发送了:\'%s\'\n微信目前处于python托管,你的消息我会转发到手机,谢谢" %
8                (msg['Text']), toUserName=msg['FromUserName'])

这里主要注意的是装饰器的使用,这里其实还是可以监听图片,视频,文档之类的。为了简便,这里只是文本,所以如果对方发送的是图片,会打印成转码格式

 

群聊发送消息:

 1def SendChatRoomsMsg(gname, context):
 2    # 获取群组所有的相关信息(注意最好群聊保存到通讯录)
 3    myroom = itchat.get_chatrooms(update=True)
 4    # myroom = itchat.get_chatrooms()
 5    #定义全局变量(也可以不定义)
 6    global username
 7    # 传入指定群名进行搜索,之所以搜索,是因为群员的名称信息也在里面
 8    myroom = itchat.search_chatrooms(name=gname)
 9    for room in myroom:
10        # print(room)
11        #遍历所有NickName为键值的信息进行匹配群名
12        if room['NickName'] == gname:
13            username = room['UserName']
14            # 得到群名的唯一标识,进行信息发送
15            itchat.send_msg(context, username)
16        else:
17            print('No groups found')

群里发送消息主要麻烦在群名及相关信息的查找,要准确的了解get_chatrooms()和search_chatrooms()返回值

 

登录微信并保持登录状态:

1 # 登录微信enableCmdQR表示的是当完全的命令行界面可以弹出文本绘制的二维码
2 # 可以让你得以扫码登录,hotReload表示的连续几次运行不需要再次扫码
3 itchat.auto_login(enableCmdQR=True, hotReload=True)
4 # 调用函数发送群消息
5 SendChatRoomsMsg(gname, context)
6 # 保持登录状态
7 itchat.run()

 

最后:

其实还可以做得更好玩,导入time模块可以做成定时发送消息装置。我今天也尝试了做成刷屏模式,但是在使用while死循环发送群消息时,就没办法有进程来处理处于阻塞状态的“自动回复”了。我的解决办法是导入OS模块简历fork()建立多进程,有兴趣的可以试试。

 

我将源码放到GitHub上面了,有兴趣的可以查看源代码

 

微信扫一扫关注该公众号

你可能感兴趣的:(python)