舞动 wxauto 代码魔杖,编织微信自动回复梦幻之网

516 阅读8分钟

在社交媒体和即时通讯高度发达的今天,自动回复机器人在提升工作效率、提供即时服务等方面发挥着重要作用。本文将通过实际步骤,介绍如何使用 wxauto 库来开发 Windows 版微信客户端的自动回复机器人。


1x1_机器人手托微信图标.png

一、简介

wxauto 是一款专为 Windows 版本微信客户端 设计的自动化工具。它不是基于网页版微信,而是通过对 PC 端微信客户端的操作,实现消息的自动发送和接收。借助 wxauto,您可以开发出功能强大的微信自动回复机器人,用于自动回复消息、批量发送信息等。


二、环境准备

2.1 安装 Python

首先,确保您的电脑上安装了 Python,建议使用 Python 3.6 或以上版本。

您可以在 Python 官网 下载并安装。

2.2 安装 wxauto 库

打开命令提示符或终端,使用 pip 命令安装 wxauto:

pip install wxauto

2.3 准备微信客户端

确保您的电脑上安装了最新版本的 微信客户端,并已登录您的微信账号。


三、初识 wxauto

3.1 导入库

在开始编写代码之前,首先需要导入 wxauto 库:

from wxauto import WeChat

3.2 初始化微信实例

wx = WeChat()

这行代码将创建一个 WeChat 对象,方便后续操作。

3.3 基本功能测试

3.3.1 获取登录的微信用户名

name = wx.GetSelfName()
print(f"当前登录的微信用户:{name}")

3.3.2 获取最近的会话列表

sessions = wx.GetSessionList()
print("最近的会话列表:")
for session in sessions:
    print(session)

四、开发自动回复机器人

4.1 设计思路

我们的目标是开发一个自动回复机器人,当收到好友的消息时,自动根据消息内容进行回复。主要步骤包括:

  1. 监听新的消息。

  2. 解析消息内容。

  3. 根据消息内容生成回复。

  4. 发送回复消息。

4.2 实现步骤

4.2.1 导入必要的库

from wxauto import WeChat
import time

4.2.2 初始化微信实例

wx = WeChat()

4.2.3 定义自动回复函数

def auto_reply():
    # 获取初始消息记录
    initial_msg = ""
    while True:
        # 获取当前最新消息
        last_msgs = wx.GetAllMessage()
        if last_msgs:
            last_msg = last_msgs[-1]
            content = last_msg.get("msg", "")
            sender = last_msg.get("sender", "")
            if content != initial_msg:
                print(f"收到来自 [{sender}] 的消息:{content}")
                # 模拟简单的自动回复逻辑
                if "你好" in content:
                    reply = "你好,有什么可以帮您的吗?"
                elif "时间" in content:
                    reply = f"当前时间是:{time.strftime('%Y-%m-%d %H:%M:%S')}"
                else:
                    reply = "抱歉,我暂时无法理解您的消息。"

                # 发送回复
                wx.ChatWith(sender)
                wx.SendMsg(reply)
                print(f"已回复 [{sender}]:{reply}")

                # 更新初始消息
                initial_msg = content
        # 设置休眠时间,避免占用过多资源
        time.sleep(1)

4.2.4 运行自动回复函数

if __name__ == "__main__":
    print("自动回复机器人正在运行...")
    auto_reply()

4.3 代码详解

  • 初始消息记录:通过 initial_msg 记录最后一条消息内容,避免重复回复。

  • 循环监听:使用 while True 循环,不断检查是否有新消息。

  • 判断新消息:如果收到的新消息内容与 initial_msg 不同,说明有新消息。

  • 简单的回复逻辑:根据接收到的消息内容,决定回复的内容。

  • 发送回复:使用 wx.SendMsg(reply) 发送回复消息。

  • 更新消息记录:将 initial_msg 更新为当前的消息内容,以便继续监听新的消息。

4.4 注意事项

  • 方法调用:需要注意的是,wxauto 的方法需要加上括号 () 进行调用,例如 wx.GetAllMessage()

  • 消息窗口的焦点:wxauto 通过操作微信客户端的界面实现消息的发送和接收,因此在运行程序时,请确保微信客户端窗口在前台,或者您可以使用 wx.ChatWith("好友昵称") 打开与特定好友的聊天窗口。

  • 好友昵称匹配:在实际使用中,为了准确回复特定好友的消息,建议在获取消息时,获取消息来源的昵称,然后进行针对性的回复。


五、增强功能

image.png

5.1 针对特定好友自动回复

如果您只想对特定好友的消息进行自动回复,可以修改代码如下:

def auto_reply_specific_friend(friend_name):
    # 打开好友的聊天窗口
    wx.ChatWith(friend_name)
    # 获取初始消息记录
    initial_msg = ""
    while True:
        # 获取当前最新消息
        last_msgs = wx.GetAllMessage()
        if last_msgs:
            last_msg = last_msgs[-1]
            content = last_msg.get("msg", "")
            sender = last_msg.get("sender", "")
            if sender == friend_name and content != initial_msg:
                print(f"来自 [{friend_name}] 的消息:{content}")
                # 回复逻辑
                reply = f"自动回复:您刚才说的是 '{content}' 吗?"
                wx.SendMsg(reply)
                print(f"已回复 [{friend_name}]:{reply}")
                initial_msg = content
        time.sleep(1)

调用上述函数:

if __name__ == "__main__":
    friend = "好友昵称"
    print(f"自动回复机器人正在运行,监听好友:{friend}")
    auto_reply_specific_friend(friend)

5.2 接入智能回复接口

