您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Type /cmds in the bonk chat to get started
// ==UserScript== // @name Bonk.io ChatGPT Integration // @namespace https://greasyfork.org/en/users/1122101 // @version 1.1 // @description Type /cmds in the bonk chat to get started // @author rats410 // @match https://bonk.io/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; var lobbyChatInput = document.getElementById("newbonklobby_chat_input"); var lobbyChatContent = document.getElementById("newbonklobby_chat_content"); var gameChatInput = document.getElementById("ingamechatinputtext"); var gameChatContent = document.getElementById("ingamechatcontent"); var apiKey = null; var isChatGPTGeneratingResponse = false; apiKey = localStorage.getItem("chatGPTApiKey"); function displayCommands() { var commandsMessage = "All Commands: /key, /setup, /credits, /cmds"; var commandsDiv = document.createElement("div"); commandsDiv.className = "chat-content-message ng-binding"; commandsDiv.textContent = commandsMessage; commandsDiv.style.color = "#008000"; // Green if (lobbyChatContent) { lobbyChatContent.appendChild(commandsDiv); } if (gameChatContent) { gameChatContent.appendChild(commandsDiv.cloneNode(true)); } } function listenForCommands() { if (lobbyChatInput && lobbyChatContent) { lobbyChatInput.addEventListener("keydown", function(e) { if (e.keyCode === 13) { var chatValue = lobbyChatInput.value.trim(); if (chatValue.startsWith("/cmds")) { displayCommands(); lobbyChatInput.value = ""; e.preventDefault(); } else if (chatValue.startsWith("/key")) { handleKeyCommand(chatValue); lobbyChatInput.value = ""; e.preventDefault(); } else if (isChatGPTCommand(chatValue)) { communicateWithChatGPT(chatValue); e.preventDefault(); } else if (chatValue.startsWith("/setup")) { showSetupInstructions(); lobbyChatInput.value = ""; e.preventDefault(); } else if (chatValue.startsWith("/credits")) { displayCredits(); lobbyChatInput.value = ""; e.preventDefault(); } } }); } if (gameChatInput && gameChatContent) { gameChatInput.addEventListener("keydown", function(e) { if (e.keyCode === 13) { var chatValue = gameChatInput.value.trim(); if (chatValue.startsWith("/cmds")) { displayCommands(); gameChatInput.value = ""; e.preventDefault(); } else if (chatValue.startsWith("/key")) { handleKeyCommand(chatValue); gameChatInput.value = ""; e.preventDefault(); } else if (isChatGPTCommand(chatValue)) { communicateWithChatGPT(chatValue); e.preventDefault(); } else if (chatValue.startsWith("/setup")) { showSetupInstructions(); gameChatInput.value = ""; e.preventDefault(); } else if (chatValue.startsWith("/credits")) { displayCredits(); gameChatInput.value = ""; e.preventDefault(); } } }); } } listenForCommands(); function handleKeyCommand(command) { var args = command.substr(1).trim().split(" "); var commandName = args[0].toLowerCase(); if (commandName === "key") { if (args.length >= 2) { apiKey = args.slice(1).join(" ").trim(); localStorage.setItem("chatGPTApiKey", apiKey); displayInChat("API key set successfully. ChatGPT is ready to use.", "system"); } else { displayInChat("No API key provided. Set API key with /key [API key here]", "system"); } } else { // Ignore } } function isChatGPTCommand(message) { return ( message.toLowerCase().includes("gpt") || message.toLowerCase().includes("chatgpt") ); } const gptData = { model: "gpt-3.5-turbo", max_tokens: 2048, user: "1", temperature: 1, frequency_penalty: 0.2, presence_penalty: -1, stop: ["#", ";"] }; function communicateWithChatGPT(message) { if (isChatGPTGeneratingResponse) { return; } isChatGPTGeneratingResponse = true; if (apiKey) { var requestPayload = { messages: [{ role: 'user', content: message }], ...gptData }; var oHttp = new XMLHttpRequest(); oHttp.open("POST", "https://api.openai.com/v1/chat/completions"); oHttp.setRequestHeader("Accept", "application/json"); oHttp.setRequestHeader("Content-Type", "application/json"); oHttp.setRequestHeader("Authorization", "Bearer " + apiKey); oHttp.onreadystatechange = function() { if (oHttp.readyState === 4) { if (oHttp.status === 200) { var response = JSON.parse(oHttp.responseText); if (response.choices && response.choices.length > 0) { var reply = response.choices[0].message.content; newbonklobby_chat_input.value = "ChatGPT: " + reply; simulateEnterKeyPress(newbonklobby_chat_input); } else { displayInChat("Failed to generate a response from ChatGPT", "system"); } } else { displayInChat("An error occurred while communicating with ChatGPT", "system"); } isChatGPTGeneratingResponse = false; } }; oHttp.send(JSON.stringify(requestPayload)); } else { displayInChat("No API key provided. Set API key with /key [API key here] first", "system"); isChatGPTGeneratingResponse = false; } } function simulateEnterKeyPress(element) { var event = new KeyboardEvent("keydown", { keyCode: 13, bubbles: true, cancelable: true, }); element.dispatchEvent(event); } function simulatePublicChatMessage(message) { var chatMessageEvent = new Event('message', { bubbles: true }); var messageData = { type: "public", content: "ChatGPT: " + message }; Object.defineProperty(chatMessageEvent, 'data', { value: JSON.stringify(messageData) }); document.dispatchEvent(chatMessageEvent); } function displayInChat(message, messageType) { var chatMessage = document.createElement("div"); chatMessage.className = "chat-content-message"; chatMessage.textContent = message; if (messageType === "system") { chatMessage.style.color = "#808080"; // Gray } if (lobbyChatContent) { lobbyChatContent.appendChild(chatMessage); } if (gameChatContent) { gameChatContent.appendChild(chatMessage.cloneNode(true)); } } function showSetupInstructions() { var setupInstructions = "Use /key [API key here] to link your GPT (stored securely)." + "Use phrases like 'hey gpt' or 'gpt' to talk to ChatGPT."; var setupMessage = document.createElement("div"); setupMessage.className = "chat-content-message"; setupMessage.textContent = setupInstructions; setupMessage.style.color = "#C0C0C0"; // Silver if (lobbyChatContent) { lobbyChatContent.appendChild(setupMessage); } if (gameChatContent) { gameChatContent.appendChild(setupMessage.cloneNode(true)); } } function displayCredits() { var creditsMessage = "Thanks to LEGENDBOSS123 and iNeonz for their helpful Userscripts!"; var creditsDiv = document.createElement("div"); creditsDiv.className = "chat-content-message"; creditsDiv.textContent = creditsMessage; creditsDiv.style.color = "#FFD700"; // Gold if (lobbyChatContent) { lobbyChatContent.appendChild(creditsDiv); } if (gameChatContent) { gameChatContent.appendChild(creditsDiv.cloneNode(true)); } } })();