fix(多适配器支持): 处理 Bot 实例与平台 ID

This commit is contained in:
SXP-Simon
2025-11-18 14:38:52 +08:00
committed by Helian Nuits
parent 4f2f5a83af
commit 64ac6c429b
4 changed files with 35 additions and 11 deletions
+10 -2
View File
@@ -70,7 +70,7 @@ class QQGroupDailyAnalysis(Star):
async def _delayed_start_scheduler(self):
"""延迟启动调度器,给系统时间初始化"""
try:
# 等待30秒让系统完全初始化
# 等待10秒让系统完全初始化
await asyncio.sleep(30)
# 初始化所有bot实例
@@ -174,9 +174,17 @@ class QQGroupDailyAnalysis(Star):
logger.info(f"当前输出格式配置: {config_manager.get_output_format()}")
try:
# 获取该群对应的平台ID和bot实例
platform_id = auto_scheduler._get_platform_id_for_group(group_id)
bot_instance = bot_manager.get_bot_instance(platform_id)
if not bot_instance:
yield event.plain_result(f"❌ 未找到群 {group_id} 对应的bot实例(平台: {platform_id}")
return
# 获取群聊消息
messages = await message_analyzer.message_handler.fetch_group_messages(
bot_manager.get_bot_instance(), group_id, analysis_days
bot_instance, group_id, analysis_days, platform_id
)
if not messages:
yield event.plain_result(
+8 -1
View File
@@ -120,7 +120,14 @@ class BotManager:
def update_from_event(self, event):
"""从事件更新bot实例(用于手动命令)"""
if hasattr(event, "bot") and event.bot:
self.set_bot_instance(event.bot)
# 从事件中获取平台ID
platform_id = None
if hasattr(event, "platform") and event.platform:
platform_id = event.platform
elif hasattr(event, "metadata") and hasattr(event.metadata, "platform"):
platform_id = event.metadata.platform
self.set_bot_instance(event.bot, platform_id)
# 每次都尝试从bot实例提取QQ号
bot_qq_id = self._extract_bot_qq_id(event.bot)
if bot_qq_id:
+15 -6
View File
@@ -376,9 +376,12 @@ class AutoScheduler:
async def _send_image_message(self, group_id: str, image_url: str):
"""发送图片消息到群"""
try:
bot_instance = self.bot_manager.get_bot_instance()
# 获取该群对应的平台ID和bot实例
platform_id = self._get_platform_id_for_group(group_id)
bot_instance = self.bot_manager.get_bot_instance(platform_id)
if not bot_instance:
logger.error(f"{group_id} 发送图片失败:缺少bot实例")
logger.error(f"{group_id} 发送图片失败:缺少bot实例(平台: {platform_id}")
return
# 发送图片消息到群
@@ -398,9 +401,12 @@ class AutoScheduler:
async def _send_text_message(self, group_id: str, text_content: str):
"""发送文本消息到群"""
try:
bot_instance = self.bot_manager.get_bot_instance()
# 获取该群对应的平台ID和bot实例
platform_id = self._get_platform_id_for_group(group_id)
bot_instance = self.bot_manager.get_bot_instance(platform_id)
if not bot_instance:
logger.error(f"{group_id} 发送文本失败:缺少bot实例")
logger.error(f"{group_id} 发送文本失败:缺少bot实例(平台: {platform_id}")
return
# 发送文本消息到群
@@ -415,9 +421,12 @@ class AutoScheduler:
async def _send_pdf_file(self, group_id: str, pdf_path: str):
"""发送PDF文件到群"""
try:
bot_instance = self.bot_manager.get_bot_instance()
# 获取该群对应的平台ID和bot实例
platform_id = self._get_platform_id_for_group(group_id)
bot_instance = self.bot_manager.get_bot_instance(platform_id)
if not bot_instance:
logger.error(f"{group_id} 发送PDF失败:缺少bot实例")
logger.error(f"{group_id} 发送PDF失败:缺少bot实例(平台: {platform_id}")
return
# 发送PDF文件到群
+2 -2
View File
@@ -32,10 +32,10 @@ class MessageAnalyzer:
return str(bot_instance.user_id)
return None
async def set_bot_instance(self, bot_instance):
async def set_bot_instance(self, bot_instance, platform_id=None):
"""设置bot实例(保持向后兼容)"""
if self.bot_manager:
self.bot_manager.set_bot_instance(bot_instance)
self.bot_manager.set_bot_instance(bot_instance, platform_id)
else:
# 从bot实例提取QQ号并设置为列表
bot_qq_id = self._extract_bot_qq_id_from_instance(bot_instance)