Python微信聊天机器人如何实现?

99ANYc3cd6 机器人 1

如何用 Python 控制微信?

我们不能直接去“破解”微信的官方协议,因为那是违法且不稳定的,目前主流且安全可靠的方式是使用一个叫做 itchat 的 Python 库,它通过模拟微信网页版登录的原理,让我们能够通过 Python 代码来获取微信的好友、群聊信息,并实现自动回复、发送消息等功能。

Python微信聊天机器人如何实现?-第1张图片-广州国自机器人
(图片来源网络,侵删)

第一步:准备工作

  1. 安装 Python: 确保你的电脑上已经安装了 Python (推荐 3.6+ 版本)。
  2. 安装 itchat: 打开你的终端或命令提示符,运行以下命令:
    pip install itchat

第二步:最简单的机器人 - 登录与自动回复

这是 itchat 最基础的功能,我们可以用它来实现一个“万能”的自动回复机器人。

代码示例:simple_bot.py

# 1. 导入库
import itchat
import time
# 2. 定义一个回复函数
# 这个函数会在收到消息时被自动调用
def reply_message(msg):
    """
    msg 是一个字典,包含了消息的所有信息
    msg['Type'] 消息类型:'Text' 文本, 'Picture' 图片, 'FriendRequest' 好友请求等
    """
    # 我们只处理文本消息
    if msg['Type'] == 'Text':
        # 获取发送者的信息
        sender = msg['From'] # 发送者的UserName
        # 获取消息内容
        content = msg['Text']
        print(f"收到来自 {sender} 的消息: {content}")
        # 根据消息内容进行回复
        if content == '你好':
            return "你好呀,我是 Python 机器人!"
        elif content == '在吗':
            return "在的,在呢!有什么事吗?"
        elif content == '你是谁':
            return "我是一个用 Python 写的微信聊天机器人。"
        else:
            # 默认回复
            return f"你说了: '{content}',我暂时还不太明白,可以试试说“你好”哦。"
    # 对于非文本消息,可以返回一个默认文本
    return "抱歉,我只能处理文字消息哦。"
# 3. 注册消息回调函数
# itchat.msgRegister() 用于注册不同类型消息的处理函数
# itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage)
# 表示:对于所有非群聊的文本消息,都调用 reply_message 函数处理
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=reply_message)
# 4. 登录微信
# 运行这行代码后,会弹出一个二维码,你需要用手机微信扫描二维码登录
print("请使用手机微信扫描二维码登录...")
itchat.auto_login(hotReload=True) 
# hotReload=True 表示登录状态会被缓存,下次运行时不用重新扫码(注意:安全起见,请勿在公共电脑上使用)
# 5. 进入运行状态,保持程序运行
# 程序会一直运行,直到你手动在终端按下 Ctrl+C 停止
print("机器人已启动,正在监听消息...")
itchat.run()
# 6. 退出时,注销登录
# itchat.logout() # run() 方法结束后会自动调用

如何运行?

  1. 将上面的代码保存为 simple_bot.py 文件。
  2. 在终端中进入该文件所在的目录。
  3. 运行命令:python simple_bot.py
  4. 手机微信会弹出扫码界面,扫描登录即可。
  5. 你可以给你的微信小号(注意:强烈建议使用小号测试,不要用主号,以免被封)发送消息,机器人就会自动回复了。

第三步:功能进阶

掌握了基础后,我们可以让机器人变得更“聪明”。

回复群聊消息

我们只需要修改 msgRegister 的参数,将 isGroupChat 设为 True

# ... (前面的代码不变)
# 注册群聊消息的回复函数
def group_reply_message(msg):
    if msg['Type'] == 'Text' and msg['IsAt']: # 只处理@我的文本消息
        # 获取群聊名称
        group_name = itchat.search_friends(userName=msg['FromUserName'])['NickName']
        # 获取@我的那个人
        sender = msg['ActualSenderNickName']
        # 获取消息内容(去掉@的部分)
        content = msg['Text'].replace(f'@{itchat.get_friends()[0]["NickName"]}', '').strip()
        print(f"在群 [{group_name}] 中,{sender} @了我,说: {content}")
        # 回复消息,格式为: @发送者 你的回复
        return f'@{sender} 收到你的消息“{content}”了!'
    return None # 如果不是@我的消息,就不回复
# 注册群聊消息处理函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=True, replyMessage=group_reply_message)
# ... (后面的代码不变)

调用外部 API(如天气、AI)

