开头警告
在这里插入图片描述

记录一下最近开发的一个简易扣排器(监听微信群消息,当出现特定消息时给予回复)遇到的问题。用到一个工具wxauto,实际上是操作了微信客户端从界面上获取相关消息,并且发送消息。
pip install wxauto
或者git下载https://github.com/cluic/wxauto

from wxauto import WeChat

#要监听的微信群/个人微信 的名称
listen_list = ['相亲相爱一家人','张三','李四']

wx = WeChat()
for i in listen_list:
	#添加监听对象,监听成功会自动打开监听对象的聊天窗口
	wx.AddListenChat(who=i, savepic=False)
	
# 设置1秒查看一次是否有新消息
wait = 1 
while True:
	#获取所有监听群/个人消息
    msgs = wx.GetListenMessage()
    for chat in msgs:
	    who = chat.who  # 获取聊天窗口名(人或群名)
	    one_msgs = msgs.get(chat)  # 获取消息内容
	    for msg in one_msgs:
	        msgtype = msg.type  # 获取消息类型
	        content = msg.content  # 获取消息内容,字符串类型的消息内容
	        print(f'【{who}】【{msg.sender}】:{content}')
	        if 'xxx' in content:  #根据消息内容设置要回复的条件,也可以根据发送人msg.sender决定是否回复
	        	chat.SendMsg('要回复的内容')
	time.sleep(wait)
    

实际在操作的过程中发现一个bug,就是程序刚启动的时候,偶尔会把监听窗口的当前页面的消息当成“新消息”监听到,导致启动程序时对历史消息进行了回复,但是也不知道复现条件是什么,于是设置了一个延迟执行判断,当程序启动十秒后再对拉取的信息处理决定要不要回复,修改后代码如下:

from wxauto import WeChat
from datetime import datetime

#要监听的微信群/个人微信 的名称
listen_list = ['相亲相爱一家人','张三','李四']

wx = WeChat()
for i in listen_list:
	#添加监听对象,监听成功会自动打开监听对象的聊天窗口
	wx.AddListenChat(who=i, savepic=False)
delay_second = 10
# 设置1秒查看一次是否有新消息
wait = 1 
begin_time = datetime.now()
while True:
	#获取所有监听群/个人消息
    msgs = wx.GetListenMessage()
    for chat in msgs:
	    who = chat.who  # 获取聊天窗口名(人或群名)
	    one_msgs = msgs.get(chat)  # 获取消息内容
	    for msg in one_msgs:
	        msgtype = msg.type  # 获取消息类型
	        content = msg.content  # 获取消息内容,字符串类型的消息内容
	        print(f'【{who}】【{msg.sender}】:{content}')
	        if (datetime.now()-begin_time).total_seconds() > delay_second:
		        if 'xxx' in content:  #根据消息内容设置要回复的条件,也可以根据发送人msg.sender决定是否回复
		        	chat.SendMsg('要回复的内容')
	time.sleep(wait)

然后打包成exe文件,使用的是pyinstaller

pip install pyinstaller
pyinstaller --onefile your_script.py

生成的exe文件位于dist文件夹中,发现在我的电脑上能运行,但是在我朋友的电脑上会报错,最终发现是我朋友的微信客户端太旧了。然后说明文档是说支持以下版本:
在这里插入图片描述
但是我自己的微信版本是以下版本,仍然支持。
在这里插入图片描述
还发现一个问题,就是如果鼠标不小心在终端选中了文字,程序就会卡住,导致无法继续执行代码,右击终端,属性,取消以下两个选项

在这里插入图片描述
还还还有一个问题,在聊天窗口滚动到最上方加载历史消息的时候,会导致后加载出来的信息被当成新消息被获取到,这个暂时不知道怎么解决。
还有好多其他功能,详见文档https://wxauto.loux.cc/docs/intro

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