egg_server/routes/bot/eventMsg.ts
zhaoyingbo cabc23ae77
Some checks are pending
Egg CI/CD / build-image (push) Waiting to run
Egg CI/CD / deploy (push) Blocked by required conditions
feat: 支持根据用户组转发消息
2024-03-04 12:01:14 +00:00

108 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { sendMsg } from "../../utils/sendMsg";
/**
* 是否为事件消息
* @param {LarkMessageEvent} body
*/
const isEventMsg = (body: LarkMessageEvent) => {
return body?.header?.event_type === "im.message.receive_v1";
}
/**
* 获取事件文本类型
* @param {LarkMessageEvent} body
* @returns
*/
const getMsgType = (body: LarkMessageEvent) => {
return body?.event?.message?.message_type
}
/**
* 获取对话流Id
* @param {LarkMessageEvent} body
* @returns
*/
const getChatId = (body: LarkMessageEvent) => {
return body?.event?.message?.chat_id
}
/**
* 获取文本内容并剔除艾特信息
* @param {LarkMessageEvent} body
* @returns {string} 文本内容
*/
const getMsgText = (body: LarkMessageEvent) => {
// TODO: 如果之后想支持单独提醒,这里需要做模板解析
try {
const { text } = 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
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
}
return false
}
/**
* 过滤出info指令
* @param {LarkMessageEvent} body
* @returns {boolean} 是否为info指令
*/
const filterGetInfoCommand = (body: LarkMessageEvent) => {
const chatId = getChatId(body)
const text = getMsgText(body)
if (text !== 'info') return false
const content = JSON.stringify({ text: JSON.stringify(body)})
sendMsg('chat_id', chatId, 'text', content)
return true
}
export const manageEventMsg = async (body: LarkMessageEvent) => {
// 过滤非Event消息
if (!isEventMsg(body)) {
return false;
}
// 过滤非法消息
if (filterIllegalMsg(body)) {
return true
}
// 过滤info指令
if (filterGetInfoCommand(body)) {
return true
}
}