ChatGPT Temp Chat By Default

Automatically enables temporary mode on ChatGPT unless manually disabled by the user

Verzia zo dňa 10.06.2025. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         ChatGPT Temp Chat By Default
// @namespace    nisc
// @version      2025.06.08-B
// @description  Automatically enables temporary mode on ChatGPT unless manually disabled by the user
// @homepageURL  https://github.com/nisc/chatgpt-userscripts/
// @author       nisc
// @match        https://chatgpt.com/*
// @icon         https://chatgpt.com/favicon.ico
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
  'use strict';

  // Track if user has manually disabled temporary chat mode
  let userDisabledTempChat = false;

  /**
   * Find the temporary chat toggle button in the UI
   * @returns {HTMLButtonElement|null} The temporary chat button or null if not found
   */
  function getTempChatButton() {
    return document.querySelector('button[aria-label*="temporary chat"]');
  }

  /**
   * Enable temporary chat mode if not manually disabled by user
   * Makes multiple attempts to find and click the button
   */
  function activateTemporaryMode() {
    if (userDisabledTempChat) return;

    let attempts = 0;
    const maxAttempts = 5;
    const interval = 500;

    const tryFindButton = setInterval(() => {
      const tempChatButton = getTempChatButton();
      if (tempChatButton) {
        // Add listener to detect when user manually disables temp chat
        if (!tempChatButton._hasListener) {
          tempChatButton.addEventListener('click', function () {
            userDisabledTempChat = this.getAttribute('aria-label') === 'Turn off temporary chat';
          });
          tempChatButton._hasListener = true;
        }

        // Enable temporary chat if it's currently off
        if (tempChatButton.getAttribute('aria-label') === 'Turn on temporary chat') {
          tempChatButton.click();
        }
        clearInterval(tryFindButton);
      } else if (attempts++ >= maxAttempts) {
        clearInterval(tryFindButton);
      }
    }, interval);
  }

  /**
   * Set up observer to watch for DOM changes that indicate a new chat
   * This ensures we catch new chats created via the UI
   */
  function setupMutationObserver() {
    const targetNode = document.querySelector('#conversation-header-actions') || document.body;
    const observer = new MutationObserver(() => {
      const tempChatButton = getTempChatButton();
      if (tempChatButton && tempChatButton.getAttribute('aria-label') === 'Turn on temporary chat') {
        userDisabledTempChat = false; // Reset flag for new chat
        activateTemporaryMode();
      }
    });
    observer.observe(targetNode, { childList: true, subtree: true });
  }

  /**
   * Handle URL/history state changes to detect new chats
   * This ensures we catch new chats created via URL navigation
   */
  function handleStateChange() {
    if (window.location.pathname.startsWith('/c/')) {
      userDisabledTempChat = false;
      activateTemporaryMode();
    }
  }

  // Wrap history methods to detect URL-based chat changes
  if (!window._historyWrapped) {
    const originalPushState = history.pushState;
    history.pushState = function () {
      originalPushState.apply(this, arguments);
      handleStateChange();
    };

    const originalReplaceState = history.replaceState;
    history.replaceState = function () {
      originalReplaceState.apply(this, arguments);
      handleStateChange();
    };
    window._historyWrapped = true;
  }

  // Initialize when page loads
  window.addEventListener('load', function () {
    setupMutationObserver();
    activateTemporaryMode();
  });
})();