微信自动消息转发器
在某些场景下,我们希望能够自动转发微信中的某些特定消息,以便及时处理。例如在客户服务过程中,可以将客服消息自动转发给专门负责的团队成员,或将含有特定关键词的消息转发给指定联系人。本工具可以帮助实现这样的自动化需求,并可自定义监控发送者和关键词,实现灵活的消息转发。
·
微信自动消息转发器
背景介绍
在某些场景下,我们希望能够自动转发微信中的某些特定消息,以便及时处理。例如在客户服务过程中,可以将客服消息自动转发给专门负责的团队成员,或将含有特定关键词的消息转发给指定联系人。本工具可以帮助实现这样的自动化需求,并可自定义监控发送者和关键词,实现灵活的消息转发。
项目实现
一、功能概览
该代码实现了以下主要功能:
- 自动读取配置:通过一个配置文件(
config.txt)读取配置信息,方便用户修改转发条件。 - 监控消息发送者:根据配置中的监控列表,只对特定发送者的消息进行转发。
- 关键词匹配:对非监控列表的发送者消息进行关键词匹配,匹配成功则转发。
- 定时清空缓存:每日清空已处理的消息缓存,以避免重复处理同一消息。
- 格式化消息:将转发的消息按指定格式进行包装后发送。
二、完整代码
import time
from datetime import datetime, timedelta
from wxauto import WeChat
# 从配置文件中读取设置信息
def load_config():
config = {}
with open("config.txt", "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if line and not line.startswith("#"):
key, value = line.split("=", 1)
config[key.strip()] = value.strip()
return config
# 初始化 WeChat
wx = WeChat()
config = load_config()
# 获取配置项
target_contact = config["send_to"]
switch_back_to = config["switch_back_to"]
format_message = config["format_message"]
interval_seconds = int(config.get("interval_seconds", 5))
# 监控联系人集合
monitor_senders = set(config["monitor_senders"].split(","))
# 关键词列表,用于非监控联系人匹配
keywords = set(config["keywords"].split(","))
# 记录程序启动时间
start_time = datetime.now()
reset_time = start_time + timedelta(days=1) # 每天清空缓存
# 已处理消息记录,设置最大容量为 100
processed_messages = set()
MAX_PROCESSED_MESSAGES = 100
while True:
# 每天清空缓存
if datetime.now() >= reset_time:
processed_messages.clear()
reset_time = datetime.now() + timedelta(days=1)
print("缓存已清空。重置下一次清空时间。")
# 获取当前聊天窗口消息
msgs = wx.GetAllMessage()
# 输出并处理消息内容
for msg in msgs:
# 过滤程序启动前的历史消息
if hasattr(msg, 'timestamp') and datetime.fromtimestamp(msg.timestamp) < start_time:
continue
# 生成消息ID,使用发送者+内容组合
msg_id = f"{msg.sender}_{msg.content}"
# 检查消息是否已处理过
if msg_id in processed_messages:
continue
# 处理 friend 类型消息
if msg.type == 'friend':
# 如果是监控列表中的联系人,直接转发
if msg.sender in monitor_senders:
# 按格式转发消息内容
formatted_message = format_message.format(sender=msg.sender, content=msg.content)
wx.ChatWith(target_contact)
wx.SendMsg(formatted_message)
wx.ChatWith(switch_back_to) # 切回原窗口
print(f"已转发来自 {msg.sender} 的消息给 {target_contact}:{formatted_message}")
# 如果是非监控列表的联系人,进行关键词匹配
else:
if any(keyword in msg.content for keyword in keywords):
# 按格式转发消息内容
formatted_message = format_message.format(sender=msg.sender, content=msg.content)
wx.ChatWith(target_contact)
wx.SendMsg(formatted_message)
wx.ChatWith(switch_back_to) # 切回原窗口
print(f"已转发来自 {msg.sender} 的消息给 {target_contact}:{formatted_message}")
# 记录已处理的消息
processed_messages.add(msg_id)
# 检查是否需要释放内存
if len(processed_messages) > MAX_PROCESSED_MESSAGES:
processed_messages.clear() # 清除已处理消息记录
start_time = datetime.now() # 更新启动时间,避免重复处理早期消息
# 每隔配置的时间间隔循环一次
time.sleep(interval_seconds)
三、使用方法
-
配置文件示例
config.txtsend_to=TargetContact switch_back_to=ChatWindow format_message={sender}: {content} interval_seconds=10 monitor_senders=Friend1,Friend2 keywords=urgent,importantsend_to:目标联系人名称,指定消息转发的联系人。switch_back_to:原聊天窗口,转发后会自动切回。format_message:转发消息的格式,可以包含{sender}和{content}占位符。interval_seconds:每次循环的时间间隔(单位:秒)。monitor_senders:监控的联系人列表,以逗号分隔。keywords:关键词列表,以逗号分隔。
-
运行代码
确保配置文件在同一目录下后,直接运行代码即可。
更多推荐



所有评论(0)