微信PC端自动回复
简介:输入当天日程和特定回复,在收到新消息时判断,如果收到的是关键字,就发送特定回复,否则判断本地时间是否有日程,如果有,回复相应日程信息,无则回复设定信息。注意:写着玩的,功能很局限,仅供学习。日程时间只弄了整点到整点的,而且时间重叠时,重叠时间段中最先输入的有效。
注意,原理是不考虑同时收到两个人的消息的情况下,新收到消息的聊天会到第一位,注意新消息并不区分本人和对方。所以,如果微信消息有置顶聊天,那么程序只能对置顶的聊天有效,否则全有效。
使用时先按右上角按钮将微信置顶并切换到聊天页,注意输入格式,先输入一个数字表示当天有几个日程,后每一行输入一项日程,两个以空格隔开的数字表示日程的起始时间,然后一段话是这个时间段的回复。日程输入完毕,输入特定的一段话,这段话在收到关键字后回复(默认关键字是TD)。
注意,程序进入检测状态后,不断定位鼠标和不停切换焦点到微信,影响其他任何操作!长按ESC关闭程序!
from uiautomation import WindowControl
from _datetime import datetime
import keyboard
wx = WindowControl(name='微信')
if (wx.Name != '微信'):
print('请将微信置顶后再运行!\n')
exit()
else:
print(wx)
wx.SwitchToThisWindow()
hh = wx.ListControl(name='会话')
print(hh)
n = int(input('您今天共有几项日程?\n'))
data = {}
print('请输入您的各项日程,先输入两个整数表示时间,后输入一段文字描述日程,均使用空格隔开,24小时制')
for i in range(n):
t = input().split()
data[(t, t)] = t
# print(data)
ms=input('请您输入TD激活的应答:')
print(datetime.now().strftime("%H"))
lm=wx.Name
f=False
while True:
if keyboard.is_pressed('esc'):
break# 退出循环
# quit()# 退出程序
we=hh.TextControl(searchDepth=5)
while not we.Exists(0):
pass
if we.Name:
we.Click(simulateMove=False)
tt=datetime.now().strftime("%H")
flag=True
m = wx.ListControl(Name='消息').GetChildren()[-1].Name
print(m)
if(m=='TD'):
wx.SendKeys(ms, waitTime=1)
m = ms
wx.SendKeys('{Enter}', waitTime=0)
elif f:
if m != lm:
for (x,y) in data:
if x<=tt<y:
wx.SendKeys(data[(x,y)],waitTime=1)
m=data[(x,y)]
wx.SendKeys('{Enter}', waitTime=0)
flag=False
break
if flag:
wx.SendKeys('正忙(自动回复)', waitTime=1)
m='正忙(自动回复)'
wx.SendKeys('{Enter}', waitTime=500)
we.Click(x=100, y=300)
f=True
lm=m
print('lm=',lm)
本帖最后由 winjeak 于 2023-7-13 17:52 编辑
闲来无事,用GPT帮你优化了下代码,{:1_918:}如下:
from uiautomation import WindowControl
from _datetime import datetime
import keyboard
def send_message(wx, message):
wx.SendKeys(message, waitTime=1)
wx.SendKeys('{Enter}', waitTime=0)
wx = WindowControl(name='微信')
busy_message = '正忙(自动回复)'
if (wx.Name != '微信'):
print('请将微信置顶后再运行!\n')
exit()
else:
print(wx)
wx.SwitchToThisWindow()
hh = wx.ListControl(name='会话')
print(hh)
n = int(input('您今天共有几项日程?\n'))
data = {}
print('请输入您的各项日程,先输入两个整数表示时间,后输入一段文字描述日程,均使用空格隔开,24小时制')
for i in range(n):
t = input().split()
data[(t, t)] = t
ms=input('请您输入TD激活的应答:')
print(datetime.now().strftime("%H"))
last_message=wx.Name
is_first_loop=False
while True:
if keyboard.is_pressed('esc'):
break
we=hh.TextControl(searchDepth=5)
while not we.Exists(0):
pass
if we.Name:
we.Click(simulateMove=False)
current_time=datetime.now().strftime("%H")
is_schedule_found=True
current_message = wx.ListControl(Name='消息').GetChildren()[-1].Name
print(current_message)
if(current_message=='TD'):
send_message(wx, ms)
current_message = ms
elif is_first_loop:
if current_message != last_message:
for (start_time,end_time) in data:
if start_time<=current_time<end_time:
send_message(wx, data[(start_time,end_time)])
current_message=data[(start_time,end_time)]
is_schedule_found=False
break
if is_schedule_found:
send_message(wx, busy_message)
current_message=busy_message
we.Click(x=100, y=300)
is_first_loop=True
last_message=current_message
print('last_message=',last_message) wangdeshui 发表于 2023-7-13 06:46
影响其他任何操作,这就。。。。。
因为itchat库基本不能用了,所以只好模拟操作{:1_924:} 这个有意思,可惜就是不能后台,感谢分享 影响其他任何操作,这就。。。。。 运行环境如何 支持一下! 使用wxpy不是更好 不错哟!!!! python可以实现后台运行吗? 还有这种操作 感谢分享,支持一下!