// Original methods derived from https://github.com/KudoAI/chatgpt.js/blob/7eb8463cd61143fa9e1d5a8ec3c14d3c1b286e54/chatgpt.js // Using a full string to inject it in the chatgpt page to avoid any security error export const mzta_script = ` async function chatgpt_sendMsg(msg, method ='') { const textArea = document.querySelector('form textarea'), sendButton = document.querySelector('form button[class*="bottom"]'); textArea.value = msg; textArea.dispatchEvent(new Event('input', { bubbles: true })); // enable send button const delaySend = setInterval(() => { if (!sendButton?.hasAttribute('disabled')) { // send msg method.toLowerCase() == 'click' ? sendButton.click() : textArea.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13, bubbles: true })); clearInterval(delaySend); } }, 25); } async function chatgpt_isIdle() { return new Promise(resolve => { const intervalId = setInterval(() => { if (chatgpt_getRegenerateButton()) { clearInterval(intervalId); resolve(true); }}, 100);});} function chatgpt_getRegenerateButton() { for (const mainSVG of document.querySelectorAll('main svg')) { if (mainSVG.querySelector('path[d*="M4.5 2.5C5.05228"]')) // regen icon found return mainSVG.parentNode.parentNode; } } async function chatgpt_getFromDOM(pos) { const responseDivs = document.querySelectorAll('div[data-testid*="conversation-turn"]:nth-child(odd)'), strPos = pos.toString().toLowerCase(); let response = ''; if (responseDivs.length) { if (/last|final/.test(strPos)){ // get last response responseDivs[responseDivs.length - 1].innerHTML = responseDivs[responseDivs.length - 1].innerHTML.replace(/<\\/p>/g, '

\\n\\n').replace(//g, '
\\n'); response = responseDivs[responseDivs.length - 1].textContent; //console.log('chatgpt_getFromDOM: [HTML] ' + responseDivs[responseDivs.length - 1].innerHTML.replace(/]*>/gi, '').replace(/<\\/div>/gi, '').replace(/]*>/gi, '').replace(/<\\/svg>/gi, '').replace(/]*>/gi, '').replace(/<\\/path>/gi, '').replace(/]*>/gi, '').replace(/<\\/text>/gi, '').replace(/]*>/gi, '').replace(/<\\/span>/gi, '').replace(/]*>/gi, '').replace(/<\\/button>/gi, '')); } else { // get nth response const nthOfResponse = ( // Calculate base number Number.isInteger(pos) ? pos : // do nothing for integers /^\d+/.test(strPos) ? /^\d+/.exec(strPos)[0] : // extract first digits for strings w/ them ( // convert words to integers for digitless strings /^(?:1|one|fir)(?:st)?$/.test(strPos) ? 1 : /^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(strPos) ? 2 : /^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(strPos) ? 3 : /^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 4 : /^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 5 : /^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 6 : /^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 7 : /^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 8 : /^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 9 : /^(?:10|ten)(?:th)?$/.test(strPos) ? 10 : 1 ) // Transform base number if suffixed * ( /(ty|ieth)$/.test(strPos) ? 10 : 1 ) // x 10 if -ty/ieth + ( /teen(th)?$/.test(strPos) ? 10 : 0 ) // + 10 if -teen/teenth ); response = responseDivs[nthOfResponse - 1].textContent; } response = response.replace(/^ChatGPTChatGPT/, ''); // strip sender name //console.log('chatgpt_getFromDOM: ' + response); } return response; } function chatpgt_scrollToBottom () { try { document.querySelector('button[class*="cursor"][class*="bottom"]').click(); } catch (err) { console.error('', err); } } function addCustomDiv(prompt_action,tabId) { // Create