feat: 撤回的消息不再进行回复
This commit is contained in:
@@ -25,6 +25,14 @@ class Message_Sender:
|
|||||||
"""设置当前bot实例"""
|
"""设置当前bot实例"""
|
||||||
self._current_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(
|
async def send_message(
|
||||||
self,
|
self,
|
||||||
message: MessageSending,
|
message: MessageSending,
|
||||||
@@ -32,6 +40,14 @@ class Message_Sender:
|
|||||||
"""发送消息"""
|
"""发送消息"""
|
||||||
|
|
||||||
if isinstance(message, MessageSending):
|
if isinstance(message, MessageSending):
|
||||||
|
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_json = message.to_dict()
|
||||||
message_send = MessageSendCQ(data=message_json)
|
message_send = MessageSendCQ(data=message_json)
|
||||||
# logger.debug(message_send.message_info,message_send.raw_message)
|
# logger.debug(message_send.message_info,message_send.raw_message)
|
||||||
@@ -71,23 +87,6 @@ class MessageContainer:
|
|||||||
self.last_send_time = 0
|
self.last_send_time = 0
|
||||||
self.thinking_timeout = 20 # 思考超时时间(秒)
|
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]:
|
def get_timeout_messages(self) -> List[MessageSending]:
|
||||||
"""获取所有超时的Message_Sending对象(思考时间超过30秒),按thinking_start_time排序"""
|
"""获取所有超时的Message_Sending对象(思考时间超过30秒),按thinking_start_time排序"""
|
||||||
current_time = time.time()
|
current_time = time.time()
|
||||||
@@ -186,13 +185,6 @@ class MessageManager:
|
|||||||
logger.warning(f"消息思考超时({thinking_time}秒),移除该消息")
|
logger.warning(f"消息思考超时({thinking_time}秒),移除该消息")
|
||||||
container.remove_message(message_earliest)
|
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:
|
else:
|
||||||
if (
|
if (
|
||||||
message_earliest.is_head
|
message_earliest.is_head
|
||||||
|
|||||||
Reference in New Issue
Block a user