我们可以让机器人成为我们的“小助手”,调用天气 API 获取天气。

Python微信聊天机器人如何实现?-第2张图片-广州国自机器人
(图片来源网络,侵删)

你需要一个天气 API 的 Key(可以去和风天气、心知天气等平台申请免费版)。

import requests
import json
# ... (前面的代码)
def get_weather(city):
    # 替换成你自己的 API Key
    API_KEY = "YOUR_WEATHER_API_KEY" 
    url = f"https://api.qweather.com/v7/weather/now?location={city}&key={API_KEY}"
    try:
        response = requests.get(url)
        data = response.json()
        if data.get('code') == '200':
            temp = data['now']['temp']
            text = data['now']['text']
            return f"{city}市现在的天气是:{text},温度 {temp}°C。"
        else:
            return "抱歉,获取天气信息失败了。"
    except Exception as e:
        return f"网络出错了: {e}"
def advanced_reply_message(msg):
    if msg['Type'] == 'Text':
        content = msg['Text']
        if content.startswith('天气 '):
            city = content.split(' ')[1]
            return get_weather(city)
    return None
# 注册高级回复函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=advanced_reply_message)
# ... (后面的代码不变)

你可以给你的机器人发送“天气 北京”,它就会告诉你北京的天气了。

结合大语言模型(如 ChatGPT)

这是目前最热门的功能,让机器人拥有“智慧”。

你需要:

Python微信聊天机器人如何实现?-第3张图片-广州国自机器人
(图片来源网络,侵删)
  1. 一个 OpenAI 的 API Key。
  2. 安装 openai 库:pip install openai
import openai
# 替换成你自己的 OpenAI API Key
openai.api_key = "YOUR_OPENAI_API_KEY"
def chatgpt_reply(prompt):
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo", # 或者 "gpt-4"
            messages=[
                {"role": "system", "content": "你是一个乐于助人的AI助手。"},
                {"role": "user", "content": prompt}
            ]
        )
        return response.choices[0].message['content'].strip()
    except Exception as e:
        return f"调用 AI 出错了: {e}"
def ai_reply_message(msg):
    if msg['Type'] == 'Text':
        content = msg['Text']
        # 可以设置一个指令前缀,"ai "
        if content.startswith('ai '):
            question = content[3:].strip()
            if question:
                print(f"正在向 AI 提问: {question}")
                return chatgpt_reply(question)
    return None
# 注册 AI 回复函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=ai_reply_message)
# ... (后面的代码不变)

你可以发送 ai 写一首关于月亮的诗,机器人就会调用 ChatGPT 为你生成一首诗。


第四步:重要注意事项与最佳实践

  1. 账号安全

    • 务必使用小号测试:频繁的自动回复行为容易被微信官方检测到,导致账号被限制登录甚至封禁,主号非常宝贵,不要用于实验。
    • hotReload 的风险hotReload 虽然方便,但它会将你的登录凭证(itchat.pkl 文件)保存在本地,如果电脑不安全,这个文件可能被盗用,导致你的微信账号被盗,请妥善保管该文件或只在安全的环境下使用。
  2. 频率限制

    • 避免在短时间内发送大量消息,这会被微信认为是垃圾信息。
    • 在回复时,可以适当加入 time.sleep(1) 来模拟人类打字的速度,增加“拟人感”。
  3. 代码结构优化

    当功能变多时,不要把所有逻辑都写在一个文件里,可以将不同的功能(如天气、AI、群管)拆分成不同的模块或函数,使代码更清晰。

  4. 优雅退出

    • 使用 try...finally 结构,确保在程序退出时调用 itchat.logout(),安全地登出微信。
try:
    itchat.auto_login(hotReload=True)
    itchat.run()
finally:
    print("正在退出,登出微信...")
    itchat.logout()

使用 Python 和 itchat 开发微信机器人是一个非常有趣且能学到很多东西的项目,它涵盖了网络请求、API 调用、事件驱动编程等多个知识点。

学习路径建议

  1. 基础:掌握 simple_bot.py,实现基本的自动回复。
  2. 进阶:尝试实现群聊回复、调用天气等公开 API。
  3. 高级:集成大语言模型,打造一个能聊天的 AI 助手。
  4. 实践:思考你能用这个机器人做什么?比如定时提醒、文件自动转发、公众号内容抓取等。

希望这份指南能帮助你开启微信机器人开发之旅!

标签: Python微信机器人开发教程 Python自动回复微信机器人实现 Python微信聊天机器人代码示例

抱歉,评论功能暂时关闭!