ワンクリックで
wx4-skill
微信自动化操作 skill,用于帮助用户快速完成微信消息群发、文件发送、群管理、聊天记录获取、多群监听、AI 自动回复等自动化任务。当用户需要批量发送微信消息、管理微信群、获取聊天记录、监听群消息、或接入 AI 群聊机器人时使用此 skill。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
微信自动化操作 skill,用于帮助用户快速完成微信消息群发、文件发送、群管理、聊天记录获取、多群监听、AI 自动回复等自动化任务。当用户需要批量发送微信消息、管理微信群、获取聊天记录、监听群消息、或接入 AI 群聊机器人时使用此 skill。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | wx4-skill |
| description | 微信自动化操作 skill,用于帮助用户快速完成微信消息群发、文件发送、群管理、聊天记录获取、多群监听、AI 自动回复等自动化任务。当用户需要批量发送微信消息、管理微信群、获取聊天记录、监听群消息、或接入 AI 群聊机器人时使用此 skill。 |
在执行任何操作前,必须先确认 wx4py 库已安装。
try:
from wx4py import WeChatClient
print("✅ wx4py 已安装")
except ImportError:
print("❌ 未安装 wx4py")
# 方法1:从 PyPI 安装(推荐)
pip install wx4py
# 方法2:从 GitHub 安装(最新版)
pip install git+https://github.com/claw-codes/wx4py.git
# 方法3:从本地安装
cd /path/to/wx4py
pip install .
from wx4py import WeChatClient
# 测试导入
print("✅ 安装成功!")
# 检查版本(可选)
import wx4py
print(f"版本: {wx4py.__version__}")
重要提示:
ModuleNotFoundError: No module named 'wx4py',说明未安装本 skill 基于 wx4py 库,帮助用户通过 Python 代码自动化控制 Windows 微信客户端,完成重复性的消息发送、群管理等任务。
适用场景:
前置要求:
编码环境建议:
encoding='utf-8'from wx4py import WeChatClient
wx = WeChatClient()
wx.connect()
# 发送给联系人
wx.chat_window.send_to("文件传输助手", "测试消息")
# 发送到群
wx.chat_window.send_to("工作群", "下午3点开会", target_type='group')
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 批量发送到多个群
groups = ["群1", "群2", "群3"]
message = "重要通知:明天放假"
wx.chat_window.batch_send(groups, message)
# 批量发送到多个联系人
contacts = ["张三", "李四", "王五"]
wx.chat_window.batch_send(contacts, "周末聚餐通知", target_type='contact')
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 发送文件给联系人
wx.chat_window.send_file_to("文件传输助手", r"C:\reports\weekly.pdf")
# 发送文件到群
wx.chat_window.send_file_to("工作群", r"C:\data.xlsx", target_type='group', message='可以携带消息')
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 发送多个文件
files = [
r"C:\images\photo1.png",
r"C:\images\photo2.png",
r"C:\documents\report.pdf"
]
wx.chat_window.send_file_to("文件传输助手", files)
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 获取今天的聊天记录
messages = wx.chat_window.get_chat_history(
target="工作群",
target_type='group',
since='today' # 'today' | 'yesterday' | 'week' | 'all'
)
# 处理消息
for msg in messages:
print(f"[{msg['time']}] {msg['content']}")
wx.disconnect()
返回格式:
{
"type": "text", # text / link / system
"content": "消息内容",
"time": "今天 15:30"
}
wx = WeChatClient()
wx.connect()
members = wx.group_manager.get_group_members("工作群")
print(f"群成员数量:{len(members)}")
for member in members:
print(member)
wx.disconnect()
wx = WeChatClient()
wx.connect()
wx.group_manager.set_group_nickname("工作群", "张三的小号")
wx.disconnect()
wx = WeChatClient()
wx.connect()
nickname = wx.group_manager.get_group_nickname("工作群")
print(f"我在本群的昵称:{nickname}")
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 开启免打扰
wx.group_manager.set_do_not_disturb("工作群", enable=True)
# 关闭免打扰
wx.group_manager.set_do_not_disturb("工作群", enable=False)
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 置顶聊天
wx.group_manager.set_pin_chat("工作群", enable=True)
# 取消置顶
wx.group_manager.set_pin_chat("工作群", enable=False)
wx.disconnect()
wx = WeChatClient()
wx.connect()
# 优先使用这种方式,从 Markdown 文件设置公告(支持表格、列表等格式)
wx.group_manager.set_announcement_from_markdown("工作群", "markdown文件路径")
# 直接设置文本公告
wx.group_manager.modify_announcement_simple("工作群", "本群禁止发广告,违者移出")
wx.disconnect()
from wx4py import CallbackHandler, MessageEvent, WeChatClient
groups = ["工作群1", "工作群2", "工作群3"]
def on_message(event: MessageEvent):
print(f"[{event.group}] {event.content}")
return "" # 只监听,不自动回复
with WeChatClient(auto_connect=True) as wx:
wx.process_groups(
groups,
[CallbackHandler(on_message)],
block=True,
)
from wx4py import AsyncCallbackHandler, MessageEvent, WeChatClient
groups = ["工作群1", "工作群2"]
def reply(event: MessageEvent):
if not event.is_at_me:
return ""
return f"收到:{event.content}"
with WeChatClient(auto_connect=True) as wx:
wx.process_groups(
groups,
[AsyncCallbackHandler(reply, auto_reply=True, reply_on_at=True)],
block=True,
)
from wx4py import ForwardRuleHandler, GroupForwardRule, WeChatClient
rules = [
GroupForwardRule(
source_group="告警群",
targets=["值班同学"],
target_type="contact",
prefix_template="[告警群] ",
),
GroupForwardRule(
source_group="项目群A",
targets=["项目群B"],
target_type="group",
prefix_template="[项目群A] ",
),
]
with WeChatClient(auto_connect=True) as wx:
wx.process_groups(
["告警群", "项目群A"],
[ForwardRuleHandler(rules)],
block=True,
)
适用场景:
import os
from wx4py import AIClient, AIConfig, AIResponder, AsyncCallbackHandler, WeChatClient
ai = AIClient(
AIConfig(
base_url="https://api.example.com/v1",
api_format="completions",
model="your-model-id",
api_key=os.environ["AI_API_KEY"],
enable_thinking=False,
)
)
with WeChatClient(auto_connect=True) as wx:
wx.process_groups(
["工作群"],
[
AsyncCallbackHandler(
AIResponder(ai, context_size=8, reply_on_at=True),
auto_reply=True,
)
],
block=True,
)
from wx4py import AsyncCallbackHandler, MessageEvent, WeChatClient
def custom_reply(event: MessageEvent):
if not event.is_at_me:
return ""
# 这里可以调用公司内部接口、其他 AI SDK 或业务系统。
return f"自定义回复:{event.content}"
with WeChatClient(auto_connect=True) as wx:
wx.process_groups(
["工作群"],
[AsyncCallbackHandler(custom_reply, auto_reply=True, reply_on_at=True)],
block=True,
)
实现说明:
from wx4py import WeChatClient
with WeChatClient() as wx:
# 自动连接和断开
wx.chat_window.send_to("文件传输助手", "Hello!")
wx = WeChatClient()
wx.connect()
try:
# 执行操作
wx.chat_window.send_to("文件传输助手", "Hello!")
finally:
wx.disconnect()
from wx4py import WeChatClient
import schedule
import time
def send_daily_notification():
with WeChatClient() as wx:
groups = ["工作群1", "工作群2", "工作群3"]
message = "早安!今日工作提醒..."
wx.chat_window.batch_send(groups, message, target_type='group')
print("通知已发送")
# 每天早上9点发送
schedule.every().day.at("09:00").do(send_daily_notification)
while True:
schedule.run_pending()
time.sleep(60)
from wx4py import WeChatClient
import json
from datetime import datetime
with WeChatClient() as wx:
# 获取昨天的聊天记录
messages = wx.chat_window.get_chat_history(
target="工作群",
target_type='group',
since='yesterday'
)
# 保存到文件
filename = f"chat_history_{datetime.now().strftime('%Y%m%d')}.json"
with open(filename, 'w', encoding='utf-8') as f:
json.dump(messages, f, ensure_ascii=False, indent=2)
print(f"已保存 {len(messages)} 条消息到 {filename}")
from wx4py import WeChatClient
import os
# 准备要发送的文件
files_dir = r"C:\weekly_reports"
files = [os.path.join(files_dir, f) for f in os.listdir(files_dir) if f.endswith('.pdf')]
groups = ["管理群", "开发群", "产品群"]
with WeChatClient() as wx:
for group in groups:
print(f"正在向 {group} 发送文件...")
wx.chat_window.send_file_to(group, files, target_type='group')
print(f"已完成 {group}")
reply_on_at=True,避免普通群消息触发自动回复docs/guide/API_GUIDE.mdfrom wx4py import WeChatClient, WeChatNotFoundError, ControlNotFoundError
try:
with WeChatClient() as wx:
wx.chat_window.send_to("目标", "消息")
except WeChatNotFoundError:
print("错误:未找到微信窗口,请确保微信已打开并登录")
except ControlNotFoundError as e:
print(f"错误:未找到控件 - {e}")
except Exception as e:
print(f"未知错误:{e}")
当用户请求微信自动化任务时,按以下步骤操作:
理解需求
编写脚本
验证和测试
执行和反馈
| 操作 | 方法 | 示例 |
|---|---|---|
| 发消息给联系人 | chat_window.send_to(target, message) | wx.chat_window.send_to("张三", "Hi") |
| 发消息到群 | chat_window.send_to(target, message, target_type='group') | wx.chat_window.send_to("工作群", "Hi", target_type='group') |
| 批量群发 | chat_window.batch_send(targets, message, target_type) | wx.chat_window.batch_send(["群1", "群2"], "Hi", target_type='group') |
| 发送文件 | chat_window.send_file_to(target, file_path) | wx.chat_window.send_file_to("张三", r"C:\file.pdf") |
| 获取聊天记录 | chat_window.get_chat_history(target, target_type, since) | wx.chat_window.get_chat_history("工作群", 'group', 'today') |
| 获取群成员 | group_manager.get_group_members(group_name) | wx.group_manager.get_group_members("工作群") |
| 获取群昵称 | group_manager.get_group_nickname(group_name) | wx.group_manager.get_group_nickname("工作群") |
| 设置群昵称 | group_manager.set_group_nickname(group_name, nickname) | wx.group_manager.set_group_nickname("工作群", "小张") |
| 消息免打扰 | group_manager.set_do_not_disturb(group_name, enable) | wx.group_manager.set_do_not_disturb("工作群", True) |
| 置顶聊天 | group_manager.set_pin_chat(group_name, enable) | wx.group_manager.set_pin_chat("工作群", True) |
| 修改群公告 | group_manager.modify_announcement_simple(group_name, content) | wx.group_manager.modify_announcement_simple("工作群", "新公告") |
| 监听/处理多个群聊 | process_groups(groups, handlers, block=True) | wx.process_groups(["群1"], [handler], block=True) |
| 监听群消息并转发 | process_groups(groups, [ForwardRuleHandler(rules)], block=True) | wx.process_groups(["群1"], [ForwardRuleHandler(rules)], block=True) |
| 自动回复群聊 | AsyncCallbackHandler(reply_func, auto_reply=True) | AsyncCallbackHandler(reply, auto_reply=True, reply_on_at=True) |
| AI 自动回复 | AIResponder(ai_client, context_size=8) | AsyncCallbackHandler(AIResponder(ai, context_size=8, reply_on_at=True), auto_reply=True) |
Q: 脚本运行时提示找不到微信窗口? A: 确保微信已打开并登录,窗口不要最小化。
Q: 批量发送时部分失败? A: 检查目标名称是否正确,建议在每次发送间添加延迟。
Q: 中文消息、群名或导出文件出现乱码?
A: 先确认终端、编辑器、Python 源文件和读写文件逻辑都使用 UTF-8;写文件时显式传入 encoding='utf-8',避免依赖系统默认编码。
Q: 可以获取图片和语音消息吗? A: 目前主要支持文本消息,图片和语音的完整获取受限于微信 UIA。
Q: AI 自动回复会回复所有群消息吗?
A: 不会,推荐传入 reply_on_at=True。普通消息只监听,只有群消息 @ 当前群昵称时才会触发回复。
Q: 可以不用内置 AIClient,接入自己的 AI 服务吗?
A: 可以。process_groups() 接收任意 handler;最简单的方式是使用 AsyncCallbackHandler 包装你自己的回调,回调返回字符串即可入队发送。
Q: 多个群同时触发回复会抢占窗口吗? A: 自动回复会进入发送队列串行执行,避免多个独立聊天窗口同时发送导致焦点抢占。
Q: 脚本可以在后台运行吗? A: 微信窗口需要在前台才能进行 UI 自动化操作。