| 6086 | return { type, getMessage }; | 6086 | return { type, getMessage }; |
| 6087 | } | 6087 | } |
| 6088 | | 6088 | |
| 6089 | export function syncCurrentSwipeInfoExtras() { | 6089 | /** |
| | 6090 | * Syncs the current message and all its data into the swipe data at the given message ID (or the last message if no ID is given). |
| | 6091 | * |
| | 6092 | * If the swipe data is invalid in some way, this function will exit out without doing anything. |
| | 6093 | * @param {number?} [messageId=null] - The ID of the message to sync with the swipe data. If no ID is given, the last message is used. |
| | 6094 | * @returns {boolean} Whether the message was successfully synced |
| | 6095 | */ |
| | 6096 | export function syncMesToSwipe(messageId = null) { |
| 6090 | if (!chat.length) { | 6097 | if (!chat.length) { |
| 6091 | return; | 6098 | return false; |
| 6092 | } | 6099 | } |
| 6093 | const currentMessage = chat[chat.length - 1]; | 6100 | |
| 6094 | if (currentMessage && Array.isArray(currentMessage.swipe_info) && typeof currentMessage.swipe_id === 'number') { | 6101 | const targetMessageId = messageId ?? chat.length - 1; |
| 6095 | const swipeInfo = currentMessage.swipe_info[currentMessage.swipe_id]; | 6102 | if (chat.length > targetMessageId) { |
| 6096 | if (swipeInfo && typeof swipeInfo === 'object') { | 6103 | console.warn(`[syncMesToSwipe] Invalid message ID: ${messageId}`); |
| 6097 | swipeInfo.extra = structuredClone(currentMessage.extra); | 6104 | return false; |
| 6098 | } | 6105 | } |
| | 6106 | |
| | 6107 | const targetMessage = chat[targetMessageId]; |
| | 6108 | |
| | 6109 | // No swipe data there yet, exit out |
| | 6110 | if (typeof targetMessage.swipe_id !== 'number') { |
| | 6111 | return false; |
| 6099 | } | 6112 | } |
| | 6113 | // If swipes structure is invalid, exit out (for now?) |
| | 6114 | if (!Array.isArray(targetMessage.swipe_info) || !Array.isArray(targetMessage.swipes)) { |
| | 6115 | return false; |
| | 6116 | } |
| | 6117 | // If the swipe is not present yet, exit out (will likely be copied later) |
| | 6118 | if (!targetMessage.swipes[targetMessage.swipe_id] || !targetMessage.swipe_info[targetMessage.swipe_id]) { |
| | 6119 | return false; |
| | 6120 | } |
| | 6121 | |
| | 6122 | const targetSwipeInfo = targetMessage.swipe_info[targetMessage.swipe_id]; |
| | 6123 | if (typeof targetSwipeInfo !== 'object') { |
| | 6124 | return false; |
| | 6125 | } |
| | 6126 | |
| | 6127 | targetMessage.swipes[targetMessage.swipe_id] = targetMessage.mes; |
| | 6128 | |
| | 6129 | targetSwipeInfo.send_date = targetMessage.send_date; |
| | 6130 | targetSwipeInfo.gen_started = targetMessage.gen_started; |
| | 6131 | targetSwipeInfo.gen_finished = targetMessage.gen_finished; |
| | 6132 | targetSwipeInfo.extra = structuredClone(targetMessage.extra); |
| | 6133 | |
| | 6134 | return true; |
| 6100 | } | 6135 | } |
| 6101 | | 6136 | |
| 6102 | function saveImageToMessage(img, mes) { | 6137 | function saveImageToMessage(img, mes) { |