teddy 08d302b22c fix(sendmsg): 修复文件路径检查逻辑
- 合并文件路径和文件存在性检查为单一条件,确保在文件路径有效时才进行后续操作。
2025-08-21 15:28:01 +08:00

159 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from wxauto import WeChat
from datetime import date, datetime, time as dt_time
import sys
import os
import subprocess
from config import CONFIG
import time
from logger_config import setup_logger
# 设置日志记录器
logger = setup_logger('sendmsg')
def wait_until_time():
"""等待到配置的发送时间"""
now = datetime.now()
# 从配置文件中读取发送时间
send_time_str = CONFIG['sending_time'] # "17:10"
hour, minute = map(int, send_time_str.split(':'))
target_time = now.replace(hour=hour, minute=minute, second=0, microsecond=0)
# 如果当前时间已经过了今天的发送时间,则设置为明天的发送时间
if now >= target_time:
target_time = target_time.replace(day=target_time.day + 1)
wait_seconds = (target_time - now).total_seconds()
logger.info(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}")
logger.info(f"目标发送时间: {target_time.strftime('%Y-%m-%d %H:%M:%S')}")
logger.info(f"等待时间: {wait_seconds/3600:.2f} 小时 ({wait_seconds:.0f} 秒)")
time.sleep(wait_seconds)
logger.info("等待完成,开始执行发送操作")
def send_daily_message(count):
"""发送每日消息的主函数"""
logger.info(f"开始执行每日消息发送任务,当前尝试次数: {count}")
today = date.today()
formatted_date = today.strftime('%Y-%m-%d')
# 支持多种图片格式jpg, jpeg, png
file_formats = [".jpg", ".jpeg", ".png"]
# 初始化文件路径变量
file_path = None
file_name = formatted_date + ".jpg"
file_path = CONFIG['file_path'] + file_name
logger.info(f"目标日期: {formatted_date}")
logger.info(f"目标文件: {file_name}")
logger.info(f"完整文件路径: {file_path}")
num = count
if num >= 4:
logger.error("已尝试4次程序将退出")
sys.exit(0) # 直接终止程序
try:
logger.info("尝试初始化微信客户端...")
wx = WeChat()
logger.info("微信客户端初始化成功")
except Exception as e:
logger.error(f"微信客户端初始化失败: {str(e)}")
logger.info("尝试发送飞书提醒消息...")
subprocess.run([sys.executable, 'send_openmsg.py'])
if num<4:
logger.info(f"等待60秒后重试当前尝试次数: {num+1}")
time.sleep(60)
num += 1
send_daily_message(num)
else:
logger.error("已尝试4次程序将退出")
sys.exit(0) # 直接终止程序
msg = CONFIG['message']
who = CONFIG['messages_reciever']
logger.info(f"消息内容: {msg}")
logger.info(f"接收者: {who}")
# 依次检查各种格式的文件是否存在
for format in file_formats:
temp_file_name = formatted_date + format
temp_file_path = CONFIG['file_path'] + temp_file_name
if os.path.isfile(temp_file_path):
file_path = temp_file_path
print(f"找到了{format}格式的图片文件!")
break
if file_path and os.path.isfile(file_path):
logger.info("找到了指定文件!")
logger.info(f"文件大小: {os.path.getsize(file_path)} 字节")
# 等待到配置的时间再执行发送操作
wait_until_time()
logger.info("开始发送文件和消息...")
try:
# 发送文件
logger.info(f"正在发送文件: {file_path}")
wx.SendFiles(filepath=file_path, who=who)
logger.info("文件发送成功")
# 发送消息
logger.info(f"正在发送消息: {msg}")
wx.SendMsg(msg=msg, who=who)
logger.info("消息发送成功")
logger.info("所有内容发送完成!")
return True
except Exception as e:
logger.error(f"发送过程中出现错误: {str(e)}")
logger.error(f"错误类型: {type(e).__name__}")
# 发送失败时也尝试发送飞书提醒
subprocess.run([sys.executable, 'send_filemsg.py'])
if num<4:
logger.info(f"等待60秒后重试当前尝试次数: {num+1}")
time.sleep(60)
num += 1
send_daily_message(num)
else:
logger.error("已尝试4次程序将退出")
sys.exit(0)
else:
print("没找到任何支持格式的图片文件(.jpg, .jpeg, .png)")
logger.warning(f"没找到指定文件: {file_path}")
logger.info("尝试发送飞书提醒消息...")
subprocess.run([sys.executable, 'send_filemsg.py'])
if num<4:
time.sleep(1800)
logger.info(f"等待60秒后重试当前尝试次数: {num+1}")
time.sleep(60)
num += 1
send_daily_message(num)
else:
logger.error("已尝试4次程序将退出")
sys.exit(0) # 直接终止程序
# 如果直接运行此脚本,执行发送消息功能
if __name__ == "__main__":
logger.info("=" * 50)
logger.info("开始执行微信消息发送程序")
logger.info("=" * 50)
count = 0
try:
send_daily_message(count)
logger.info("程序执行完成")
except Exception as e:
logger.error(f"程序执行过程中出现未捕获的异常: {str(e)}")
logger.error(f"异常类型: {type(e).__name__}")
import traceback
logger.error(f"异常堆栈: {traceback.format_exc()}")
sys.exit(1)