mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 16:07:01 +08:00
fix(wechat): add error handling
This commit is contained in:
+121
-113
@@ -252,51 +252,55 @@ class WeChat:
|
|||||||
:param link: 跳转链接
|
:param link: 跳转链接
|
||||||
:return: 发送状态,错误信息
|
:return: 发送状态,错误信息
|
||||||
"""
|
"""
|
||||||
if not self.__get_access_token():
|
try:
|
||||||
logger.error("获取微信access_token失败,请检查参数配置")
|
if not self.__get_access_token():
|
||||||
return None
|
logger.error("获取微信access_token失败,请检查参数配置")
|
||||||
|
return None
|
||||||
|
|
||||||
if image:
|
if image:
|
||||||
ret_code = self.__send_image_message(title=title, text=text, image_url=image, userid=userid, link=link)
|
ret_code = self.__send_image_message(title=title, text=text, image_url=image, userid=userid, link=link)
|
||||||
else:
|
else:
|
||||||
ret_code = self.__send_message(title=title, text=text, userid=userid, link=link)
|
ret_code = self.__send_message(title=title, text=text, userid=userid, link=link)
|
||||||
|
|
||||||
return ret_code
|
return ret_code
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"发送消息失败:{e}")
|
||||||
|
return False
|
||||||
|
|
||||||
def send_medias_msg(self, medias: List[MediaInfo], userid: str = "") -> Optional[bool]:
|
def send_medias_msg(self, medias: List[MediaInfo], userid: str = "") -> Optional[bool]:
|
||||||
"""
|
"""
|
||||||
发送列表类消息
|
发送列表类消息
|
||||||
"""
|
"""
|
||||||
if not self.__get_access_token():
|
|
||||||
logger.error("获取微信access_token失败,请检查参数配置")
|
|
||||||
return None
|
|
||||||
|
|
||||||
if not userid:
|
|
||||||
userid = "@all"
|
|
||||||
articles = []
|
|
||||||
index = 1
|
|
||||||
for media in medias:
|
|
||||||
if media.vote_average:
|
|
||||||
title = f"{index}. {media.title_year}\n类型:{media.type.value},评分:{media.vote_average}"
|
|
||||||
else:
|
|
||||||
title = f"{index}. {media.title_year}\n类型:{media.type.value}"
|
|
||||||
articles.append({
|
|
||||||
"title": title,
|
|
||||||
"description": "",
|
|
||||||
"picurl": media.get_message_image() if index == 1 else media.get_poster_image(),
|
|
||||||
"url": media.detail_link
|
|
||||||
})
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
req_json = {
|
|
||||||
"touser": userid,
|
|
||||||
"msgtype": "news",
|
|
||||||
"agentid": self._appid,
|
|
||||||
"news": {
|
|
||||||
"articles": articles
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try:
|
try:
|
||||||
|
if not self.__get_access_token():
|
||||||
|
logger.error("获取微信access_token失败,请检查参数配置")
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not userid:
|
||||||
|
userid = "@all"
|
||||||
|
articles = []
|
||||||
|
index = 1
|
||||||
|
for media in medias:
|
||||||
|
if media.vote_average:
|
||||||
|
title = f"{index}. {media.title_year}\n类型:{media.type.value},评分:{media.vote_average}"
|
||||||
|
else:
|
||||||
|
title = f"{index}. {media.title_year}\n类型:{media.type.value}"
|
||||||
|
articles.append({
|
||||||
|
"title": title,
|
||||||
|
"description": "",
|
||||||
|
"picurl": media.get_message_image() if index == 1 else media.get_poster_image(),
|
||||||
|
"url": media.detail_link
|
||||||
|
})
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
req_json = {
|
||||||
|
"touser": userid,
|
||||||
|
"msgtype": "news",
|
||||||
|
"agentid": self._appid,
|
||||||
|
"news": {
|
||||||
|
"articles": articles
|
||||||
|
}
|
||||||
|
}
|
||||||
return self.__post_request(self._send_msg_url, req_json)
|
return self.__post_request(self._send_msg_url, req_json)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"发送消息失败:{e}")
|
logger.error(f"发送消息失败:{e}")
|
||||||
@@ -307,49 +311,49 @@ class WeChat:
|
|||||||
"""
|
"""
|
||||||
发送列表消息
|
发送列表消息
|
||||||
"""
|
"""
|
||||||
if not self.__get_access_token():
|
|
||||||
logger.error("获取微信access_token失败,请检查参数配置")
|
|
||||||
return None
|
|
||||||
|
|
||||||
# 先发送标题
|
|
||||||
if title:
|
|
||||||
self.__send_message(title=title, userid=userid, link=link)
|
|
||||||
|
|
||||||
# 发送列表
|
|
||||||
if not userid:
|
|
||||||
userid = "@all"
|
|
||||||
articles = []
|
|
||||||
index = 1
|
|
||||||
for context in torrents:
|
|
||||||
torrent = context.torrent_info
|
|
||||||
meta = MetaInfo(title=torrent.title, subtitle=torrent.description)
|
|
||||||
mediainfo = context.media_info
|
|
||||||
torrent_title = f"{index}.【{torrent.site_name}】" \
|
|
||||||
f"{meta.season_episode} " \
|
|
||||||
f"{meta.resource_term} " \
|
|
||||||
f"{meta.video_term} " \
|
|
||||||
f"{meta.release_group} " \
|
|
||||||
f"{StringUtils.str_filesize(torrent.size)} " \
|
|
||||||
f"{torrent.volume_factor} " \
|
|
||||||
f"{torrent.seeders}↑"
|
|
||||||
torrent_title = re.sub(r"\s+", " ", torrent_title).strip()
|
|
||||||
articles.append({
|
|
||||||
"title": torrent_title,
|
|
||||||
"description": torrent.description if index == 1 else "",
|
|
||||||
"picurl": mediainfo.get_message_image() if index == 1 else "",
|
|
||||||
"url": torrent.page_url
|
|
||||||
})
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
req_json = {
|
|
||||||
"touser": userid,
|
|
||||||
"msgtype": "news",
|
|
||||||
"agentid": self._appid,
|
|
||||||
"news": {
|
|
||||||
"articles": articles
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try:
|
try:
|
||||||
|
if not self.__get_access_token():
|
||||||
|
logger.error("获取微信access_token失败,请检查参数配置")
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 先发送标题
|
||||||
|
if title:
|
||||||
|
self.__send_message(title=title, userid=userid, link=link)
|
||||||
|
|
||||||
|
# 发送列表
|
||||||
|
if not userid:
|
||||||
|
userid = "@all"
|
||||||
|
articles = []
|
||||||
|
index = 1
|
||||||
|
for context in torrents:
|
||||||
|
torrent = context.torrent_info
|
||||||
|
meta = MetaInfo(title=torrent.title, subtitle=torrent.description)
|
||||||
|
mediainfo = context.media_info
|
||||||
|
torrent_title = f"{index}.【{torrent.site_name}】" \
|
||||||
|
f"{meta.season_episode} " \
|
||||||
|
f"{meta.resource_term} " \
|
||||||
|
f"{meta.video_term} " \
|
||||||
|
f"{meta.release_group} " \
|
||||||
|
f"{StringUtils.str_filesize(torrent.size)} " \
|
||||||
|
f"{torrent.volume_factor} " \
|
||||||
|
f"{torrent.seeders}↑"
|
||||||
|
torrent_title = re.sub(r"\s+", " ", torrent_title).strip()
|
||||||
|
articles.append({
|
||||||
|
"title": torrent_title,
|
||||||
|
"description": torrent.description if index == 1 else "",
|
||||||
|
"picurl": mediainfo.get_message_image() if index == 1 else "",
|
||||||
|
"url": torrent.page_url
|
||||||
|
})
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
req_json = {
|
||||||
|
"touser": userid,
|
||||||
|
"msgtype": "news",
|
||||||
|
"agentid": self._appid,
|
||||||
|
"news": {
|
||||||
|
"articles": articles
|
||||||
|
}
|
||||||
|
}
|
||||||
return self.__post_request(self._send_msg_url, req_json)
|
return self.__post_request(self._send_msg_url, req_json)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"发送消息失败:{e}")
|
logger.error(f"发送消息失败:{e}")
|
||||||
@@ -424,49 +428,53 @@ class WeChat:
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
# 请求URL
|
try:
|
||||||
req_url = self._create_menu_url.format(access_token="{access_token}", agentid=self._appid)
|
# 请求URL
|
||||||
|
req_url = self._create_menu_url.format(access_token="{access_token}", agentid=self._appid)
|
||||||
|
|
||||||
# 对commands按category分组
|
# 对commands按category分组
|
||||||
category_dict = {}
|
category_dict = {}
|
||||||
for key, value in commands.items():
|
for key, value in commands.items():
|
||||||
category: str = value.get("category")
|
category: str = value.get("category")
|
||||||
if category:
|
if category:
|
||||||
if not category_dict.get(category):
|
if not category_dict.get(category):
|
||||||
category_dict[category] = {}
|
category_dict[category] = {}
|
||||||
category_dict[category][key] = value
|
category_dict[category][key] = value
|
||||||
|
|
||||||
# 一级菜单
|
# 一级菜单
|
||||||
buttons = []
|
buttons = []
|
||||||
for category, menu in category_dict.items():
|
for category, menu in category_dict.items():
|
||||||
# 二级菜单
|
# 二级菜单
|
||||||
sub_buttons = []
|
sub_buttons = []
|
||||||
for key, value in menu.items():
|
for key, value in menu.items():
|
||||||
sub_buttons.append({
|
sub_buttons.append({
|
||||||
"type": "click",
|
"type": "click",
|
||||||
"name": value.get("description"),
|
"name": value.get("description"),
|
||||||
"key": key
|
"key": key
|
||||||
|
})
|
||||||
|
buttons.append({
|
||||||
|
"name": category,
|
||||||
|
"sub_button": sub_buttons[:5]
|
||||||
})
|
})
|
||||||
buttons.append({
|
|
||||||
"name": category,
|
|
||||||
"sub_button": sub_buttons[:5]
|
|
||||||
})
|
|
||||||
|
|
||||||
if buttons:
|
if buttons:
|
||||||
# 发送请求
|
# 发送请求
|
||||||
try:
|
|
||||||
self.__post_request(req_url, {
|
self.__post_request(req_url, {
|
||||||
"button": buttons[:3]
|
"button": buttons[:3]
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"创建菜单失败:{e}")
|
logger.error(f"创建菜单失败:{e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def delete_menus(self):
|
def delete_menus(self):
|
||||||
"""
|
"""
|
||||||
删除微信菜单
|
删除微信菜单
|
||||||
"""
|
"""
|
||||||
# 请求URL
|
try:
|
||||||
req_url = self._delete_menu_url.format(access_token=self.__get_access_token(), agentid=self._appid)
|
# 请求URL
|
||||||
# 发送请求
|
req_url = self._delete_menu_url.format(access_token=self.__get_access_token(), agentid=self._appid)
|
||||||
RequestUtils().get(req_url)
|
# 发送请求
|
||||||
|
RequestUtils().get(req_url)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"删除菜单失败:{e}")
|
||||||
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user