@@ -265,7 +265,22 @@ class ChatMessageBloc extends BlocExt<ChatMessageEvent, ChatMessageState> {
265265 await chatMsgRepo.fixMessageStatus (roomId);
266266
267267 // 记录当前消息
268- final sentMessageId = await chatMsgRepo.sendMessage (roomId, message);
268+ var sentMessageId = 0 ;
269+ if (event.isResent &&
270+ event.index == 0 &&
271+ last != null &&
272+ last.type == MessageType .text) {
273+ // 如果当前是消息重发,同时重发的是最后一条消息,则不会重新生成该消息,直接生成答案即可
274+ sentMessageId = last.id! ;
275+ if (last.statusIsFailed ()) {
276+ // 如果最后一条消息发送失败,则重新发送
277+ await chatMsgRepo.updateMessagePart (roomId, last.id! , [
278+ MessagePart ('status' , 0 ),
279+ ]);
280+ }
281+ } else {
282+ sentMessageId = await chatMsgRepo.sendMessage (roomId, message);
283+ }
269284
270285 // 更新 Room 最后活跃时间
271286 // 这里没有使用 await,因为不需要等待更新完成,让 room 的更新异步的去处理吧
@@ -312,6 +327,15 @@ class ChatMessageBloc extends BlocExt<ChatMessageEvent, ChatMessageState> {
312327 if (systemCmds.isNotEmpty) {
313328 for (var element in systemCmds) {
314329 try {
330+ // SYSTEM 命令
331+ // - type: 命令类型
332+ //
333+ // type=summary (默认值)
334+ // - question_id: 问题 ID
335+ // - answer_id: 答案 ID
336+ // - quota_consumed: 消耗的配额
337+ // - token: 消耗的 token
338+ // - info: 提示信息
315339 final cmd = jsonDecode (element.content);
316340
317341 message.serverId = cmd['question_id' ];
@@ -320,6 +344,11 @@ class ChatMessageBloc extends BlocExt<ChatMessageEvent, ChatMessageState> {
320344 final quotaConsumed = cmd['quota_consumed' ] ?? 0 ;
321345 final tokenConsumed = cmd['token' ] ?? 0 ;
322346
347+ final info = cmd['info' ] ?? '' ;
348+ if (info != '' ) {
349+ waitMessage.setExtra ({'info' : info});
350+ }
351+
323352 if (quotaConsumed == 0 && tokenConsumed == 0 ) {
324353 continue ;
325354 }
0 commit comments