// ==UserScript==
// @name Drawaria Expression Channel Engine: Plus!
// @namespace http://tampermonkey.net/
// @version 3.0
// @description Expression Channel Engine: Plus!
// @author YouTubeDrawaria
// @match https://drawaria.online/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=drawaria.online
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// (function() { /*
// 'use strict';
// Function to get the user's language
function getUserLanguage() {
const navigatorLanguage = navigator.language || navigator.userLanguage;
return navigatorLanguage.split('-')[0]; // Get the primary language code
}
// Translations for the warning message and character's speech
const translations = {
en: {
title: 'Everything is blocked',
message: 'You should not play right now, you have important things to do.',
characterSpeech: 'Hey! Go outside.'
},
es: {
title: 'Todo está bloqueado',
message: 'No debes jugar en este momento, tienes cosas importantes que hacer ahora mismo.',
characterSpeech: '¡Oye! Sal afuera.'
},
fr: {
title: 'Tout est bloqué',
message: 'Vous ne devriez pas jouer en ce moment, vous avez des choses importantes à faire.',
characterSpeech: 'Hé ! Sors dehors.'
},
de: {
title: 'Alles ist blockiert',
message: 'Du solltest im Moment nicht spielen, du hast wichtige Dinge zu tun.',
characterSpeech: 'Hey! Geh nach draußen.'
},
it: {
title: 'Tutto è bloccato',
message: 'Non dovresti giocare in questo momento, hai cose importanti da fare.',
characterSpeech: 'Ehi! Esci fuori.'
},
pt: {
title: 'Tudo está bloqueado',
message: 'Você não deveria jogar agora, você tem coisas importantes para fazer.',
characterSpeech: 'Ei! Vá para fora.'
},
ru: {
title: 'Все заблокировано',
message: 'Вы не должны играть сейчас, у вас есть важные дела.',
characterSpeech: 'Эй! Иди на улицу.'
},
ja: {
title: 'すべてブロックされています',
message: '今はプレイすべきではありません。重要なことがあります。',
characterSpeech: 'ねえ!外に出ようよ。'
},
zh: {
title: '一切都被阻止了',
message: '您现在不应该玩,您有重要的事情要做。',
characterSpeech: '嘿!出去外面。'
},
// Add more languages as needed
};
//*
window.addEventListener('load', function() {
const chatInput = document.querySelector('#chatbox_textinput');
if (chatInput) {
const textarea = document.createElement('textarea');
textarea.id = chatInput.id;
textarea.className = chatInput.className;
textarea.style = chatInput.style.cssText;
textarea.placeholder = chatInput.placeholder;
textarea.maxLength = chatInput.maxLength;
chatInput.parentNode.replaceChild(textarea, chatInput);
function fillTextareaWithBlankLines() {
textarea.value = "\u000A".repeat(199) + "\u00AD"; // 100 line feeds, U+00AD is the soft hyphen Shortcut Alt 0173.
const event = new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
keyCode: 13,
key: 'Enter',
code: 'Enter',
shiftKey: false,
ctrlKey: false,
altKey: false,
metaKey: false
});
textarea.dispatchEvent(event);
}
function clearTextarea() {
textarea.value = '';
}
function wrapSelection(prefix, suffix) {
const start = textarea.selectionStart;
const end = textarea.selectionEnd;
const selectedText = textarea.value.substring(start, end);
const newText = prefix + selectedText + suffix;
textarea.value = textarea.value.substring(0, start) + newText + textarea.value.substring(end);
textarea.selectionStart = start + prefix.length;
textarea.selectionEnd = start + newText.length;
textarea.focus();
}
function openEmojiPicker() {
const emojiPicker = document.createElement('div');
emojiPicker.innerHTML = `
<button class="emoji-btn" onclick="insertEmoji('😀')">😀</button>
<button class="emoji-btn" onclick="insertEmoji('😂')">😂</button>
<button class="emoji-btn" onclick="insertEmoji('❤️')">❤️</button>
<button class="emoji-btn" onclick="insertEmoji('👍')">👍</button>
<button class="emoji-btn" onclick="insertEmoji('😢')">😢</button>
`;
emojiPicker.style.position = 'absolute';
emojiPicker.style.top = '50px';
emojiPicker.style.left = '10px';
emojiPicker.style.background = 'white';
emojiPicker.style.border = '1px solid #ccc';
emojiPicker.style.padding = '10px';
emojiPicker.style.zIndex = 1000;
document.body.appendChild(emojiPicker);
}
window.insertEmoji = function(emoji) {
const start = textarea.selectionStart;
const end = textarea.selectionEnd;
textarea.value = textarea.value.substring(0, start) + emoji + textarea.value.substring(end);
textarea.selectionStart = start + emoji.length;
textarea.selectionEnd = start + emoji.length;
textarea.focus();
};
function updateCounters() {
const wordCount = textarea.value.trim().split(/\s+/).length;
const charCount = textarea.value.length;
wordCountDisplay.innerText = `Words: ${wordCount}`;
charCountDisplay.innerText = `Characters: ${charCount}`;
}
function saveDraft() {
localStorage.setItem('chatDraft', textarea.value);
}
function loadDraft() {
const draft = localStorage.getItem('chatDraft');
if (draft) {
textarea.value = draft;
}
}
function adjustTextareaHeight(increment) {
const currentHeight = parseInt(textarea.style.height, 10) || 100;
textarea.style.height = `${currentHeight + increment}px`;
}
function convertToGlitchText(style) {
const glitchTexts = {
zalgo: "Ḧ̷́͑͘ͅe̸̛͙̹͗ľ̴̙̿̔ľ̵̙̿̔o̵͍̬͗͘",
glitch: "Ģ̵̡̖͚̐̅͊̈̿̒̃͘͜ĺ̵̯̬̼̥͋i̷̗̙͓̳̼͓̳̞͉̳͋͌͑̓̀̓͗̓͠t̸̬̞̏͌͝c̸̢̤̤̈́͌͗h̵̛̫͉̬̤̑̌̽͂͌̚͜",
corrupted: "Ç̵͝o̴͋ͅr̵̡̚ŕ̷̡ü̸̠p̸͚̊t̴͈̐e̵̝̎d̸̒̆",
distorted: "D̵̈́͑͘ͅi̸̛͙̹͗š̴̙̿̔t̴͍̬͗͘o̵͍̬͗͘r̸̫̍̊̓͝t̸̬̞̏͌͝e̸̛͙̹͗d̸̒̆",
weird: "Ẅ̵́͑͘ͅe̸̛͙̹͗i̷̗̙͓̳̼͓̳̞͉̳͋͌͑̓̀̓͗̓͠ř̴̙̿̔d̸̒̆",
weird2: "̼͙̼͙̼͙̼͙̈́͆̈́ͯ̒̆̀̓ͧ̈́͆̈́ͯ̒̆̀̓ͧ̈́͆̈́ͯ̒̆̀̓ͧ͠͠͠",
weird3: "ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎"
};
textarea.value = glitchTexts[style];
}
function convertToFancyText(style) {
const fancyTexts = {
fancy1: "𝓗𝓮𝓵𝓵𝓸",
fancy2: "𝕳𝕰𝕷𝕷𝕺",
fancy3: "𝐇𝐞𝐥𝐥𝐨",
fancy4: "𝑯𝑬𝑳𝑳𝑶",
fancy5: "𝒽𝑒𝓁𝓁𝑜",
fancy6: "𝔥𝔢𝔩𝔩𝔬",
fancy7: "𝕙𝕖𝕝𝕝𝕠",
fancy8: "𝖧𝖤𝖫𝖫𝖮",
fancy9: "𝗛𝗘𝗟𝗟𝗢",
fancy10: "𝘏𝘌𝘓𝘓𝘖"
};
textarea.value = textarea.value.split('').map(char => fancyTexts[style][char] || char).join('');
}
const fillButton = document.createElement('button');
fillButton.innerText = "F";
fillButton.className = "btn btn-outline-secondary btn-sm";
fillButton.style.padding = "1px 5px";
fillButton.onclick = fillTextareaWithBlankLines;
const clearButton = document.createElement('button');
clearButton.innerText = "C";
clearButton.className = "btn btn-outline-secondary btn-sm";
clearButton.style.padding = "1px 5px";
clearButton.onclick = clearTextarea;
const boldButton = document.createElement('button');
boldButton.innerText = "B";
boldButton.className = "btn btn-outline-secondary btn-sm";
boldButton.style.padding = "1px 5px";
boldButton.onclick = () => wrapSelection('**', '**');
const italicButton = document.createElement('button');
italicButton.innerText = "I";
italicButton.className = "btn btn-outline-secondary btn-sm";
italicButton.style.padding = "1px 5px";
italicButton.onclick = () => wrapSelection('*', '*');
const strikeButton = document.createElement('button');
strikeButton.innerText = "S";
strikeButton.className = "btn btn-outline-secondary btn-sm";
strikeButton.style.padding = "1px 5px";
strikeButton.onclick = () => wrapSelection('~~', '~~');
const emojiButton = document.createElement('button');
emojiButton.innerText = "E";
emojiButton.className = "btn btn-outline-secondary btn-sm";
emojiButton.style.padding = "1px 5px";
emojiButton.onclick = openEmojiPicker;
const saveButton = document.createElement('button');
saveButton.innerText = "Save";
saveButton.className = "btn btn-outline-secondary btn-sm";
saveButton.style.padding = "1px 5px";
saveButton.onclick = saveDraft;
const loadButton = document.createElement('button');
loadButton.innerText = "Load";
loadButton.className = "btn btn-outline-secondary btn-sm";
loadButton.style.padding = "1px 5px";
loadButton.onclick = loadDraft;
const increaseHeightButton = document.createElement('button');
increaseHeightButton.innerText = "+";
increaseHeightButton.className = "btn btn-outline-secondary btn-sm";
increaseHeightButton.style.padding = "1px 5px";
increaseHeightButton.onclick = () => adjustTextareaHeight(20);
const decreaseHeightButton = document.createElement('button');
decreaseHeightButton.innerText = "-";
decreaseHeightButton.className = "btn btn-outline-secondary btn-sm";
decreaseHeightButton.style.padding = "1px 5px";
decreaseHeightButton.onclick = () => adjustTextareaHeight(-20);
const zalgoButton = document.createElement('button');
zalgoButton.innerText = "Zalgo";
zalgoButton.className = "btn btn-outline-secondary btn-sm";
zalgoButton.style.padding = "1px 5px";
zalgoButton.onclick = () => convertToGlitchText('zalgo');
const glitchButton = document.createElement('button');
glitchButton.innerText = "Glitch";
glitchButton.className = "btn btn-outline-secondary btn-sm";
glitchButton.style.padding = "1px 5px";
glitchButton.onclick = () => convertToGlitchText('glitch');
const corruptedButton = document.createElement('button');
corruptedButton.innerText = "Corrupted";
corruptedButton.className = "btn btn-outline-secondary btn-sm";
corruptedButton.style.padding = "1px 5px";
corruptedButton.onclick = () => convertToGlitchText('corrupted');
const distortedButton = document.createElement('button');
distortedButton.innerText = "Distorted";
distortedButton.className = "btn btn-outline-secondary btn-sm";
distortedButton.style.padding = "1px 5px";
distortedButton.onclick = () => convertToGlitchText('distorted');
const weirdButton = document.createElement('button');
weirdButton.innerText = "Weird";
weirdButton.className = "btn btn-outline-secondary btn-sm";
weirdButton.style.padding = "1px 5px";
weirdButton.onclick = () => convertToGlitchText('weird');
const weird2Button = document.createElement('button');
weird2Button.innerText = "Weird2";
weird2Button.className = "btn btn-outline-secondary btn-sm";
weird2Button.style.padding = "1px 5px";
weird2Button.onclick = () => convertToGlitchText('weird2');
const weird3Button = document.createElement('button');
weird3Button.innerText = "Weird3";
weird3Button.className = "btn btn-outline-secondary btn-sm";
weird3Button.style.padding = "1px 5px";
weird3Button.onclick = () => convertToGlitchText('weird3');
const fancyButton = document.createElement('button');
fancyButton.innerText = "Fancy";
fancyButton.className = "btn btn-outline-secondary btn-sm";
fancyButton.style.padding = "1px 5px";
fancyButton.onclick = () => convertToFancyText('fancy1');
const wordCountDisplay = document.createElement('span');
wordCountDisplay.style.marginLeft = '10px';
const charCountDisplay = document.createElement('span');
charCountDisplay.style.marginLeft = '10px';
textarea.addEventListener('input', updateCounters);
function appendButtonsNextToHome() {
const homeButton = document.querySelector('#homebutton');
if (homeButton) {
homeButton.parentNode.insertBefore(fillButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(clearButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(boldButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(italicButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(strikeButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(emojiButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(saveButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(loadButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(increaseHeightButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(decreaseHeightButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(zalgoButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(glitchButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(corruptedButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(distortedButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(weirdButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(weird2Button, homeButton.nextSibling);
homeButton.parentNode.insertBefore(weird3Button, homeButton.nextSibling);
homeButton.parentNode.insertBefore(fancyButton, homeButton.nextSibling);
homeButton.parentNode.insertBefore(wordCountDisplay, homeButton.nextSibling);
homeButton.parentNode.insertBefore(charCountDisplay, homeButton.nextSibling);
}
}
appendButtonsNextToHome();
updateCounters();
// Hotkeys
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.shiftKey && event.key === 'B') {
wrapSelection('**', '**');
} else if (event.ctrlKey && event.shiftKey && event.key === 'I') {
wrapSelection('*', '*');
} else if (event.ctrlKey && event.shiftKey && event.key === 'S') {
wrapSelection('~~', '~~');
} else if (event.ctrlKey && event.shiftKey && event.key === 'C') {
clearTextarea();
} else if (event.ctrlKey && event.shiftKey && event.key === 'F') {
fillTextareaWithBlankLines();
} else if (event.ctrlKey && event.shiftKey && event.key === 'E') {
openEmojiPicker();
} else if (event.ctrlKey && event.shiftKey && event.key === 'Z') {
convertToGlitchText('zalgo');
} else if (event.ctrlKey && event.shiftKey && event.key === 'G') {
convertToGlitchText('glitch');
} else if (event.ctrlKey && event.shiftKey && event.key === 'R') {
convertToGlitchText('corrupted');
} else if (event.ctrlKey && event.shiftKey && event.key === 'D') {
convertToGlitchText('distorted');
} else if (event.ctrlKey && event.shiftKey && event.key === 'W') {
convertToGlitchText('weird');
} else if (event.ctrlKey && event.shiftKey && event.key === 'W2') {
convertToGlitchText('weird2');
} else if (event.ctrlKey && event.shiftKey && event.key === 'W3') {
convertToGlitchText('weird3');
} else if (event.ctrlKey && event.shiftKey && event.key === 'T') {
convertToFancyText('fancy1');
} else if (event.ctrlKey && event.shiftKey && event.key === 'ArrowUp') {
adjustTextareaHeight(20);
} else if (event.ctrlKey && event.shiftKey && event.key === 'ArrowDown') {
adjustTextareaHeight(-20);
} else if (event.key === 'F1') {
convertToFancyText('fancy1');
} else if (event.key === 'F2') {
convertToFancyText('fancy2');
} else if (event.key === 'F3') {
convertToFancyText('fancy3');
} else if (event.key === 'F4') {
convertToFancyText('fancy4');
} else if (event.key === 'F5') {
convertToFancyText('fancy5');
}
});
}
});
})();