mirror of
https://github.com/Nezumi-2711/astrbot_plugin_qq_group_daily_analysis.git
synced 2026-09-22 13:38:43 +00:00
fix(分析发送处理正确匹配): 正确处理群聊分析文件的发送匹配,与消息获取时的逻辑一致
This commit is contained in:
+110
-41
@@ -475,56 +475,124 @@ class AutoScheduler:
|
||||
logger.error(f"发送图片消息到群 {group_id} 失败: {e}")
|
||||
|
||||
async def _send_text_message(self, group_id: str, text_content: str):
|
||||
"""发送文本消息到群"""
|
||||
"""发送文本消息到群 - 依次尝试所有可用平台"""
|
||||
try:
|
||||
# 获取该群对应的平台ID和bot实例
|
||||
platform_id = await self._get_platform_id_for_group(group_id)
|
||||
|
||||
if not platform_id:
|
||||
logger.error(f"❌ 群 {group_id} 无法获取平台ID,无法发送文本")
|
||||
return
|
||||
|
||||
bot_instance = self.bot_manager.get_bot_instance(platform_id)
|
||||
|
||||
if not bot_instance:
|
||||
logger.error(f"❌ 群 {group_id} 发送文本失败:缺少bot实例(平台: {platform_id})")
|
||||
return
|
||||
# 获取所有可用的平台,依次尝试发送
|
||||
if hasattr(self.bot_manager, "_bot_instances") and self.bot_manager._bot_instances:
|
||||
available_platforms = list(self.bot_manager._bot_instances.items())
|
||||
logger.info(f"群 {group_id} 检测到 {len(available_platforms)} 个可用平台,开始依次尝试发送文本...")
|
||||
|
||||
for test_platform_id, test_bot_instance in available_platforms:
|
||||
try:
|
||||
logger.info(f"尝试使用平台 {test_platform_id} 向群 {group_id} 发送文本...")
|
||||
|
||||
# 发送文本消息到群
|
||||
await test_bot_instance.api.call_action(
|
||||
"send_group_msg", group_id=group_id, message=text_content
|
||||
)
|
||||
logger.info(f"✅ 群 {group_id} 成功通过平台 {test_platform_id} 发送文本")
|
||||
return True # 成功发送,返回
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
# 检查是否是特定的错误码
|
||||
if "retcode=1200" in error_msg:
|
||||
logger.debug(f"平台 {test_platform_id} 发送文本失败:机器人可能不在此群中,继续尝试下一个平台")
|
||||
else:
|
||||
logger.debug(f"平台 {test_platform_id} 发送文本失败: {e},继续尝试下一个平台")
|
||||
continue
|
||||
|
||||
# 所有平台都尝试失败
|
||||
logger.error(f"❌ 群 {group_id} 所有平台都尝试发送文本失败")
|
||||
return False
|
||||
else:
|
||||
# 回退到原来的逻辑(单个平台)
|
||||
logger.warning(f"群 {group_id} 没有多个平台可用,使用回退逻辑")
|
||||
platform_id = await self._get_platform_id_for_group(group_id)
|
||||
|
||||
if not platform_id:
|
||||
logger.error(f"❌ 群 {group_id} 无法获取平台ID,无法发送文本")
|
||||
return False
|
||||
|
||||
bot_instance = self.bot_manager.get_bot_instance(platform_id)
|
||||
|
||||
if not bot_instance:
|
||||
logger.error(f"❌ 群 {group_id} 发送文本失败:缺少bot实例(平台: {platform_id})")
|
||||
return False
|
||||
|
||||
# 发送文本消息到群
|
||||
await bot_instance.api.call_action(
|
||||
"send_group_msg", group_id=group_id, message=text_content
|
||||
)
|
||||
logger.info(f"群 {group_id} 文本消息发送成功")
|
||||
# 发送文本消息到群
|
||||
await bot_instance.api.call_action(
|
||||
"send_group_msg", group_id=group_id, message=text_content
|
||||
)
|
||||
logger.info(f"群 {group_id} 文本消息发送成功")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"发送文本消息到群 {group_id} 失败: {e}")
|
||||
return False
|
||||
|
||||
async def _send_pdf_file(self, group_id: str, pdf_path: str):
|
||||
"""发送PDF文件到群"""
|
||||
"""发送PDF文件到群 - 依次尝试所有可用平台"""
|
||||
try:
|
||||
# 获取该群对应的平台ID和bot实例
|
||||
platform_id = await self._get_platform_id_for_group(group_id)
|
||||
|
||||
if not platform_id:
|
||||
logger.error(f"❌ 群 {group_id} 无法获取平台ID,无法发送PDF")
|
||||
return
|
||||
|
||||
bot_instance = self.bot_manager.get_bot_instance(platform_id)
|
||||
|
||||
if not bot_instance:
|
||||
logger.error(f"❌ 群 {group_id} 发送PDF失败:缺少bot实例(平台: {platform_id})")
|
||||
return
|
||||
# 获取所有可用的平台,依次尝试发送
|
||||
if hasattr(self.bot_manager, "_bot_instances") and self.bot_manager._bot_instances:
|
||||
available_platforms = list(self.bot_manager._bot_instances.items())
|
||||
logger.info(f"群 {group_id} 检测到 {len(available_platforms)} 个可用平台,开始依次尝试发送PDF...")
|
||||
|
||||
for test_platform_id, test_bot_instance in available_platforms:
|
||||
try:
|
||||
logger.info(f"尝试使用平台 {test_platform_id} 向群 {group_id} 发送PDF...")
|
||||
|
||||
# 发送PDF文件到群
|
||||
await test_bot_instance.api.call_action(
|
||||
"send_group_msg",
|
||||
group_id=group_id,
|
||||
message=[
|
||||
{"type": "text", "data": {"text": "📊 每日群聊分析报告已生成:"}},
|
||||
{"type": "file", "data": {"file": pdf_path}},
|
||||
],
|
||||
)
|
||||
logger.info(f"✅ 群 {group_id} 成功通过平台 {test_platform_id} 发送PDF")
|
||||
return True # 成功发送,返回
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
# 检查是否是特定的错误码
|
||||
if "retcode=1200" in error_msg:
|
||||
logger.debug(f"平台 {test_platform_id} 发送PDF失败:机器人可能不在此群中,继续尝试下一个平台")
|
||||
else:
|
||||
logger.debug(f"平台 {test_platform_id} 发送PDF失败: {e},继续尝试下一个平台")
|
||||
continue
|
||||
|
||||
# 所有平台都尝试失败
|
||||
logger.error(f"❌ 群 {group_id} 所有平台都尝试发送PDF失败")
|
||||
return False
|
||||
else:
|
||||
# 回退到原来的逻辑(单个平台)
|
||||
logger.warning(f"群 {group_id} 没有多个平台可用,使用回退逻辑")
|
||||
platform_id = await self._get_platform_id_for_group(group_id)
|
||||
|
||||
if not platform_id:
|
||||
logger.error(f"❌ 群 {group_id} 无法获取平台ID,无法发送PDF")
|
||||
return False
|
||||
|
||||
bot_instance = self.bot_manager.get_bot_instance(platform_id)
|
||||
|
||||
if not bot_instance:
|
||||
logger.error(f"❌ 群 {group_id} 发送PDF失败:缺少bot实例(平台: {platform_id})")
|
||||
return False
|
||||
|
||||
# 发送PDF文件到群
|
||||
await bot_instance.api.call_action(
|
||||
"send_group_msg",
|
||||
group_id=group_id,
|
||||
message=[
|
||||
{"type": "text", "data": {"text": "📊 每日群聊分析报告已生成:"}},
|
||||
{"type": "file", "data": {"file": pdf_path}},
|
||||
],
|
||||
)
|
||||
logger.info(f"群 {group_id} PDF文件发送成功")
|
||||
# 发送PDF文件到群
|
||||
await bot_instance.api.call_action(
|
||||
"send_group_msg",
|
||||
group_id=group_id,
|
||||
message=[
|
||||
{"type": "text", "data": {"text": "📊 每日群聊分析报告已生成:"}},
|
||||
{"type": "file", "data": {"file": pdf_path}},
|
||||
],
|
||||
)
|
||||
logger.info(f"群 {group_id} PDF文件发送成功")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"发送PDF文件到群 {group_id} 失败: {e}")
|
||||
@@ -537,3 +605,4 @@ class AutoScheduler:
|
||||
)
|
||||
except Exception as e2:
|
||||
logger.error(f"发送PDF失败提示到群 {group_id} 也失败: {e2}")
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user