Lolzteam GPT

Найдет ответ для вашего вопроса

目前為 2023-05-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Lolzteam GPT
// @version      0.1.1
// @description  Найдет ответ для вашего вопроса
// @author       vuchaev2015
// @match        https://zelenka.guru/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=zelenka.guru
// @grant        none
// @namespace https://greasyfork.org/users/997663
// ==/UserScript==

var domain = 'zelenka.guru'

let accountMenu = document.getElementById("AccountMenu");
let linksList = accountMenu.querySelector(".blockLinksList");
let buttonId = `ChatGPT`;

linksList.insertAdjacentHTML('beforeend', `<li><a href="javascript:void(0)" id="${buttonId}">Спросить у ChatGPT</a></li>`);

document.getElementById(buttonId).addEventListener("click", async function (event) {
    event.preventDefault();
    let question = prompt('Введите ваш вопрос: ')
    if (question !== null) {
        console.log(await new ThabAi().get_response(question));
    }
});


class ThabAi {
    constructor() {
        this.session = {
            headers: {
                "content-type": "application/json",
            },
        };
    }

    async get_response(prompt, postElement) {
        let response = await fetch("https://chatbot.theb.ai/api/chat-process", {
            method: "POST",
            headers: this.session.headers,
            body: JSON.stringify({ prompt: prompt, options: {} }),
        });
        console.log(`[get_response]: Запрос с подсказкой "${prompt}" отправлен`);
        XenForo.alert(`[get_response]: Запрос с подсказкой "${prompt}" отправлен`, `Lolzteam GPT`)
        if (!response.ok) throw new Error(`[get_response]: network response for prompt "${prompt}" was not ok`);
        let response_lines = await response.text();
        let response_data = "";
        for (let line of response_lines.split("\n")) {
            if (line) {
                let data = JSON.parse(line);
                if ("utterances" in data) {
                    response_data += data["utterances"]
                        .map((utterance) => utterance["text"])
                        .join(" ");
                } else if ("delta" in data) {
                    response_data += data["delta"];
                }
            }
        }

        console.log(`[get_response] Запрос для подсказки ${prompt} получен:`, response_data);
        return XenForo.alert(`[get_response] Запрос для подсказки ${prompt} получен: ${response_data}`, `Lolzteam GPT`)

    }
}

function createButtonElement(buttonId, messageText) {
    const ChatGPTButton = document.createElement("li");
    const button = document.createElement("a");
    button.setAttribute("href", "javascript:void(0)");
    button.setAttribute("id", buttonId);
    button.textContent = "Отправить запрос ChatGPT";
    button.addEventListener("click", async function (event) {
        event.preventDefault();
        console.log(await new ThabAi().get_response(messageText));
    });
    ChatGPTButton.appendChild(button);
    return ChatGPTButton;
}

function generateRandomString(length) {
    let result = '';
    let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let charactersLength = characters.length;
    for (let i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result;
}

function checkThreadItems() {
    const linksLists = [...document.querySelectorAll(".secondaryContent.blockLinksList")].filter(
        (list) => !list.querySelector('li[id^="ChatGPTButton-"]')
    );

    linksLists.forEach((linksList) => {
        const links = linksList.querySelectorAll("a");

        links.forEach((link) => {
            if (link.href.startsWith(`https://${domain}/posts/`)) {
                let postId;
                let newLink;
                let postElement;

                if (link.href.includes("posts/comments/")) {
                    postId = link.href.split("posts/comments/")[1].split("/")[0];
                    newLink = `post-comment-${postId}`;
                } else {
                    postId = link.href.split("posts/")[1].split("/")[0];
                    newLink = `post-${postId}`;
                }

                postElement = document.querySelector(
                    `#${newLink}.${link.href.includes("posts/comments/") ? "comment" : "message"}`
                );

                if (postElement && !postElement.hasAttribute("ChatGPTButton")) {
                    postElement.setAttribute("ChatGPTButton", "added");

                    const menus = [...document.querySelectorAll("div.Menu")].filter((menu) =>
                                                                                    [...menu.querySelectorAll("a")].some((link) => link.href.includes(`${postId}`))
                                                                                   );

                    const author = postElement.querySelector(".username").textContent;
                    {
                        const buttonId = `ChatGPTButton-${generateRandomString(10)}`;
                        console.log(postElement)
                        let messageText;

                        try {
                            messageText = postElement.querySelector("div.messageInfo > div.messageContent > article > blockquote").textContent.trim().replace(/\s{2,}/g, ' ');
                        } catch (error) {
                            messageText = postElement.querySelector("div.commentInfo > div.commentContent").textContent.replace(/\s{2,}/g, ' ');
                        }
                        const usernameLink = postElement.querySelector("a");
                        const currentUrl = usernameLink.getAttribute("href");

                        menus[menus.length - 1]
                            .querySelector(".secondaryContent")
                            .appendChild(createButtonElement(buttonId, messageText));
                    }
                }
            }
        });
    });
}

setInterval(checkThreadItems);