Greasy Fork is available in English.
To turn it on, press F2. When the chat is open, it will work by itself. Use the HTTPS protocol of the page. You can use 2 languages [ru, en] to switch, press F8.
// ==UserScript==
// @name Voice input for chat
// @namespace -
// @version 0.1
// @description To turn it on, press F2. When the chat is open, it will work by itself. Use the HTTPS protocol of the page. You can use 2 languages [ru, en] to switch, press F8.
// @author Nudo#9482
// @match *://sploop.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=sploop.io
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
const Chat = document.getElementById("chat")
const Keys = {}
const Recognizer = new window.webkitSpeechRecognition()
Chat.wrapper = document.getElementById("chat-wrapper")
Chat.voiceActive = false
Chat.voiceLang = "en-En"
Chat._voiceLangs = ["en-En", "ru-Ru"]
Chat.counter = 0
Chat.getNextLang = function() {
const length = Chat._voiceLangs.length - 1
this.counter += 1
if (this.counter > length) {
this.counter = 0
}
return this.counter
}
Recognizer.active = false
Recognizer.setup = function() {
this.interimResults = true
this.reset = function() {
this.stop()
setTimeout(() => {
this.start()
}, 750)
}
this.launch = function() {
this.lang = Chat.voiceLang
this.active = !this.active
this.start()
}
this.onresult = function() {
try {
if (!this.active) {
return void 0
}
const result = event.results[event.resultIndex]
const words = result[0].transcript
if (words.length) {
Chat.value = words
Chat.focus()
}
} catch {
this.disable()
}
}
this.disable = function() {
if (this.active) {
this.active = !Recognizer.active
this.stop()
}
}
this.onend = function() {
if (this.active) {
this.reset()
}
}
}
window.addEventListener("load", () => {
Recognizer.setup()
})
setInterval(() => {
try {
if (Chat.wrapper.style.display === "block") {
if (Chat.voiceActive) {
if (!Recognizer.active) {
Recognizer.launch()
}
} else {
Recognizer.disable()
}
} else {
Recognizer.disable()
}
} catch {
Recognizer.disable()
}
}, 100)
function onKeyDown(event) {
if (event.code === "F2") {
Chat.voiceActive = !Chat.voiceActive
}
if (event.code === "F8") {
Chat.voiceLang = Chat._voiceLangs[Chat.getNextLang()]
document.title = `Voice language: ${Chat.voiceLang}`
setTimeout(() => {
document.title = "Sploop.io - Fast paced combat game"
}, 2000)
}
}
document.addEventListener("keydown", onKeyDown)
})()