(payload)
| 5660 | } |
| 5661 | |
| 5662 | function normalizeOneBotEvent(payload) { |
| 5663 | const segments = Array.isArray(payload.message) ? payload.message : []; |
| 5664 | const hasAudioSegment = segments.some((segment) => ["record", "voice", "audio"].includes(String(segment?.type || "").toLowerCase())); |
| 5665 | const textFromSegments = segments |
| 5666 | .filter((segment) => segment?.type === "text") |
| 5667 | .map((segment) => segment.data?.text ?? "") |
| 5668 | .join("") |
| 5669 | .trim(); |
| 5670 | const hasAtSegment = segments.some((segment) => segment?.type === "at"); |
| 5671 | const hasSelfAtSegment = segments.some((segment) => isSelfAtSegment(segment, payload.self_id)); |
| 5672 | const atTargets = segments |
| 5673 | .filter((segment) => segment?.type === "at") |
| 5674 | .map((segment) => segment.data?.qq ?? segment.data?.id ?? segment.data?.uin) |
| 5675 | .filter((target) => target != null) |
| 5676 | .map(String); |
| 5677 | const replySegment = segments.find((segment) => segment?.type === "reply"); |
| 5678 | const replyMessageId = replySegment?.data?.id || replySegment?.data?.message_id; |
| 5679 | const messageType = payload.message_type === "private" ? "private_message" : "group_message"; |
| 5680 | const images = extractOneBotImageInputs(payload); |
| 5681 | |
| 5682 | return { |
| 5683 | type: payload.message_type === "group" && hasSelfAtSegment ? "group_at" : messageType, |
| 5684 | selfId: payload.self_id == null ? undefined : String(payload.self_id), |
| 5685 | groupId: payload.group_id == null ? undefined : String(payload.group_id), |
| 5686 | senderId: payload.user_id == null ? undefined : String(payload.user_id), |
| 5687 | senderName: payload.sender?.card || payload.sender?.nickname || String(payload.user_id || "群友"), |
| 5688 | text: payload.raw_message || textFromSegments, |
| 5689 | images, |
| 5690 | hasAudioSegment, |
| 5691 | hasAtSegment, |
| 5692 | hasSelfAtSegment, |
| 5693 | atTargets, |
| 5694 | hasReplySegment: Boolean(replySegment), |
| 5695 | replyMessageId: replyMessageId == null ? undefined : String(replyMessageId), |
| 5696 | isReplyToSelf: false, |
| 5697 | raw: payload |
| 5698 | }; |
| 5699 | } |
| 5700 | |
| 5701 | function isSelfAtSegment(segment, selfId) { |
| 5702 | if (segment?.type !== "at" || selfId == null) return false; |
no test coverage detected