您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Events Feature for Shapes
// ==UserScript== // @name Discord/Shapes - Events // @namespace http://tampermonkey.net/ // @version 0.4 // @description Events Feature for Shapes // @author Vishanka // @match https://discord.com/channels/* // @grant unsafeWindow // ==/UserScript== (function() { 'use strict'; // Wait for storagePanel to be available function waitForStoragePanel() { if (typeof unsafeWindow.DCstoragePanel !== 'undefined') { initializeButton(); } else { setTimeout(waitForStoragePanel, 500); } } waitForStoragePanel(); function initializeButton() { // Create button to open profile management panel const button = document.createElement('button'); button.innerText = 'Manage Events'; button.style.margin = '10px'; button.onclick = openProfilePanel; // Append the button to storagePanel unsafeWindow.DCstoragePanel.appendChild(button); } function openProfilePanel() { // Create profile management panel const profilePanel = document.createElement('div'); profilePanel.style.position = 'fixed'; profilePanel.style.top = '50%'; profilePanel.style.left = '50%'; profilePanel.style.transform = 'translate(-50%, -50%)'; profilePanel.style.width = '800px'; profilePanel.style.height = '700px'; profilePanel.style.backgroundColor = '#2F2F2F'; profilePanel.style.color = 'white'; profilePanel.style.borderRadius = '20px'; profilePanel.style.padding = '20px'; profilePanel.style.zIndex = '1000'; profilePanel.style.display = 'flex'; profilePanel.style.flexDirection = 'row'; // Create close button for profilePanel // Create close button for profilePanel const closeButton = document.createElement('button'); closeButton.style.position = 'absolute'; closeButton.style.top = '15px'; closeButton.style.right = '15px'; closeButton.style.width = '30px'; closeButton.style.height = '30px'; closeButton.style.backgroundColor = 'transparent'; closeButton.style.color = '#ffffff'; closeButton.style.border = 'none'; closeButton.style.borderRadius = '50%'; closeButton.style.cursor = 'pointer'; closeButton.style.display = 'flex'; closeButton.style.alignItems = 'center'; closeButton.style.zIndex = '1001'; closeButton.style.justifyContent = 'center'; closeButton.style.transition = 'background-color 0.2s ease'; closeButton.style.boxSizing = 'border-box'; // Create span for the '✕' character const closeIcon = document.createElement('span'); closeIcon.innerText = '✕'; closeIcon.style.fontSize = '16px'; closeIcon.style.position = 'relative'; closeIcon.style.top = '-1px'; // Adjust this value to move the character up // Append the span to the button closeButton.appendChild(closeIcon); // Hover effect closeButton.addEventListener('mouseenter', () => { closeButton.style.backgroundColor = '#676767'; }); closeButton.addEventListener('mouseleave', () => { closeButton.style.backgroundColor = 'transparent'; }); // Close button action closeButton.onclick = function() { document.body.removeChild(profilePanel); }; // Append the button to the profile panel profilePanel.appendChild(closeButton); // Create profile list container const profileListContainer = document.createElement('div'); profileListContainer.style.flex = '0.50'; profileListContainer.style.marginRight = '20px'; profileListContainer.style.paddingRight = '20px'; profileListContainer.style.display = 'flex'; profileListContainer.style.flexDirection = 'column'; profileListContainer.style.borderRight = '1px solid #444444'; profileListContainer.style.overflowY = 'auto'; profileListContainer.style.maxHeight = '660px'; // Create header for profile list const profileListHeader = document.createElement('h4'); profileListHeader.innerText = 'Profiles'; profileListHeader.style.marginBottom = '10px'; profileListContainer.appendChild(profileListHeader); // Create profile list const profileList = document.createElement('ul'); profileList.style.overflowY = 'auto'; profileList.style.height = '600px'; profileListContainer.appendChild(profileList); // Create button to add profile const addProfileButton = document.createElement('button'); addProfileButton.innerText = 'Add Profile'; addProfileButton.style.padding = '8px'; addProfileButton.style.border = '0.2px solid #4E4E4E'; addProfileButton.style.backgroundColor = 'transparent'; addProfileButton.style.color = '#fff'; addProfileButton.style.borderRadius = '20px'; addProfileButton.style.cursor = 'pointer'; addProfileButton.onmouseover = () => { addProfileButton.style.backgroundColor = '#424242'; }; addProfileButton.onmouseout = () => { addProfileButton.style.backgroundColor = 'transparent'; }; addProfileButton.onclick = function() { openAddProfileDialog(); }; profileListContainer.appendChild(addProfileButton); // Create key-value input container const keyValueContainer = document.createElement('div'); keyValueContainer.style.flex = '2.3'; keyValueContainer.style.display = 'flex'; keyValueContainer.style.flexDirection = 'column'; keyValueContainer.style.gap = '10px'; // Create entries list const entriesList = document.createElement('div'); entriesList.style.overflowY = 'auto'; entriesList.style.height = '340px'; entriesList.style.width = '100%'; entriesList.style.paddingRight = '20px'; entriesList.style.borderCollapse = 'collapse'; entriesList.style.display = 'block'; entriesList.style.overflowY = 'auto'; // Create a header above the headerRow const manageEventsHeader = document.createElement('h2'); manageEventsHeader.innerText = 'Manage Event List'; manageEventsHeader.style.marginBottom = '-10px'; keyValueContainer.appendChild(manageEventsHeader); // Create table header const headerRow = document.createElement('tr'); const headers = ['Key', 'Value', '%', 'Time', '']; headers.forEach(headerText => { const header = document.createElement('th'); header.innerText = headerText; header.style.padding = '5px'; header.style.textAlign = 'left'; if (headerText === 'Value') { header.style.width = '60%'; } else if (headerText === 'Key') { header.style.width = '15%'; } else if (headerText === '%' || headerText === 'Time') { header.style.width = '10%'; } else if (headerText === '') { header.style.width = '5%'; } headerRow.appendChild(header); }); const headerContainer = document.createElement('div'); headerContainer.style.position = 'sticky'; headerContainer.style.top = '0'; headerContainer.style.backgroundColor = '#2F2F2F'; headerContainer.style.zIndex = '1'; headerContainer.appendChild(headerRow); entriesList.appendChild(headerContainer); entriesList.style.position = 'sticky'; entriesList.style.top = '0'; entriesList.style.backgroundColor = '#2F2F2F'; // Create a separate header for the entries list const entriesHeaderContainer = document.createElement('div'); entriesHeaderContainer.style.position = 'sticky'; entriesHeaderContainer.style.top = '0'; entriesHeaderContainer.style.backgroundColor = '#2F2F2F'; entriesHeaderContainer.style.zIndex = '1'; const entriesHeader = document.createElement('div'); entriesHeader.style.display = 'flex'; entriesHeader.style.padding = '5px 0'; entriesHeader.style.borderBottom = '1px solid #444444'; headers.forEach(headerText => { const header = document.createElement('div'); header.innerText = headerText; header.style.padding = '5px'; header.style.textAlign = 'left'; // Align headers to the left if (headerText === 'Value') { header.style.width = '57%'; } else if (headerText === 'Key') { header.style.width = '15%'; } else if (headerText === '%' || headerText === 'Time') { header.style.width = '7%'; } else if (headerText === '') { header.style.width = '5%'; } entriesHeader.appendChild(header); }); entriesHeaderContainer.appendChild(entriesHeader); keyValueContainer.appendChild(entriesHeaderContainer); keyValueContainer.appendChild(entriesList); // Create container for probability and time range inputs // Create container for probability and time range inputs const probTimeContainer = document.createElement('div'); probTimeContainer.style.display = 'flex'; probTimeContainer.style.gap = '10px'; probTimeContainer.style.marginBottom = '-4px'; // Create probability label and input const probabilityContainer = document.createElement('div'); probabilityContainer.style.display = 'flex'; probabilityContainer.style.flexDirection = 'column'; probabilityContainer.style.width = '30%'; // Adjust width to fit the row better const probabilityLabel = document.createElement('div'); probabilityLabel.innerText = 'Event Probability'; probabilityLabel.style.color = 'white'; probabilityLabel.style.marginBottom = '0px'; probabilityContainer.appendChild(probabilityLabel); const probabilityInputContainer = document.createElement('div'); probabilityInputContainer.style.display = 'flex'; probabilityInputContainer.style.alignItems = 'center'; const probabilityInput = document.createElement('input'); probabilityInput.type = 'number'; probabilityInput.placeholder = '0-100'; probabilityInput.style.backgroundColor = '#1E1E1E'; probabilityInput.style.color = 'white'; probabilityInput.style.border = '1px solid #444444'; probabilityInput.style.borderRadius = '5px'; probabilityInput.style.padding = '5px'; probabilityInput.style.width = '85%'; probabilityInput.style.marginRight = '5px'; probabilityInputContainer.appendChild(probabilityInput); const probabilityPercentLabel = document.createElement('span'); probabilityPercentLabel.innerText = '%'; probabilityPercentLabel.style.color = 'white'; probabilityInputContainer.appendChild(probabilityPercentLabel); probabilityContainer.appendChild(probabilityInputContainer); probTimeContainer.appendChild(probabilityContainer); // Create time range label and input const timeRangeContainer = document.createElement('div'); timeRangeContainer.style.display = 'flex'; timeRangeContainer.style.flexDirection = 'column'; timeRangeContainer.style.width = '30%'; // Adjust width to fit the row better const timeRangeLabel = document.createElement('div'); timeRangeLabel.innerText = 'Time Range'; timeRangeLabel.style.color = 'white'; timeRangeLabel.style.marginBottom = '0px'; timeRangeContainer.appendChild(timeRangeLabel); const timeRangeInputContainer = document.createElement('div'); timeRangeInputContainer.style.display = 'flex'; timeRangeInputContainer.style.alignItems = 'center'; const timeRangeInput = document.createElement('input'); timeRangeInput.type = 'text'; timeRangeInput.placeholder = '0-24'; timeRangeInput.value = '0-24'; // Set default value timeRangeInput.style.backgroundColor = '#1E1E1E'; timeRangeInput.style.color = 'white'; timeRangeInput.style.border = '1px solid #444444'; timeRangeInput.style.borderRadius = '5px'; timeRangeInput.style.padding = '5px'; timeRangeInput.style.width = '85%'; timeRangeInput.style.marginRight = '5px'; timeRangeInput.addEventListener('blur', () => { const timeValue = timeRangeInput.value.trim(); const timeRegex = /^([0-9]|1[0-9]|2[0-3])-(?:[0-9]|1[0-9]|2[0-3])$/; if (!timeRegex.test(timeValue)) { alert('Please enter a valid time range between 0-23, e.g., "8-16" or "0-24". Defaulting to "0-24".'); timeRangeInput.value = '0-24'; } }); timeRangeInputContainer.appendChild(timeRangeInput); const timeRangeUnitLabel = document.createElement('span'); timeRangeUnitLabel.innerText = 'h'; timeRangeUnitLabel.style.color = 'white'; timeRangeInputContainer.appendChild(timeRangeUnitLabel); timeRangeContainer.appendChild(timeRangeInputContainer); probTimeContainer.appendChild(timeRangeContainer); // Create overall probability label and input const overallProbabilityContainer = document.createElement('div'); overallProbabilityContainer.style.display = 'flex'; overallProbabilityContainer.style.flexDirection = 'column'; overallProbabilityContainer.style.width = '30%'; // Adjust width to fit the row better const overallProbabilityLabel = document.createElement('div'); overallProbabilityLabel.innerText = 'Overall Probability'; overallProbabilityLabel.style.color = 'white'; overallProbabilityLabel.style.marginBottom = '0px'; overallProbabilityContainer.appendChild(overallProbabilityLabel); const overallProbabilityInputContainer = document.createElement('div'); overallProbabilityInputContainer.style.display = 'flex'; overallProbabilityInputContainer.style.alignItems = 'center'; const overallProbabilityInput = document.createElement('input'); overallProbabilityInput.type = 'number'; overallProbabilityInput.placeholder = '0-100'; overallProbabilityInput.style.backgroundColor = '#202530'; overallProbabilityInput.style.color = 'white'; overallProbabilityInput.style.border = '1px solid #444444'; overallProbabilityInput.style.borderRadius = '5px'; overallProbabilityInput.style.padding = '5px'; overallProbabilityInput.style.marginRight = '5px'; overallProbabilityInput.style.width = '85%'; // Load the existing overall probability value if set const savedProbability = localStorage.getItem('events.probability'); if (savedProbability) { overallProbabilityInput.value = savedProbability; } // Add event listener to save the value to localStorage when changed overallProbabilityInput.addEventListener('input', () => { const probabilityValue = overallProbabilityInput.value.trim(); if (probabilityValue !== '' && probabilityValue >= 0 && probabilityValue <= 100) { localStorage.setItem('events.probability', probabilityValue); } else { alert('Please enter a valid probability between 0 and 100.'); } }); overallProbabilityInputContainer.appendChild(overallProbabilityInput); const overallProbabilityPercentLabel = document.createElement('span'); overallProbabilityPercentLabel.innerText = '%'; overallProbabilityPercentLabel.style.color = 'white'; overallProbabilityInputContainer.appendChild(overallProbabilityPercentLabel); overallProbabilityContainer.appendChild(overallProbabilityInputContainer); probTimeContainer.appendChild(overallProbabilityContainer); // Append probability and time range container to the main keyValue container keyValueContainer.appendChild(probTimeContainer); // Create input for key const keyInput = document.createElement('input'); keyInput.type = 'text'; keyInput.placeholder = 'Enter key'; keyInput.style.backgroundColor = '#1E1E1E'; keyInput.style.color = 'white'; keyInput.style.border = '1px solid #444444'; keyInput.style.borderRadius = '5px'; keyInput.style.padding = '5px'; keyInput.style.marginBottom = '-4px'; keyValueContainer.appendChild(keyInput); // Create input for value const valueInput = document.createElement('textarea'); valueInput.placeholder = 'Enter value'; valueInput.style.backgroundColor = '#1E1E1E'; valueInput.style.color = 'white'; valueInput.style.border = '1px solid #444444'; valueInput.style.borderRadius = '5px'; valueInput.style.padding = '5px'; valueInput.style.height = '80px'; valueInput.style.overflowWrap = 'break-word'; valueInput.style.overflow = 'auto'; valueInput.style.marginBottom = '-4px'; keyValueContainer.appendChild(valueInput); // Create button to add key-value pair const addEntryButton = document.createElement('button'); addEntryButton.innerText = 'Add Entry'; addEntryButton.innerText = 'Add Entry'; addEntryButton.style.padding = '10px 20px'; addEntryButton.style.border = '0.2px solid #4E4E4E'; addEntryButton.style.backgroundColor = '#2F2F2F'; addEntryButton.style.color = '#fff'; addEntryButton.style.borderRadius = '50px'; addEntryButton.style.cursor = 'pointer'; addEntryButton.onmouseover = () => { addEntryButton.style.backgroundColor = '#424242'; }; addEntryButton.onmouseout = () => { addEntryButton.style.backgroundColor = 'transparent'; }; addEntryButton.onclick = function () { if (!selectedProfile) { alert('Please select a profile before adding entries.'); return; } const key = keyInput.value.trim(); const value = `<${valueInput.value.trim()}>`; const probability = probabilityInput.value.trim(); const timeRange = timeRangeInput.value.trim(); const fullKey = `events.${selectedProfile}:${key}`; if (key && value) { if (!localStorage.getItem(fullKey)) { const entryData = { value: value, probability: probability || '100', timeRange: timeRange || '0-24' }; localStorage.setItem(fullKey, JSON.stringify(entryData)); loadEntries(); // Clear the input fields after adding the entry keyInput.value = ''; valueInput.value = ''; probabilityInput.value = '100'; timeRangeInput.value = '0-24'; } else { alert('Entry with this key already exists. Please use a different key.'); } } }; keyValueContainer.appendChild(addEntryButton); // Append containers to profilePanel profilePanel.appendChild(profileListContainer); profilePanel.appendChild(keyValueContainer); // Load saved profiles and entries let selectedProfile = localStorage.getItem('events.selectedProfile'); function loadProfiles() { profileList.innerHTML = ''; for (let key in localStorage) { if (key.startsWith('events.profile.')) { const profileName = key.replace('events.profile.', ''); const listItem = document.createElement('li'); listItem.style.display = 'flex'; listItem.style.alignItems = 'center'; listItem.style.cursor = 'pointer'; const nameSpan = document.createElement('span'); nameSpan.innerText = profileName; nameSpan.style.flex = '1'; listItem.appendChild(nameSpan); listItem.onclick = function() { if (selectedProfile === profileName) { selectedProfile = null; localStorage.setItem('events.selectedProfile', ''); listItem.style.backgroundColor = ''; loadEntries(); } else { selectedProfile = profileName; localStorage.setItem('events.selectedProfile', selectedProfile); loadEntries(); highlightSelectedProfile(listItem); } }; const deleteButton = document.createElement('button'); // deleteButton.innerText = 'x'; deleteButton.style.backgroundColor = 'transparent'; deleteButton.style.borderRadius = '50%'; deleteButton.style.marginLeft = '10px'; deleteButton.style.border = 'none'; deleteButton.style.color = '#ffffff'; deleteButton.style.cursor = 'pointer'; deleteButton.style.padding = '14px'; deleteButton.style.width = '15px'; deleteButton.style.height = '15px'; deleteButton.style.display = 'flex'; deleteButton.style.alignItems = 'center'; deleteButton.style.justifyContent = 'center'; deleteButton.style.transition = 'background-color 0.1s'; // Hover effect deleteButton.addEventListener('mouseenter', () => { // closeButton.style.transform = 'scale(1.1)'; deleteButton.style.backgroundColor = '#676767'; }); deleteButton.addEventListener('mouseleave', () => { // closeButton.style.transform = 'scale(1)'; deleteButton.style.backgroundColor = 'transparent'; }); const closeIcon2 = document.createElement('span'); closeIcon2.innerText = '✕'; closeIcon2.style.fontSize = '16px'; closeIcon2.style.color = '#ffffff'; closeIcon2.style.position = 'relative'; closeIcon2.style.top = '-1px'; // Adjust this value to move the character up deleteButton.appendChild(closeIcon2); deleteButton.onclick = function(event) { event.stopPropagation(); localStorage.removeItem(`events.profile.${profileName}`); if (selectedProfile === profileName) { selectedProfile = null; localStorage.setItem('events.selectedProfile', ''); } loadProfiles(); loadEntries(); }; listItem.appendChild(deleteButton); if (selectedProfile === profileName) { highlightSelectedProfile(listItem); } profileList.appendChild(listItem); } } } function openAddProfileDialog() { const dialog = document.createElement('div'); dialog.style.position = 'fixed'; dialog.style.top = '50%'; dialog.style.left = '50%'; dialog.style.transform = 'translate(-50%, -50%)'; dialog.style.backgroundColor = '#424242'; dialog.style.padding = '20px'; dialog.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; dialog.style.zIndex = '1100'; const input = document.createElement('input'); input.type = 'text'; input.placeholder = 'Enter profile name'; dialog.appendChild(input); const addButton = document.createElement('button'); addButton.innerText = 'Add'; addButton.style.marginLeft = '10px'; addButton.onclick = function() { const profileName = input.value.trim(); if (profileName && !localStorage.getItem(`events.profile.${profileName}`)) { localStorage.setItem(`events.profile.${profileName}`, JSON.stringify({})); loadProfiles(); document.body.removeChild(dialog); } }; dialog.appendChild(addButton); const cancelButton = document.createElement('button'); cancelButton.innerText = 'Cancel'; cancelButton.style.marginLeft = '10px'; cancelButton.onclick = function() { document.body.removeChild(dialog); }; dialog.appendChild(cancelButton); document.body.appendChild(dialog); } function loadEntries() { entriesList.innerHTML = ''; // Add header back after clearing if (selectedProfile) { for (let key in localStorage) { if (key.startsWith(`events.${selectedProfile}:`)) { const entryData = JSON.parse(localStorage.getItem(key)); const row = document.createElement('div'); row.style.padding = '10px'; row.style.margin = '5px 0'; row.style.borderRadius = '10px'; row.style.marginBottom = '12px'; row.style.backgroundColor = '#424242'; row.style.display = 'flex'; row.style.alignItems = 'center'; // Create cells for key, value, probability, and time range const keyCell = document.createElement('div'); keyCell.innerText = key.split(':')[1]; keyCell.style.padding = '5px'; keyCell.style.width = '15%'; row.appendChild(keyCell); const valueCell = document.createElement('div'); valueCell.innerText = entryData.value.slice(1, -1); // Remove surrounding brackets valueCell.style.padding = '5px'; valueCell.style.width = '60%'; row.appendChild(valueCell); const probabilityCell = document.createElement('div'); probabilityCell.innerText = `${entryData.probability}%`; probabilityCell.style.padding = '5px'; probabilityCell.style.width = '10%'; row.appendChild(probabilityCell); const timeRangeCell = document.createElement('div'); timeRangeCell.innerText = entryData.timeRange; timeRangeCell.style.padding = '5px'; timeRangeCell.style.width = '10%'; row.appendChild(timeRangeCell); /*// Create close button for profilePanel const closeButton = document.createElement('button'); closeButton.style.position = 'absolute'; closeButton.style.top = '15px'; closeButton.style.right = '15px'; closeButton.style.width = '30px'; closeButton.style.height = '30px'; closeButton.style.backgroundColor = 'transparent'; closeButton.style.color = '#ffffff'; closeButton.style.border = 'none'; closeButton.style.borderRadius = '50%'; closeButton.style.cursor = 'pointer'; closeButton.style.display = 'flex'; closeButton.style.alignItems = 'center'; closeButton.style.justifyContent = 'center'; closeButton.style.transition = 'background-color 0.2s ease'; closeButton.style.boxSizing = 'border-box'; // Create span for the '✕' character const closeIcon = document.createElement('span'); closeIcon.innerText = '✕'; closeIcon.style.fontSize = '16px'; closeIcon.style.position = 'relative'; closeIcon.style.top = '-1px'; // Adjust this value to move the character up // Append the span to the button closeButton.appendChild(closeIcon); */ // Add remove button for each entry const actionCell = document.createElement('div'); actionCell.style.padding = '5px'; actionCell.style.width = '5%'; const removeButton = document.createElement('button'); // removeButton.innerText = '✕'; removeButton.style.backgroundColor = 'transparent'; removeButton.style.border = 'none'; removeButton.style.cursor = 'pointer'; removeButton.style.display = 'flex'; removeButton.style.alignItems = 'center'; removeButton.style.justifyContent = 'center'; removeButton.style.width = '100%'; removeButton.style.height = '100%'; removeButton.style.transition = 'background-color 0.2s ease'; removeButton.style.borderRadius = '50%'; removeButton.style.width = '28px'; removeButton.style.height = '28px'; removeButton.style.marginLeft = '-3px'; removeButton.style.boxSizing = 'border-box'; removeButton.onclick = function() { localStorage.removeItem(key); loadEntries(); }; const closeIcon1 = document.createElement('span'); closeIcon1.innerText = '✕'; closeIcon1.style.fontSize = '16px'; closeIcon1.style.position = 'relative'; closeIcon1.style.color = '#ffffff'; closeIcon1.style.top = '-1px'; // Adjust this value to move the character up // Append the span to the button removeButton.appendChild(closeIcon1); actionCell.appendChild(removeButton); row.appendChild(actionCell); // Hover effect removeButton.addEventListener('mouseenter', () => { removeButton.style.backgroundColor = '#676767'; }); removeButton.addEventListener('mouseleave', () => { removeButton.style.backgroundColor = 'transparent'; }); // Make the row editable when clicked row.onclick = function() { keyInput.value = key.split(':')[1]; valueInput.value = entryData.value.slice(1, -1); // Remove surrounding brackets for editing probabilityInput.value = entryData.probability; timeRangeInput.value = entryData.timeRange; }; entriesList.appendChild(row); } } } } function highlightSelectedProfile(selectedItem) { // Remove highlight from all items Array.from(profileList.children).forEach(item => { item.style.backgroundColor = ''; }); // Highlight the selected item selectedItem.style.backgroundColor = '#444444'; selectedItem.style.borderRadius = '10px'; selectedItem.style.padding = '10px'; } loadProfiles(); loadEntries(); // Append profilePanel to body document.body.appendChild(profilePanel); } /* // Function to select a random entry and output to console function getRandomEntry() { const selectedProfile = localStorage.getItem('events.selectedProfile'); if (selectedProfile) { let profileEntries = []; const currentHour = new Date().getHours(); for (let key in localStorage) { if (key.startsWith(`events.${selectedProfile}:`)) { const entryData = JSON.parse(localStorage.getItem(key)); const [startHour, endHour] = entryData.timeRange.split('-').map(Number); // Check if current hour is within the specified time range if (currentHour >= startHour && currentHour < endHour) { profileEntries.push({ key, ...entryData }); } } } if (profileEntries.length > 0) { const probability = parseInt(localStorage.getItem('events.probability') || '100', 10); let selectedEntry = null; while (profileEntries.length > 0) { // Randomly select an entry from the available entries const randomIndex = Math.floor(Math.random() * profileEntries.length); const randomEntry = profileEntries[randomIndex]; // Check if the entry passes the individual probability check if (Math.random() * 100 < randomEntry.probability) { selectedEntry = randomEntry; break; } else { // Remove the entry from the list if it fails the probability check profileEntries.splice(randomIndex, 1); } } if (selectedEntry && Math.random() * 100 < probability) { console.log(`Random Entry - Key: ${selectedEntry.key}, Value: ${selectedEntry.value}`); // Add the entry to the textarea const textarea = document.querySelector('div#prompt-textarea.ProseMirror'); if (textarea) { // Create a new paragraph element for the random entry, like the customMessages const newParagraph = document.createElement('p'); newParagraph.textContent = selectedEntry.value; textarea.appendChild(newParagraph); console.log('Random entry added as a new paragraph.'); } else { console.log('Textarea not found.'); } } else { console.log('No entry selected this time based on the given probability.'); } } else { console.log('No entries available for the selected profile in the current time range.'); } } else { console.log('No profile selected. Please select a profile to retrieve a random entry.'); } } // Expose the function to be accessible from other scripts unsafeWindow.getRandomEntry = getRandomEntry; */ })();