Greasy Fork is available in English.

Remover Chat da Twitch

remove todas as mensagens do chat da Twitch em um clique

2021-05-23 يوللانغان نەشرى. ئەڭ يېڭى نەشرىنى كۆرۈش.

// ==UserScript==
// @name      Remover Chat da Twitch
// @name:en   Remove Twitch Chat
// @version      1.7
// @description  remove todas as mensagens do chat da Twitch em um clique
// @description:en  remove all twitch chat messages in a click
// @author       raianwz
// @icon         https://i.imgur.com/E0el9Xh.png
// @exclude      *://*.twitch.tv/moderator/*
// @exclude      *://*.twitch.tv/popout/*/reward-queue*
// @exclude      *://*.twitch.tv/popout/*/poll*
// @exclude      *://*.twitch.tv/popout/*/predictions*
// @exclude      https://player.twitch.tv/*
// @match        https://www.twitch.tv/*
// @namespace    https://greasyfork.org/users/425245
// @license MIT
// ==/UserScript==
let url = window.location.href
let getElement = (e) => document.querySelector(e)

setTimeout(function(){CheckTrash();},6*1000);

function CheckTrash(){if(!getElement("[name='btn-remove']")){setTimeout(()=>{LoadTrash(url);CheckTrash();},5*1000)}};

function LoadTrash(url){
    const lang = document.documentElement.lang;
    if(url.includes('twitch.tv/popout/') || url.includes('twitch.tv/embed/')){
        let where = getElement('div.sc-AxjAm .kMdGHS');
        createTrash("afterbegin", where, 'hLwRIp dmuepD')
    }else{let where = getElement('.top-nav__prime'); createTrash("beforeBegin", where, 'flLJtd')}

function createTrash(start,where,position){
    let btnName = "?"
    lang!="pt-BR"? btnName="Remove Chat" : btnName="Remover Chat"
    const trash = `<div class="sc-AxjAm iJZwey" name="btn-remove"><div class="sc-AxjAm FYQnE"><div><div class="sc-AxjAm dUcKR"> <div class="sc-AxjAm ScAttachedTooltipWrapper-v8mg6d-0 dLtTlU">
    <button id="bremove" class="ScCoreButton-sc-1qn4ixc-0 iyLrol ScButtonIcon-o7ndmn-0 hSxEIC"><div class="ScButtonIconFigure-o7ndmn-1 dfPonN"><div class="ScIconLayout-sc-1bgeryd-0 kbOjdP tw-icon">
    <div class="ScAspectRatio-sc-1sw3lwy-1 dNNaBC tw-aspect"><div class="ScAspectSpacer-sc-1sw3lwy-0 gkBhyN"></div><svg width="100%" height="100%" version="1.1" viewBox="0 0 20 20" x="0px" y="0px" class="ScIconSVG-sc-1bgeryd-1 cMQeyU">
    <g><path fill-rule="evenodd"d="M12 2H8v1H3v2h14V3h-5V2zM4 7v9a2 2 0 002 2h8a2 2 0 002-2V7h-2v9H6V7H4z M11 7H9v7h2V7z"clip-rule="evenodd"></path> </g></svg></div></div></div></button>
    <div class="ScAttachedTooltip-v8mg6d-1 ${position} tw-tooltip" role="tooltip">${btnName}</div></div></div></div></div>`
	where.insertAdjacentHTML(`${start}`,`${trash}`)
	getElement('#bremove').addEventListener("click", () => {const chat = getElement('.chat-scrollable-area__message-container'); chat.parentNode.id ="chatMsg"; setTimeout(()=>{chat.remove(); TipRestore(chat);},200)})
};

function TipRestore(chat){
if(!url.includes('twitch.tv/popout/')){
    let msg = {name:'Dica', prf1: 'Para restaurar o chat e as mensagens vá para ', prf2: 'Configurações de Chat', prf3: 'Ocultar Chat', prf4: 'e depois clique em', prf5: 'Mostrar Chat', prf6: 'Para deletar está mensagem', prf7:'clique aqui', prf8: "ou Clique aqui para restaurar" }
    if(lang != "pt-BR") { msg = {name:'Tip', prf1: 'To restore chat and messages go to ', prf2: 'Chat Settings', prf3: 'Hide Chat', prf4: 'and then click', prf5: 'Show Chat', prf6: 'To delete this message', prf7:'click here', prf8: "or Just click here to restore" }}
    const tipMsg = `<div class="chat-line__message" data-a-target="chat-line-message" name="Tmsg" data-test-selector="chat-line-message" tabindex="0"><div class="tw-relative"><div class="tw-relative"><div class=""><div class="chat-line__no-background tw-inline"><div class="chat-line__username-container tw-inline-block">
<span><img alt="AutoModerador" class="chat-badge" src="https://static-cdn.jtvnw.net/badges/v1/df9095f6-a8a0-4cc2-bb33-d908c0adffb8/1"></span><span class="chat-line__username" tabindex="0"><span><span style="color: rgb(0 173 3);" class="chat-author__display-name" data-test-selector="message-username">${msg.name}</span>
</span></span></div><span data-test-selector="chat-message-separator">: </span><span class="text-fragment" data-a-target="chat-message-text"><span>${msg.prf1}<strong> ${msg.prf2}</strong><div class="chat-line__message--emote-button"><span data-a-target="emote-name"><div class="chat-image__container tw-align-center tw-inline-block">
<img alt="Settings" class="chat-image chat-line__message--emote" src="https://i.imgur.com/IiyiIfg.png"></div></span></div>--&gt;<strong>${msg.prf3}</strong> ${msg.prf4} <strong>${msg.prf5}</strong> <em id="restore" style="cursor: pointer;color: #a970ff;">${msg.prf8}</em>. ${msg.prf6} <button id="clsMsg" class="ScCoreLink-udwpw5-0 hiykSn link-fragment tw-link";">${msg.prf7}&#x274C</button>
</span></span></div></div></div></div></div>`
     getElement('#chatMsg').innerHTML = `${tipMsg}`;
     getElement('img[alt="Settings"]').addEventListener("click", () => chatRestore());
     getElement('em#restore').addEventListener("click", () => chatRestore());
     getElement('#clsMsg').addEventListener("click", () => getElement('[name="Tmsg"]').remove());
}};
console.log('Twitch Remove is Enable')
}

async function chatRestore(){
    let sleep = m => new Promise(r => setTimeout(r, m));
    getElement('[data-a-target="chat-settings"]').click();
    await sleep(100)
    if(getElement('[data-a-target="switch-chat-settings-mode"]')){getElement('[data-a-target="switch-chat-settings-mode"]').click(); await sleep(40);}
    getElement('[data-a-target="hide-chat-button"]').click()
    await sleep(40)
    getElement('[data-a-target="show-chat-button"]').click()
    await sleep(3000)
    CheckTrash()
}