为了让机器人更加智能,可以接入一些自然语言处理接口或聊天机器人 API,例如接入 图灵机器人 或 OpenAI GPT API

示例(以 图灵机器人 为例):

import requests

def get_intelligent_reply(message):
    api_url = "http://openapi.tuling123.com/openapi/api/v2"
    data = {
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": message
            },
        },
        "userInfo": {
            "apiKey": "您的图灵机器人API密钥",
            "userId": "您的用户ID"
        }
    }
    try:
        response = requests.post(api_url, json=data)
        if response.status_code == 200:
            results = response.json().get("results")
            if results:
                reply = results[0].get("values", {}).get("text")
                return reply
            else:
                return "抱歉,我无法理解您的意思。"
        else:
            return "抱歉,我暂时无法处理您的请求。"
    except Exception as e:
        print(f"调用接口失败:{e}")
        return "抱歉,我出现了一些问题。"

在自动回复函数中,调用 get_intelligent_reply 来获取回复内容。

5.3 多会话处理

image.png

如果需要同时监听多个好友或群的消息,可以扩展代码,获取所有消息,区分消息来源,再分别回复。

示例

def auto_reply_multiple():
    initial_msgs = {}
    print("自动回复机器人已启动,按 Ctrl+C 退出。")
    while True:
        try:
            messages = wx.GetAllMessage()
            if messages:
                for msg in messages:
                    friend = msg.get("sender", "")
                    content = msg.get("msg", "")
                    if initial_msgs.get(friend) != content:
                        print(f"来自 [{friend}] 的消息:{content}")
                        # 获取智能回复
                        reply = get_intelligent_reply(content)
                        wx.ChatWith(friend)
                        wx.SendMsg(reply)
                        print(f"已回复 [{friend}]:{reply}")
                        initial_msgs[friend] = content
            time.sleep(1)
        except KeyboardInterrupt:
            print("机器人已停止运行。")
            break
        except Exception as e:
            print(f"发生错误:{e}")
            time.sleep(1)

六、完整示例代码

from wxauto import WeChat
import time
import requests

wx = WeChat()

def get_intelligent_reply(message):
    # 使用图灵机器人API获取智能回复
    api_url = "http://openapi.turing123.com/openapi/api/v2"
    data = {
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": message
            },
        },
        "userInfo": {
            "apiKey": "您的图灵机器人API密钥",
            "userId": "您的用户ID"
        }
    }
    try:
        response = requests.post(api_url, json=data)
        if response.status_code == 200:
            results = response.json().get("results")
            if results:
                reply = results[0].get("values", {}).get("text")
                return reply
            else:
                return "抱歉,我无法理解您的意思。"
        else:
            return "抱歉,我暂时无法处理您的请求。"
    except Exception as e:
        print(f"调用接口失败:{e}")
        return "抱歉,我出现了一些问题。"

def auto_reply_multiple():
    initial_msgs = {}
    print("自动回复机器人已启动,按 Ctrl+C 退出。")
    while True:
        try:
            messages = wx.GetAllMessage()
            if messages:
                for msg in messages:
                    friend = msg.get("sender", "")
                    content = msg.get("msg", "")
                    if initial_msgs.get(friend) != content:
                        print(f"来自 [{friend}] 的消息:{content}")
                        # 获取智能回复
                        reply = get_intelligent_reply(content)
                        wx.ChatWith(friend)
                        wx.SendMsg(reply)
                        print(f"已回复 [{friend}]:{reply}")
                        initial_msgs[friend] = content
            time.sleep(1)
        except KeyboardInterrupt:
            print("机器人已停止运行。")
            break
        except Exception as e:
            print(f"发生错误:{e}")
            time.sleep(1)

if __name__ == "__main__":
    auto_reply_multiple()

注意

  • 请在 get_intelligent_reply 函数中,填写您在图灵机器人平台注册获得的 API 密钥 和 用户 ID

  • 确保您的微信客户端处于 登录 状态,且未被锁定或退出。


七、总结

通过 wxauto,我们可以方便地对 Windows 版微信客户端进行自动化操作,实现自动回复机器人的功能。本文从基础的环境搭建开始,逐步讲解了如何使用 wxauto 来监听消息、发送回复,并提供了多种增强功能的实现思路。

在实际应用中,可以根据需求,接入更智能的回复接口,完善异常处理,提高机器人的稳定性和实用性。


八、注意事项

  1. 合理使用:在使用自动回复机器人时,请遵守微信的相关规定,避免封号风险。

  2. 隐私与安全:不要滥用机器人收集或泄露他人隐私信息。

  3. 接口稳定性:如果接入第三方智能回复接口,需考虑接口的稳定性和响应速度。

  4. 微信窗口状态:由于 wxauto 是通过模拟鼠标键盘操作微信客户端,因此在机器人运行时,请不要手动干扰微信窗口。


九、可能的问题与改进

9.1 方法调用问题

在原始代码中,方法调用缺少了括号 (),如 wx.GetLastMessage 应修改为 wx.GetLastMessage()。这是 Python 中调用函数和方法的基本语法。

9.2 消息重复处理

为了避免重复回复相同的消息,我们使用了 initial_msgs 字典来记录每个好友的最后一条消息内容。

9.3 程序稳定性

在代码中添加了异常处理,捕获并处理可能发生的异常,防止程序崩溃。同时,使用 KeyboardInterrupt 捕获手动中断,方便停止机器人。

9.4 接口响应处理

在调用第三方接口获取智能回复时,需注意接口的响应格式,添加健壮的错误处理,避免因接口异常导致程序错误。


十、参考资料


声明:本文仅供技术学习和交流使用,请勿用于任何商业或非法用途。