Auto-start new chat on disconnect and keep chat input focused.
目前為
// ==UserScript==
// @name Emerald Auto Next
// @namespace https://greasyfork.org/
// @version 1.1
// @description Auto-start new chat on disconnect and keep chat input focused.
// @author Zach
// @license Apache-2.0
// @icon https://emeraldchat.com/logo7.svg
// @match https://emeraldchat.com/app
// @grant none
// @compatible Firefox
// @compatible Violentmonkey
// ==/UserScript==
'use strict';
function simulateClick(element) {
const mouseDown = new MouseEvent('mousedown', { bubbles: true, cancelable: true });
const mouseUp = new MouseEvent('mouseup', { bubbles: true, cancelable: true });
const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true });
element.dispatchEvent(mouseDown);
element.dispatchEvent(mouseUp);
element.dispatchEvent(clickEvent);
}
function giveKarma() {
const karmaButtons = document.querySelectorAll("a.ui-button-match-mega");
if (karmaButtons.length < 2) return;
const messageCount = document.querySelectorAll("#messages .room-component-message-container").length;
const posKarma = karmaButtons[0];
const negKarma = karmaButtons[1];
if (messageCount > 3) {
console.log("Giving good karma...");
simulateClick(posKarma);
}
else {
console.log("Giving bad karma...");
simulateClick(negKarma);
}
}
function nextChat() {
const startButton = document.querySelector(".ui-button-match");
if (!startButton) return;
if (startButton.textContent === "Start") {
setTimeout(() => simulateClick(startButton), 1500);
}
}
function focusChat() {
const chatInput = document.getElementById("room-input");
if (!chatInput) return;
document.body.addEventListener("keydown", () => {
if (!document.querySelector("#ui-hatch > *, #ui-hatch-2 > *, #interests")) {
chatInput.focus();
}
}, { once: true });
}
function observeChanges() {
const container = document.getElementById("container");
if (!container) return;
const observer = new MutationObserver(() => {
giveKarma();
nextChat();
focusChat();
});
observer.observe(container, { childList: true, subtree: true });
}
window.onload = () => {
observeChanges();
};