// ==UserScript== // @name OMG樂 set 開單 (URL 參數版) // @namespace http://tampermonkey.net/ // @version 4.2 // @description 改用 URL 參數傳遞資料,穩定可靠 // @author You // @match https://chat.line.biz/U0464a5acec0be5006855b67b673ad26b* // @icon https://www.google.com/s2/favicons?sz=64&domain=line.biz // @grant unsafeWindow // ==/UserScript== (function() { 'use strict'; // 設定樣式 const style = document.createElement('style'); style.innerHTML = '.text-break-all.user-select-text { cursor: pointer; border-bottom: 1px dashed #ccc; }'; document.head.appendChild(style); // 監聽點擊複製事件 document.addEventListener('click', async ({ target: t }) => { if (t.classList?.contains('text-break-all') && t.classList?.contains('user-select-text')) { const original = t.innerText; await navigator.clipboard.writeText(original); t.innerText = '✅ 已複製!'; t.style.color = '#28a745'; setTimeout(() => { t.innerText = original; t.style.color = ''; }, 100); } }); /** * 核心邏輯:提取數量 */ function extractQuantity(message) { const msg = message.replace(/\s+/g, ''); // 移除空白便於分析 // --- 階段 1: 優先處理固定模式 (3+1, 5+1 等加贈模式) --- const priorityPatterns = { '3+1': '3000', '5+1': '5000', '7+1': '7000', '9+1': '9000', '4+1': '4000' }; for (const pattern in priorityPatterns) { if (msg.includes(pattern)) { return priorityPatterns[pattern]; } } // --- 階段 2: 處理帶有 "萬" 單位的模式 --- if (msg.includes('萬')) { const chineseNumMap = { '一': 1, '二': 2, '兩': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10 }; // 阿拉伯數字 + 萬 (例如 1萬) const regexMatch = msg.match(/(\d+)\s*萬/); if (regexMatch && regexMatch[1]) { return (parseInt(regexMatch[1], 10) * 10000).toString(); } // 中文數字 + 萬 (例如 三萬) for (const char in chineseNumMap) { if (msg.includes(char + '萬')) { return (chineseNumMap[char] * 10000).toString(); } } } // --- 階段 3: 處理獨立的中文字眼 (視為千單位) --- const chineseNumPatterns = { '一': '1000', '二': '2000', '兩': '2000', '三': '3000', '四': '4000', '五': '5000', '六': '6000', '七': '7000', '八': '8000', '九': '9000' }; for (const pattern in chineseNumPatterns) { if (msg.includes(pattern)) { return chineseNumPatterns[pattern]; } } // --- 階段 4: 純數字規則 --- const digitsOnly = msg.replace(/[^\d]/g, ''); if (digitsOnly) { const parsedNum = parseInt(digitsOnly, 10); // 規則 A: 10-800 之間的數字,視為 10000 if (parsedNum >= 10 && parsedNum <= 800) { return '10000'; } // 規則 B: 如果只有 1 位數,補三個 0 (例如 "1" -> "1000") if (digitsOnly.length === 1) { return digitsOnly + '000'; } // 規則 C: 其他直接使用 return digitsOnly; } return ''; } /** * 按鍵觸發的主要函數 */ function keyFunction(event) { if (event.key === 'F2' || event.keyCode === 113) { // 抓取 itemId (保持你的 mb-0 text-truncate 邏輯) const elements = document.getElementsByClassName('mb-0 text-truncate'); const idElement = elements[elements.length - 1]; if (!idElement) { console.error("錯誤:找不到包含商品 ID 的元素。"); return; } let itemId = ''; const itemIdStart = idElement.innerText.indexOf('/ss'); if (itemIdStart !== -1) { itemId = idElement.innerText.substring(itemIdStart + 1).trim(); } // 抓取最後一條對話 const chatItems = document.getElementsByClassName('chat-item-text user-select-text'); let quantity = ''; if (chatItems.length > 0) { const lastMessage = chatItems[chatItems.length - 1].innerText; quantity = extractQuantity(lastMessage); console.log(`分析: "${lastMessage}" -> 提取數量: ${quantity}`); } // 跳轉 if (itemId && quantity) { const targetUrl = `https://trade.omg.com.tw/Product/SellAdd?itemId=${encodeURIComponent(itemId)}&quantity=${encodeURIComponent(quantity)}`; window.open(targetUrl, '_blank', `height=500,width=360`); const checkboxElement = document.querySelector('.CM-checkbox'); if (checkboxElement) { checkboxElement.innerText = `ID:${itemId} QTY:${quantity}`; } } else { console.warn("⚠️ 資訊抓取不完全:", {itemId, quantity}); } } } document.addEventListener('keydown', keyFunction); })();