import { getChatId, getIsEventMsg, getMsgType } from "../../utils/msgTools"; import { sendMsg } from "../../utils/sendMsg"; /** * 获取文本内容并剔除艾特信息 * @param {LarkMessageEvent} body * @returns {string} 文本内容 */ export const getMsgText = (body: LarkMessageEvent) => { // TODO: 如果之后想支持单独提醒,这里需要做模板解析 try { const { text }: { text: string } = JSON.parse( body?.event?.message?.content ); // 去掉@_user_1相关的内容,例如 '@_user_1 测试' -> '测试' const textWithoutAt = text.replace(/@_user_\d+/g, ""); // 去除空格和换行 const textWithoutSpace = textWithoutAt.replace(/[\s\n]/g, ""); return textWithoutSpace; } catch (e) { return ""; } }; /** * 过滤出非法消息,如果发表情包就直接发回去 * @param {LarkMessageEvent} body * @returns {boolean} 是否为非法消息 */ const filterIllegalMsg = (body: LarkMessageEvent) => { const chatId = getChatId(body); if (!chatId) return true; // 获取msgType const msgType = getMsgType(body); // 发表情包就直接发回去 if (msgType === "sticker") { const content = body?.event?.message?.content; sendMsg("chat_id", chatId, "sticker", content); return true; } // 剩下的非文字消息暂时不处理 if (msgType !== "text") { const textList = [ "仅支持普通文本内容[黑脸]", "唔...我只能处理普通文本哦[泣不成声]", "噢!这似乎是个非普通文本[看]", "哇!这是什么东东?我只懂普通文本啦![可爱]", "只能处理普通文本内容哦[捂脸]", ]; const content = JSON.stringify({ text: textList[Math.floor(Math.random() * textList.length)], }); sendMsg("chat_id", chatId, "text", content); return true; } // 还得过滤下艾特全体成员的消息 if (getMsgText(body).includes("@_all")) { return true; } return false; }; /** * 回复普通消息 * @param {LarkMessageEvent} body */ const replyNomalMsg = async (body: LarkMessageEvent) => { const chatId = getChatId(body); const content = JSON.stringify({ type: "template", data: { config: { enable_forward: false, update_multi: true, }, template_id: "ctp_AAyVx5R39xU9", }, }); await sendMsg("chat_id", chatId, "interactive", content); }; /** * 处理Event消息 * @param {LarkUserAction} body */ export const manageEventMsg = (body: LarkMessageEvent) => { // 过滤非Event消息 if (!getIsEventMsg(body)) { return false; } // 过滤非法消息 if (filterIllegalMsg(body)) { return true; } // 临时返回消息 replyNomalMsg(body); return true; };