Python实现微信自动回复+AI智能回复(完整代码)

机器学习算法数据库

picture.image

向AI转型的程序员都关注公众号 机器学习AI算法工程

在日常的软件开发与自动化任务处理中,实现对即时通讯工具如微信的自动化操作往往能为我们带来诸多便利。本文将详细解析一段基于 Python 编写的代码,该代码能够实现对微信消息的监控与特定回复处理,以下是具体的分析。


结果展示(文末附完整代码):

picture.image

picture.image

百度文心一言API-Python版(完整代码)

https://blog.csdn.net/NiJiMingCheng/article/details/143856369

字节-豆包AI-Python配置(速通)

https://blog.csdn.net/NiJiMingCheng/article/details/143868917

一、代码概述

这段 Python 代码实现了一系列功能,主要围绕着与微信窗口的交互、消息的读取以及根据不同消息内容进行针对性回复展开。它集成了多个库,如 volcenginesdkarkruntime、pyautogui、uiautomation、win32gui、win32con 等,同时还可调用了自定义的 百度AI开发平台的api文心一言大模型或者字节跳动的AI豆包大模型来处理不同来源的回复生成。

二、代码详细解析

安装所需要的库

pip install pywin32

(一)日志设置

在代码开头部分,通过以下语句设置了日志:


          
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
          

      

这使得程序在运行过程中能够记录不同级别的信息,方便后续查看程序运行状态以及排查可能出现的错误。

(二)获取豆包回复的函数 doubao


          
def doubao(content):
          
    client = Ark(api_key="YOUR-API-KEY")
          
 
          
    completion = client.chat.completions.create(
          
        model="MODEL-TYPE",
          
        messages=[
          
            {"role": "user", "content": content},
          
        ]
          
    )
          
    print(completion.choices[0].message.content)
          
    return completion.choices[0].message.content
      

此函数用于向特定的模型(这里是示例MODEL-TYPE模型)发送用户提供的内容 content,并获取模型返回的回复。通过设置好的 Ark 客户端以及相关参数,实现了与外部模型的交互,获取到的回复后续可用于回复微信消息。

(三)获取微信窗口句柄函数 get_wechat_hwnd


          
def get_wechat_hwnd():
          
    hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
          
    if hwnd:
          
        win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
          
        win32gui.SetForegroundWindow(hwnd)
          
    return hwnd
      

该函数利用 win32gui 库的 FindWindow 函数来查找微信主窗口的句柄。如果找到句柄,还会通过 ShowWindow 和 SetForegroundWindow 函数将微信窗口显示并设置为前台窗口,以便后续进行操作。

(四)复位聊天窗口函数 reset_chat_window


          
def reset_chat_window(hwnd):
          
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
          
    leftpoint = left + 155
          
    toppoint = top + 200    # 180为第三个聊天窗口,加80为第四个聊天窗口
          
    pyautogui.moveTo(leftpoint, toppoint)
          
    pyautogui.click()
          
    return '已复位'
      

此函数根据传入的微信窗口句柄 hwnd,通过获取窗口的坐标信息,计算出特定位置的坐标点,然后利用 pyautogui 库将鼠标移动到该点并点击,实现了将聊天窗口复位到消息列表的第二个聊天窗口的功能。

(五)初始化控件引用函数 initialize_controls


          
def initialize_controls():
          
    wx = WindowControl(Name="微信")
          
    wx.SwitchToThisWindow()
          
    hw = wx.ListControl(Name="会话")
          
    return wx, hw
      

这里通过 uiautomation 库的相关控件类,首先获取到微信窗口的控件引用 wx,并将其切换到前台,然后进一步获取到会话列表的控件引用 hw,为后续读取和处理消息提供了基础。

(六)主函数 main


      
          

        1. def main():
2. hwnd = get\_wechat\_hwnd()
3. if not hwnd:
4. logging.error("无法找到微信窗口")
5. return
6. 
7. wx, hw = initialize\_controls()
8. last\_checked\_message = None
9. while True:
10. try:
11. # 尝试获取未读消息控件
12. we = hw.TextControl(searchDepth=4)
13. 
14. # 检查是否有新的未读消息
15. if we.Name:
16. we.Click(simulateMove=False)
17. # 获取当前最后一条消息
18. last\_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
19. print(last\_msg[:2])
20. if last\_msg[:2] == 'DB':
21. res = doubao(last\_msg[2:])
22. wx.SendKeys(res)
23. wx.SendKeys('{ENTER}')
24. reset\_chat\_window(get\_wechat\_hwnd())
25. elif last\_msg[:2] == 'WX':
26. res = main\_(last\_msg[2:])
27. wx.SendKeys(res)
28. wx.SendKeys('{ENTER}')
29. reset\_chat\_window(get\_wechat\_hwnd())
30. elif last\_msg[:2] == 'TD':
31. break
32. 
33. else:
34. reset\_chat\_window(get\_wechat\_hwnd())
35. pass
36. 
37. # 添加延迟以避免过度检查
38. time.sleep(1)  # 根据需要调整延迟时间
39. 
40. except IndexError:
41. logging.warning("未找到未读消息控件")
42. 
43. except Exception as e:
44. logging.error(f"处理未读消息时发生错误: {e}")
45. # 根据需要决定是否退出循环


      
    

在主函数中,首先通过 get_wechat_hwnd 函数尝试获取微信窗口句柄,如果获取失败则记录错误并返回。接着通过 initialize_controls 函数初始化控件引用。

    然后进入一个循环,在循环中不断尝试获取未读消息控件。如果找到未读消息控件并且消息内容满足特定条件,就会进行相应的回复操作:

当消息前两位是 DB 时:

则优先进行我们的判断语句进行回复指定的内容。

其他情况则调用 doubao 函数启用字节跳动的AI豆包获取回复并发送,最后复位聊天窗口。

当消息前两位是 WX 时:

处理逻辑与 DB 类似,并且调用yiyan函数启用百度AI文心一言获取回复而不是 doubao 函数。

当消息前两位是 TD 时,直接跳出循环,关闭自动回复。

在整个过程中,如果出现索引错误或其他异常,都会进行相应的日志记录。

三、总结

    通过对这段代码的详细解析,我们可以看到它实现了一个较为完整的微信消息自动化处理流程。从获取微信窗口句柄、初始化控件,到监控消息并根据不同内容进行针对性回复,涵盖了多个方面的技术要点,包括 Windows 窗口操作、自动化鼠标键盘操作以及与外部模型的交互获取回复等。希望本文的解析能够帮助读者更好地理解此类自动化程序的实现思路与代码细节,也为大家在自己的开发项目中实现类似功能提供一定的参考。

机器学习算法AI大数据技术

搜索公众号添加: datanlp

picture.image

长按图片,识别二维码

阅读过本文的人还看了以下文章:

实时语义分割ENet算法,提取书本/票据边缘

整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主

《大语言模型》PDF下载

动手学深度学习-(李沐)PyTorch版本

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

搜索公众号添加: datayx

picture.image

0
0
0
0
相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论