refactor(notify): 重构企业微信群机器人图片推送功能

-将图片压缩、存在性检查、Base64编码和MD5计算移至 CompanyWebHookBotPushImage 方法内部
- 优化错误处理和日志记录
- 简化调用接口,提高代码可读性和维护性
This commit is contained in:
2025-06-11 20:54:45 +08:00
parent 87857fd499
commit f60b276916
2 changed files with 59 additions and 74 deletions

View File

@@ -2000,34 +2000,14 @@ class MaaManager(QObject):
Config.get(Config.notify_CompanyWebHookBotUrl),
)
app_path = Config.app_path
image_path = app_path / "resources/images/notification/six_star.png"
# 压缩后得到的仍然是字符串路径
final_image_path = ImageUtils.compress_image_if_needed(
str(image_path)
image_path = (
app_path / "resources/images/notification/six_star.png"
)
# 转回Path对象方便exists判断
final_image_path = Path(
final_image_path
Notify.CompanyWebHookBotPushImage(
image_path,
Config.get(Config.notify_CompanyWebHookBotUrl),
)
if final_image_path.exists():
image_base64 = ImageUtils.get_base64_from_file(
str(final_image_path)
)
image_md5 = ImageUtils.calculate_md5_from_file(
str(final_image_path)
)
Notify.CompanyWebHookBotPushImage(
image_base64,
image_md5,
user_data["Notify"]["CompanyWebHookBotUrl"],
)
else:
logger.error(
f"{self.name} | 图片不存在或者压缩失败,请检查图片路径是否正确"
)
# 发送用户单独通知
if user_data["Notify"]["Enabled"] and user_data["Notify"]["IfSendSixStar"]:

View File

@@ -273,38 +273,55 @@ class Notification(QObject):
)
return f"使用企业微信群机器人推送通知时出错:{err}"
def CompanyWebHookBotPushImage(self, base64_content, md5_content, webhook_url):
"""使用企业微信群机器人推送图片通知
Args:
base64_content (str): 图片的base64编码字符串
md5_content (str): 图片的MD5值
webhook_url (str): 群组机器人WebHook地址
Returns:
bool: 推送是否成功
"""
if webhook_url == "":
logger.error("请正确设置企业微信群机器人的WebHook地址")
self.push_info_bar.emit(
"error",
"企业微信群机器人通知推送异常",
"请正确设置企业微信群机器人的WebHook地址",
-1,
)
return False
def CompanyWebHookBotPushImage(self, image_path: str, webhook_url: str) -> bool:
"""使用企业微信群机器人推送图片通知"""
try:
# 构造请求数据
# 压缩图片
final_image_path = ImageUtils.compress_image_if_needed(str(image_path))
final_image_path = Path(final_image_path)
# 检查图片是否存在
if not final_image_path.exists():
logger.error(
"图片推送异常 | 图片不存在或者压缩失败,请检查图片路径是否正确"
)
self.push_info_bar.emit(
"error",
"企业微信群机器人通知推送异常",
"图片不存在或者压缩失败,请检查图片路径是否正确",
-1,
)
return False
if not webhook_url:
logger.error("请正确设置企业微信群机器人的WebHook地址")
self.push_info_bar.emit(
"error",
"企业微信群机器人通知推送异常",
"请正确设置企业微信群机器人的WebHook地址",
-1,
)
return False
# 获取图片base64和md5
try:
image_base64 = ImageUtils.get_base64_from_file(str(final_image_path))
image_md5 = ImageUtils.calculate_md5_from_file(str(final_image_path))
except Exception as e:
logger.error(f"图片编码或MD5计算失败{e}")
self.push_info_bar.emit(
"error",
"企业微信群机器人通知推送异常",
f"图片编码或MD5计算失败{e}",
-1,
)
return False
data = {
"msgtype": "image",
"image": {
"base64": base64_content,
"md5": md5_content
}
"image": {"base64": image_base64, "md5": image_md5},
}
# 发送请求
for _ in range(3):
try:
response = requests.post(
@@ -314,8 +331,9 @@ class Notification(QObject):
)
info = response.json()
break
except Exception as e:
except requests.RequestException as e:
err = e
logger.warning(f"推送企业微信群机器人图片第{_+1}次失败:{e}")
time.sleep(0.1)
else:
logger.error(f"推送企业微信群机器人图片时出错:{err}")
@@ -327,7 +345,7 @@ class Notification(QObject):
)
return False
if info["errcode"] == 0:
if info.get("errcode") == 0:
logger.info("企业微信群机器人推送图片成功")
return True
else:
@@ -341,11 +359,11 @@ class Notification(QObject):
return False
except Exception as e:
logger.error(f"推送企业微信群机器人图片时出错{e}")
logger.error(f"推送企业微信群机器人图片时发生未知异常{e}")
self.push_info_bar.emit(
"error",
"企业微信群机器人图片推送失败",
f"使用企业微信群机器人推送图片时出错{e}",
f"发生未知异常{e}",
-1,
)
return False
@@ -386,26 +404,13 @@ class Notification(QObject):
"这是 AUTO_MAA 外部通知测试信息。如果你看到了这段内容,说明 AUTO_MAA 的通知功能已经正确配置且可以正常工作!",
Config.get(Config.notify_CompanyWebHookBotUrl),
)
app_path = Config.app_path
image_path = app_path / "resources/images/notification/test_notify.png"
# 压缩后得到的仍然是字符串路径
final_image_path = ImageUtils.compress_image_if_needed(str(image_path))
# 转回Path对象方便exists判断
final_image_path = Path(final_image_path)
if final_image_path.exists():
image_base64 = ImageUtils.get_base64_from_file(str(final_image_path))
image_md5 = ImageUtils.calculate_md5_from_file(str(final_image_path))
Notify.CompanyWebHookBotPushImage(
image_base64,
image_md5,
Config.get(Config.notify_CompanyWebHookBotUrl),
)
else:
logger.error(
f"通知测试 | 图片不存在或者压缩失败,请检查图片路径是否正确"
)
Notify.CompanyWebHookBotPushImage(
image_path,
Config.get(Config.notify_CompanyWebHookBotUrl),
)
return True