feat: 撤回的消息不再进行回复

This commit is contained in:
HYY1116
2025-03-14 00:44:10 +08:00
parent 44a9eb53cf
commit 54e82d1e3c

View File

@@ -24,6 +24,14 @@ class Message_Sender:
def set_bot(self, bot: Bot):
"""设置当前bot实例"""
self._current_bot = bot
def get_recalled_messages(self, stream_id: str) -> list:
"""获取所有撤回的消息"""
recalled_messages = []
recalled_messages = list(db.recalled_messages.find({"stream_id": stream_id}, {"message_id": 1}))
# 按thinking_start_time排序时间早的在前面
return recalled_messages
async def send_message(
self,
@@ -32,33 +40,41 @@ class Message_Sender:
"""发送消息"""
if isinstance(message, MessageSending):
message_json = message.to_dict()
message_send = MessageSendCQ(data=message_json)
# logger.debug(message_send.message_info,message_send.raw_message)
message_preview = truncate_message(message.processed_plain_text)
if message_send.message_info.group_info and message_send.message_info.group_info.group_id:
try:
await self._current_bot.send_group_msg(
group_id=message.message_info.group_info.group_id,
message=message_send.raw_message,
auto_escape=False,
)
logger.success(f"[调试] 发送消息“{message_preview}”成功")
except Exception as e:
logger.error(f"[调试] 发生错误 {e}")
logger.error(f"[调试] 发送消息“{message_preview}”失败")
else:
try:
logger.debug(message.message_info.user_info)
await self._current_bot.send_private_msg(
user_id=message.sender_info.user_id,
message=message_send.raw_message,
auto_escape=False,
)
logger.success(f"[调试] 发送消息“{message_preview}”成功")
except Exception as e:
logger.error(f"[调试] 发生错误 {e}")
logger.error(f"[调试] 发送消息“{message_preview}”失败")
recalled_messages = self.get_recalled_messages(message.chat_stream.stream_id)
is_recalled = False
for recalled_message in recalled_messages:
if message.reply_to_message_id == recalled_message["message_id"]:
is_recalled = True
logger.warning(f"消息“{message.processed_plain_text}”已被撤回,不发送")
break
if not is_recalled:
message_json = message.to_dict()
message_send = MessageSendCQ(data=message_json)
# logger.debug(message_send.message_info,message_send.raw_message)
message_preview = truncate_message(message.processed_plain_text)
if message_send.message_info.group_info and message_send.message_info.group_info.group_id:
try:
await self._current_bot.send_group_msg(
group_id=message.message_info.group_info.group_id,
message=message_send.raw_message,
auto_escape=False,
)
logger.success(f"[调试] 发送消息“{message_preview}”成功")
except Exception as e:
logger.error(f"[调试] 发生错误 {e}")
logger.error(f"[调试] 发送消息“{message_preview}”失败")
else:
try:
logger.debug(message.message_info.user_info)
await self._current_bot.send_private_msg(
user_id=message.sender_info.user_id,
message=message_send.raw_message,
auto_escape=False,
)
logger.success(f"[调试] 发送消息“{message_preview}”成功")
except Exception as e:
logger.error(f"[调试] 发生错误 {e}")
logger.error(f"[调试] 发送消息“{message_preview}”失败")
class MessageContainer:
@@ -71,23 +87,6 @@ class MessageContainer:
self.last_send_time = 0
self.thinking_timeout = 20 # 思考超时时间(秒)
def get_recalled_messages(self) -> List[MessageSending]:
"""获取所有撤回的Message_Sending对象"""
recalled_messages = []
for msg in self.messages:
if isinstance(msg, MessageSending):
# 检查是否撤回对应stream_id和message_id
if (
db.recalled_messages.find({"stream_id": msg.chat_stream.stream_id}, {"message_id": msg.message_info.message_id})
is not None
):
recalled_messages.append(msg)
# 按thinking_start_time排序时间早的在前面
recalled_messages.sort(key=lambda x: x.thinking_start_time)
return recalled_messages
def get_timeout_messages(self) -> List[MessageSending]:
"""获取所有超时的Message_Sending对象思考时间超过30秒按thinking_start_time排序"""
current_time = time.time()
@@ -186,13 +185,6 @@ class MessageManager:
logger.warning(f"消息思考超时({thinking_time}秒),移除该消息")
container.remove_message(message_earliest)
# 检查消息是否被撤回
recalled_messages = container.get_recalled_messages()
for msg in recalled_messages:
if message_earliest.message_info.message_id == msg.message_info.message_id:
logger.warning(f"消息已被撤回,移除该消息: {message_earliest.message_info.message_id}")
container.remove_message(message_earliest)
else:
if (
message_earliest.is_head