diff --git a/core/api/group.py b/core/api/group.py index 224d148..acdb5c6 100644 --- a/core/api/group.py +++ b/core/api/group.py @@ -9,6 +9,7 @@ import json from core.redis_manager import redis_manager from .base import BaseAPI from models.objects import GroupInfo, GroupMemberInfo, GroupHonorInfo +from core.logger import logger class GroupAPI(BaseAPI): @@ -194,6 +195,22 @@ class GroupAPI(BaseAPI): List[GroupInfo]: 包含所有群组信息的 `GroupInfo` 对象列表。 """ res = await self.call_api("get_group_list") + + # 增加日志记录 API 原始返回 + logger.debug(f"OneBot API 'get_group_list' raw response: {res}") + + # 健壮性处理:如果返回的是字符串,尝试解析为 JSON + if isinstance(res, str): + try: + res = json.loads(res) + except json.JSONDecodeError: + logger.error(f"Failed to decode JSON from 'get_group_list' response: {res}") + return [] + + if not isinstance(res, list): + logger.error(f"Expected a list from 'get_group_list', but got {type(res)}: {res}") + return [] + return [GroupInfo(**item) for item in res] async def get_group_member_info(self, group_id: int, user_id: int, no_cache: bool = False) -> GroupMemberInfo: diff --git a/plugins/broadcast.py b/plugins/broadcast.py index 37cfd32..05658ca 100644 --- a/plugins/broadcast.py +++ b/plugins/broadcast.py @@ -19,7 +19,8 @@ async def broadcast_message(event: MessageEvent): :param event: 消息事件对象。 """ # 1. 检查是否为私聊消息 - if event.group_id: + # 使用 hasattr 安全地检查 group_id 属性,避免 AttributeError + if hasattr(event, 'group_id') and event.group_id: # 在群聊中调用时,静默处理,不予响应 return @@ -41,7 +42,19 @@ async def broadcast_message(event: MessageEvent): await event.reply(f"获取群聊列表时发生错误,无法广播。错误信息: {e}") return - # 4. 遍历所有群聊并转发消息 + # 4. 获取被回复的消息内容 + try: + message_data = await bot.get_msg(reply.message_id) + message_content = message_data.get("message", "") + if not message_content: + await event.reply("无法获取被回复的消息内容,广播失败。") + return + except Exception as e: + logger.error(f"[Broadcast] 获取消息内容失败: {e}") + await event.reply(f"获取消息内容时发生错误: {e}") + return + + # 5. 遍历所有群聊并发送消息 success_count = 0 failed_count = 0 total_groups = len(group_list) @@ -49,23 +62,23 @@ async def broadcast_message(event: MessageEvent): await event.reply(f"准备向 {total_groups} 个群聊广播消息,请稍候...") for group in group_list: - group_id = group.get("group_id") + group_id = group.group_id if not group_id: continue try: - # 直接转发被回复的消息 - await bot.forward_message( + # 发送消息到群聊 + await bot.send_group_msg( group_id=group_id, - message_id=reply.message_id + message=message_content ) success_count += 1 - logger.info(f"[Broadcast] 已成功将消息转发至群聊: {group_id}") + logger.info(f"[Broadcast] 已成功将消息发送至群聊: {group_id}") except Exception as e: failed_count += 1 - logger.error(f"[Broadcast] 转发消息至群聊 {group_id} 失败: {e}") + logger.error(f"[Broadcast] 发送消息至群聊 {group_id} 失败: {e}") - # 5. 向管理员报告结果 + # 6. 向管理员报告结果 report_message = ( f"广播任务完成。\n" f"总群聊数: {total_groups}\n"