| 6086 | 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 | 6097 | if (!chat.length) { |
| 6091 | 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 | 6137 | function saveImageToMessage(img, mes) { |