From 1fa1293d1a3c8f43a758a30bd25bed369e77cdee Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 4 Apr 2023 17:40:07 +0800 Subject: [PATCH] feat: add plain text with send text message --- client/shared/model/message.ts | 5 +++++ client/shared/redux/hooks/useConverseMessage.ts | 1 - client/web/src/components/ChatBox/index.tsx | 5 ++++- client/web/src/components/ChatBox/preprocessMessage.tsx | 8 ++++++-- server/packages/sdk/src/structs/events.ts | 1 + server/services/core/chat/message.service.ts | 5 ++++- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/client/shared/model/message.ts b/client/shared/model/message.ts index 55716821..13c2d562 100644 --- a/client/shared/model/message.ts +++ b/client/shared/model/message.ts @@ -38,6 +38,11 @@ export interface SendMessagePayloadMeta { } export interface SendMessagePayload extends SimpleMessagePayload { + /** + * content的plain内容 + * 用于inbox + */ + plain?: string; meta?: SendMessagePayloadMeta; } diff --git a/client/shared/redux/hooks/useConverseMessage.ts b/client/shared/redux/hooks/useConverseMessage.ts index 87cafe33..8864ed06 100644 --- a/client/shared/redux/hooks/useConverseMessage.ts +++ b/client/shared/redux/hooks/useConverseMessage.ts @@ -35,7 +35,6 @@ function useHandleSendMessage(context: ConverseContext) { */ const handleSendMessage = useCallback( async (payload: SendMessagePayload) => { - payload.content = String(payload.content).trim(); // 输入合法性检测 if (payload.content === '') { showErrorToasts(t('无法发送空消息')); diff --git a/client/web/src/components/ChatBox/index.tsx b/client/web/src/components/ChatBox/index.tsx index 67b811d1..426e7a51 100644 --- a/client/web/src/components/ChatBox/index.tsx +++ b/client/web/src/components/ChatBox/index.tsx @@ -1,3 +1,4 @@ +import { getMessageTextDecorators } from '@/plugin/common'; import React from 'react'; import { ChatBoxContextProvider, useConverseMessage } from 'tailchat-shared'; import { ErrorView } from '../ErrorView'; @@ -58,10 +59,12 @@ const ChatBoxInner: React.FC = React.memo((props) => { { + const content = preprocessMessage(msg); handleSendMessage({ converseId: props.converseId, groupId: props.groupId, - content: preprocessMessage(msg), + content, + plain: getMessageTextDecorators().serialize(content), meta, }); }} diff --git a/client/web/src/components/ChatBox/preprocessMessage.tsx b/client/web/src/components/ChatBox/preprocessMessage.tsx index 9236771c..3ed855ec 100644 --- a/client/web/src/components/ChatBox/preprocessMessage.tsx +++ b/client/web/src/components/ChatBox/preprocessMessage.tsx @@ -5,11 +5,15 @@ const emojiNameRegex = /:([a-zA-Z0-9_\-\+]+):/g; /** * 预加工待发送的消息 */ -export function preprocessMessage(message: string) { +export function preprocessMessage(message: string): string { + message = String(message).trim(); + /** * 预加工emoji */ - return message.replace(emojiNameRegex, (code) => + message = message.replace(emojiNameRegex, (code) => getMessageTextDecorators().emoji(code) ); + + return message; } diff --git a/server/packages/sdk/src/structs/events.ts b/server/packages/sdk/src/structs/events.ts index fb804965..69510af1 100644 --- a/server/packages/sdk/src/structs/events.ts +++ b/server/packages/sdk/src/structs/events.ts @@ -12,6 +12,7 @@ export interface BuiltinEventMap { converseId: string; messageId: string; content: string; + plain?: string; meta: MessageMetaStruct; } | { diff --git a/server/services/core/chat/message.service.ts b/server/services/core/chat/message.service.ts index c2d5c2cb..f319b04c 100644 --- a/server/services/core/chat/message.service.ts +++ b/server/services/core/chat/message.service.ts @@ -46,6 +46,7 @@ class MessageService extends TcService { converseId: 'string', groupId: [{ type: 'string', optional: true }], content: 'string', + plain: { type: 'string', optional: true }, meta: { type: 'any', optional: true }, }, }); @@ -164,10 +165,11 @@ class MessageService extends TcService { converseId: string; groupId?: string; content: string; + plain?: string; meta?: object; }> ) { - const { converseId, groupId, content, meta } = ctx.params; + const { converseId, groupId, content, plain, meta } = ctx.params; const userId = ctx.meta.userId; const t = ctx.meta.t; @@ -208,6 +210,7 @@ class MessageService extends TcService { converseId: String(converseId), messageId: String(message._id), content, + plain, meta: meta ?? {}, });