Unlock DeepSqueak model.

Get model DeepSqueak.

// ==UserScript==

// @name         Unlock DeepSqueak model.

// @namespace    https://character.ai/

// @version      2025-08-02

// @description  Get model DeepSqueak.

// @author       providence

// @match        https://character.ai/chat/*

// @match        https://character.ai/*

// @icon         https://character.ai/favicon.ico

// @license MIT

// @grant        GM_registerMenuCommand

// ==/UserScript==

(function() {

    'use strict';

    let capturedToken = null;

    // Interceptar fetch para capturar el token de authorization

    const originalFetch = window.fetch;

    window.fetch = async function(...args) {

        const response = await originalFetch.apply(this, args);

        // Revisar si la petición tiene authorization header

        if (args[1] && args[1].headers && args[1].headers.authorization) {

            capturedToken = args[1].headers.authorization;

        }

        return response;

    };

    // Interceptar XMLHttpRequest también

    const originalSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;

    XMLHttpRequest.prototype.setRequestHeader = function(header, value) {

        if (header.toLowerCase() === 'authorization') {

            capturedToken = value;

        }

        return originalSetRequestHeader.call(this, header, value);

    };

    function getAccessToken() {

        // Primero intenta los métodos anteriores

        const meta = document.querySelector('meta[cai_token]');

        const tokenFromMeta = meta?.getAttribute('cai_token');

        if (tokenFromMeta) return tokenFromMeta;

        const tokenFromLocalStorage =

            localStorage.getItem('cai_token') ||

            localStorage.getItem('token') ||

            localStorage.getItem('auth_token');

        if (tokenFromLocalStorage) return tokenFromLocalStorage;

        const cookieMatch = document.cookie.match(/(?:^|; )cai_token=([^;]*)/);

        if (cookieMatch) return cookieMatch[1];

        // Si no encuentra nada, usa el token capturado de headers

        return capturedToken;

    }

    GM_registerMenuCommand('Make DeepRat default', makeDeepSynthDefault);

    function makeDeepSynthDefault() {

        const AccessToken = getAccessToken();

        if (!AccessToken) {

            alert("No se encontró el token. Navega un poco por el sitio para que se capturen las peticiones, luego intenta de nuevo.");

            return;

        }

        fetch("https://plus.character.ai/chat/user/update_settings/", {

            headers: {

                "accept": "application/json, text/plain, */*",

                "authorization": AccessToken,

                "content-type": "application/json",

            },

            body: JSON.stringify({

                "modelPreferenceSettings": {

                    "defaultModelType": "MODEL_TYPE_DEEP_SYNTH"

                }

            }),

            method: "POST",

        }).then(res => {

            if (res.ok) {

                alert("¡Éxito! El modelo DeepRat es ahora predeterminado. Recarga la página.");

            } else {

                throw new Error("Solicitud rechazada. Código: " + res.status);

            }

        }).catch((error) => {

            alert("Error al cambiar a DeepRat: " + error.message);

        });

    }

    // Mostrar información del token capturado (opcional, para debug)

    GM_registerMenuCommand('Ver token capturado', function() {

        const token = getAccessToken();

        if (token) {

            console.log("Token encontrado:", token.substring(0, 20) + "...");

            alert("Token encontrado (revisa la consola para más detalles)");

        } else {

            alert("No se ha capturado ningún token aún. Navega por el sitio.");

        }

    });

})();

长期地址
遇到问题?请前往 GitHub 提 Issues。