您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
An enhancement suite for MxRP
// ==UserScript== // @name Better MxRP // @namespace http://oxeff.xyz/ // @version 0.4.4 // @description An enhancement suite for MxRP // @author 0xEFF <[email protected]> (https://github.com/hecksadecimal) // @match https://mxrp.chat/* // @grant none // ==/UserScript== (function() { 'use strict'; var $ = window.jQuery; // The lists at /chats var group_chats = $("#group_chats"); if (group_chats.length) { $("#group_chats li").each(function() { // Contains everything we need. var meta_info = $(this).find("p:nth-child(2) > a:nth-child(1)"); if (meta_info.html() == "Searched" || window.location.pathname == "/chats/searched"){ // Searched chat IDs follow a predictable schema. var chat_id = $(this).find("h3:nth-child(1) > a:nth-child(1)").html(); console.log("Found Searched chat: " + chat_id); // Button setup $(this).find("form").before('<button id="better_rename_' + chat_id +'" class="unsubscribe" style="float: left; margin-right: 5px;">Rename</button>'); var searched_rename_button = $("#better_rename_" + chat_id); searched_rename_button.after('<button id="better_description_' + chat_id + '" class="unsubscribe" style="float: left;">Set Description</button>'); var searched_description_button = $("#better_description_" + chat_id); // Can't use $(this) in the context of a button press event to achieve the desired results. Need a mirror of the current $(this). var current_item = $(this); searched_rename_button.click(function() { var rename_value = prompt("Name (Empty to reset)", current_item.find("h3:nth-child(1) > a:nth-child(1)").html()); if (rename_value) { window.localStorage.setItem("name_" + chat_id, rename_value); current_item.find("h3:nth-child(1) > a:nth-child(1)").html(rename_value); } else if (rename_value === "") { window.localStorage.removeItem("name_" + chat_id); current_item.find("h3:nth-child(1) > a:nth-child(1)").html(chat_id); } else { return; } }); searched_description_button.click(function() { var desc_value = prompt("Description (Empty to reset)", current_item.find(".desc").html()); if (desc_value) { window.localStorage.setItem("desc_" + chat_id, desc_value); current_item.find(".desc").html(desc_value); } else if (desc_value === "" ){ window.localStorage.removeItem("desc_" + chat_id); current_item.find(".desc").html(""); } else { return; } }); var chat_name = window.localStorage.getItem("name_" + chat_id); if (chat_name) { $(this).find("h3:nth-child(1) > a:nth-child(1)").html(chat_name); } var chat_desc = window.localStorage.getItem("desc_" + chat_id); if (chat_desc) { $(this).find(".desc").html(chat_desc); } } }); } // The lists that shows up when you're currently in a chat page. var group_chats_mini = $("#my_chats_list"); if (group_chats_mini.length) { // Have to do it this way because the list is not populated by the time the page is loaded. group_chats_mini.bind('DOMSubtreeModified', function(e) { for (var i=0; i < e.target.children.length; i++) { if (e.target.children[i].classList.contains("searched")){ var chat_id = e.target.children[i].children[0].children[0].innerHTML; console.log("Found Searched chat: " + chat_id); var chat_name = window.localStorage.getItem("name_" + chat_id); if (chat_name) { e.target.children[i].children[0].children[0].innerHTML = chat_name; } } } }); } function paraInputHandler(e) { if (e.keyCode == 13 && !e.shiftKey) { $("#button_wrap > button:nth-child(1)").click(); $("#chat_line_input > input[type=text]").keydown(); $("#parainput").val(""); $("#chat_line_input > input[type=text]").val(""); $("#chat_line_input > input[type=text]").keyup(); } else { var unclean_str = $("#parainput").val(); unclean_str = unclean_str.replace(/(?:\r\n|\r|\n){2}/g, '[br] [br]'); unclean_str = unclean_str.replace(/(?:\r\n|\r|\n)/g, '[br]'); $("#chat_line_input > input[type=text]").keydown(); $("#chat_line_input > input[type=text]").val(unclean_str); $("#chat_line_input > input[type=text]").keyup(); } } var paragraph_mode_saved = window.localStorage.getItem("paramode_" + $(location).attr('pathname')); if (!paragraph_mode_saved) { paragraph_mode_saved = "script" } function toggleTextbox() { console.log("smart_quirk_mode: " + paragraph_mode_saved); if (paragraph_mode_saved == "paragraph") { $("#chat_line_input > input[type=text]").hide(); $("#parainput").show(); } else if (paragraph_mode_saved == "script") { $("#chat_line_input > input[type=text]").show(); $("#parainput").hide(); $("#conversation").css({"bottom": "59px"}); } else { $("#chat_line_input > input[type=text]").show(); $("#parainput").hide(); $("#conversation").css({"bottom": "59px"}); } try { $("#chat_line_input > input[type=text]").keydown(); $("#chat_line_input > input[type=text]").keyup(); } catch(err) { console.log("Likely error due to unready websocket. Ignore.") } } function setupTextbox() { $("#chat_line_input > input[type=text]").after('<textarea id="parainput" name="text" autocomplete="off" maxlength="10000">'); $("#parainput").css({"min-height": "5em", "max-height": "100vh", "margin": "0 -2px 5px"}); $("#conversation").css({"bottom": "59px"}); $("#parainput").on("change keyup paste", paraInputHandler); toggleTextbox(); } var mode_selector = $("#smart_quirk_select"); if (mode_selector.length) { $("#settings > div > div:nth-child(4) > div:nth-child(9) > p").after('<p><input type="checkbox" id="chat_better_entry" class="chat_settings" name="chat_better_entry"><label for="chat_better_entry"> BMXrP: Enable paragraph box</label></p>'); paragraph_mode_saved = window.localStorage.getItem("paramode_" + $(location).attr('pathname')); console.log(paragraph_mode_saved) if (paragraph_mode_saved == "paragraph") { $('#chat_better_entry').prop('checked', true); } else { $('#chat_better_entry').prop('checked', false); } setupTextbox(); $("#chat_better_entry").change(function() { console.log($('#chat_better_entry').is(":checked")) paragraph_mode_saved = ($('#chat_better_entry').is(":checked") ? "paragraph" : "script"); window.localStorage.setItem("paramode_" + $(location).attr('pathname'), paragraph_mode_saved); $("#chat_line_input input").trigger( "keyup" ); toggleTextbox(); }); } var abscond_button = $("#abscond_button"); if (abscond_button.length) { var might_abscond = false; var did_abscond = false; // The confirmation dialogue is both ugly and slow. window.confirm = function() { return true; }; // We can create our own button to add functionality and delegate the vanilla behavior of disconnects to the original button // since we can't directly interact with any function that's a part of mxrp's scripts. abscond_button.hide(); abscond_button.after( '<button type="button" id="better_abscond_button">Abscond</button>' ); var better_abscond_button = $("#better_abscond_button"); $(document).keydown(function(e) { if (e.key === "Escape") { better_abscond_button.trigger("click"); } }); better_abscond_button.click(function() { if (!might_abscond){ might_abscond = true; better_abscond_button.html("[5] Abscond?"); better_abscond_button.css('background-color','red'); var seconds = 5; $('input[name="text"]').css("width", "97%"); better_abscond_button.html("[" + seconds + "] Abscond?"); var countdown = window.setInterval(function() { seconds = seconds - 1; better_abscond_button.html("[" + seconds + "] Abscond?"); if (seconds === 0 && !did_abscond) { window.clearInterval(countdown); might_abscond = false; better_abscond_button.html("Abscond"); better_abscond_button.removeAttr("style"); $('input[name="text"]').removeAttr("style"); } }, 1000); } else { did_abscond = true; abscond_button.trigger("click"); abscond_button.show(); better_abscond_button.hide(); window.clearInterval(countdown); } }); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址