diff --git a/pkg/platform/adapter.py b/pkg/platform/adapter.py index 3412be3c..e064ef80 100644 --- a/pkg/platform/adapter.py +++ b/pkg/platform/adapter.py @@ -64,7 +64,7 @@ class MessagePlatformAdapter(metaclass=abc.ABCMeta): async def reply_message_chunk( self, message_source: platform_events.MessageEvent, - message_id: int, + bot_message: dict, message: platform_message.MessageChain, quote_origin: bool = False, is_final: bool = False, diff --git a/pkg/platform/sources/dingtalk.py b/pkg/platform/sources/dingtalk.py index cfd9a0ca..f991f71c 100644 --- a/pkg/platform/sources/dingtalk.py +++ b/pkg/platform/sources/dingtalk.py @@ -147,7 +147,7 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter): async def reply_message_chunk( self, message_source: platform_events.MessageEvent, - message_id: int, + bot_message, message: platform_message.MessageChain, quote_origin: bool = False, is_final: bool = False, @@ -158,17 +158,19 @@ class DingTalkAdapter(adapter.MessagePlatformAdapter): # incoming_message = event.incoming_message # msg_id = incoming_message.message_id + message_id = bot_message.resp_message_id + self.seq += 1 + if (self.seq - 1) % 8 == 0 or is_final: - self.seq += 1 content, at = await DingTalkMessageConverter.yiri2target(message) card_instance, card_instance_id = self.card_instance_id_dict[message_id] # print(card_instance_id) await self.bot.send_card_message(card_instance, card_instance_id, content, is_final) - if is_final: + if is_final and bot_message.tool_calls is None: self.seq = 1 # 消息回复结束之后重置seq - # self.card_instance_id_dict.pop(message_id) # 消息回复结束之后删除卡片实例id + self.card_instance_id_dict.pop(message_id) # 消息回复结束之后删除卡片实例id async def send_message(self, target_type: str, target_id: str, message: platform_message.MessageChain): content = await DingTalkMessageConverter.yiri2target(message) diff --git a/pkg/platform/sources/lark.py b/pkg/platform/sources/lark.py index d170d388..dd4b45fe 100644 --- a/pkg/platform/sources/lark.py +++ b/pkg/platform/sources/lark.py @@ -535,7 +535,7 @@ class LarkAdapter(adapter.MessagePlatformAdapter): async def reply_message_chunk( self, message_source: platform_events.MessageEvent, - message_id: str, + bot_message, message: platform_message.MessageChain, quote_origin: bool = False, is_final: bool = False, @@ -543,10 +543,10 @@ class LarkAdapter(adapter.MessagePlatformAdapter): """ 回复消息变成更新卡片消息 """ + self.seq += 1 + message_id = bot_message.resp_message_id + if self.seq % 8 == 0 or is_final: - - if (self.seq - 1) % 8 == 0 or is_final: - self.seq += 1 lark_message = await self.message_converter.yiri2target(message, self.api_client) @@ -576,9 +576,9 @@ class LarkAdapter(adapter.MessagePlatformAdapter): .build() ) - if is_final: + if is_final and bot_message.tool_calls is None: self.seq = 1 # 消息回复结束之后重置seq - # self.card_id_dict.pop(message_id) # 清理已经使用过的卡片 + self.card_id_dict.pop(message_id) # 清理已经使用过的卡片 # 发起请求 response: ContentCardElementResponse = self.api_client.cardkit.v1.card_element.content(request) diff --git a/pkg/platform/sources/telegram.py b/pkg/platform/sources/telegram.py index 3c81fd6b..f113ec26 100644 --- a/pkg/platform/sources/telegram.py +++ b/pkg/platform/sources/telegram.py @@ -211,7 +211,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter): async def reply_message_chunk( self, message_source: platform_events.MessageEvent, - message_id: int, + bot_message, message: platform_message.MessageChain, quote_origin: bool = False, is_final: bool = False, @@ -263,7 +263,7 @@ class TelegramAdapter(adapter.MessagePlatformAdapter): args['parse_mode'] = 'MarkdownV2' await self.bot.edit_message_text(**args) - if is_final: + if is_final and bot_message.tool_calls is None: self.seq = 1 # 消息回复结束之后重置seq self.msg_stream_id.pop(message_id) # 消息回复结束之后删除流式消息id diff --git a/pkg/platform/sources/webchat.py b/pkg/platform/sources/webchat.py index fce28bc2..52fc9294 100644 --- a/pkg/platform/sources/webchat.py +++ b/pkg/platform/sources/webchat.py @@ -118,7 +118,7 @@ class WebChatAdapter(msadapter.MessagePlatformAdapter): async def reply_message_chunk( self, message_source: platform_events.MessageEvent, - message_id: int, + bot_message, message: platform_message.MessageChain, quote_origin: bool = False, is_final: bool = False, @@ -146,7 +146,7 @@ class WebChatAdapter(msadapter.MessagePlatformAdapter): # queue = self.webchat_person_session.resp_queues[message_source.message_chain.message_id] # elif isinstance(message_source, platform_events.GroupMessage): # queue = self.webchat_group_session.resp_queues[message_source.message_chain.message_id] - if is_final: + if is_final and bot_message.tool_calls is None: message_data.is_final = True # print(message_data) await queue.put(message_data)