hotfix!!!!!!
This commit is contained in:
@@ -9,6 +9,7 @@ import json
|
|||||||
from core.redis_manager import redis_manager
|
from core.redis_manager import redis_manager
|
||||||
from .base import BaseAPI
|
from .base import BaseAPI
|
||||||
from models.objects import GroupInfo, GroupMemberInfo, GroupHonorInfo
|
from models.objects import GroupInfo, GroupMemberInfo, GroupHonorInfo
|
||||||
|
from core.logger import logger
|
||||||
|
|
||||||
|
|
||||||
class GroupAPI(BaseAPI):
|
class GroupAPI(BaseAPI):
|
||||||
@@ -194,6 +195,22 @@ class GroupAPI(BaseAPI):
|
|||||||
List[GroupInfo]: 包含所有群组信息的 `GroupInfo` 对象列表。
|
List[GroupInfo]: 包含所有群组信息的 `GroupInfo` 对象列表。
|
||||||
"""
|
"""
|
||||||
res = await self.call_api("get_group_list")
|
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]
|
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:
|
async def get_group_member_info(self, group_id: int, user_id: int, no_cache: bool = False) -> GroupMemberInfo:
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ async def broadcast_message(event: MessageEvent):
|
|||||||
:param event: 消息事件对象。
|
:param event: 消息事件对象。
|
||||||
"""
|
"""
|
||||||
# 1. 检查是否为私聊消息
|
# 1. 检查是否为私聊消息
|
||||||
if event.group_id:
|
# 使用 hasattr 安全地检查 group_id 属性,避免 AttributeError
|
||||||
|
if hasattr(event, 'group_id') and event.group_id:
|
||||||
# 在群聊中调用时,静默处理,不予响应
|
# 在群聊中调用时,静默处理,不予响应
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -41,7 +42,19 @@ async def broadcast_message(event: MessageEvent):
|
|||||||
await event.reply(f"获取群聊列表时发生错误,无法广播。错误信息: {e}")
|
await event.reply(f"获取群聊列表时发生错误,无法广播。错误信息: {e}")
|
||||||
return
|
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
|
success_count = 0
|
||||||
failed_count = 0
|
failed_count = 0
|
||||||
total_groups = len(group_list)
|
total_groups = len(group_list)
|
||||||
@@ -49,23 +62,23 @@ async def broadcast_message(event: MessageEvent):
|
|||||||
await event.reply(f"准备向 {total_groups} 个群聊广播消息,请稍候...")
|
await event.reply(f"准备向 {total_groups} 个群聊广播消息,请稍候...")
|
||||||
|
|
||||||
for group in group_list:
|
for group in group_list:
|
||||||
group_id = group.get("group_id")
|
group_id = group.group_id
|
||||||
if not group_id:
|
if not group_id:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 直接转发被回复的消息
|
# 发送消息到群聊
|
||||||
await bot.forward_message(
|
await bot.send_group_msg(
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
message_id=reply.message_id
|
message=message_content
|
||||||
)
|
)
|
||||||
success_count += 1
|
success_count += 1
|
||||||
logger.info(f"[Broadcast] 已成功将消息转发至群聊: {group_id}")
|
logger.info(f"[Broadcast] 已成功将消息发送至群聊: {group_id}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
failed_count += 1
|
failed_count += 1
|
||||||
logger.error(f"[Broadcast] 转发消息至群聊 {group_id} 失败: {e}")
|
logger.error(f"[Broadcast] 发送消息至群聊 {group_id} 失败: {e}")
|
||||||
|
|
||||||
# 5. 向管理员报告结果
|
# 6. 向管理员报告结果
|
||||||
report_message = (
|
report_message = (
|
||||||
f"广播任务完成。\n"
|
f"广播任务完成。\n"
|
||||||
f"总群聊数: {total_groups}\n"
|
f"总群聊数: {total_groups}\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user