Greasy Fork

Picarto.tv ignore

Ignore users on Picarto.tv channel chats.

目前为 2015-09-30 提交的版本。查看 最新版本

// ==UserScript==
// @name        Picarto.tv ignore
// @namespace   picarto.tv.ignore.stuff.dasprids.de
// @description Ignore users on Picarto.tv channel chats.
// @include     https://picarto.tv/*
// @version     3
// @grant       none
// ==/UserScript==

try {
  var blockedUsers = JSON.parse(window.localStorage.getItem('blockedUsers'));
} catch (e) {
  var blockedUsers = [];
}

// Handle ignores
var checkMessage = function($node, username, hide) {
  // Normal messages
  if ($node.hasClass('um-' + username.toLowerCase())) {
    hide ? $node.hide() : $node.show();
    return;
  }

  // Action messages
  if ($node.hasClass('messageli') && $node.find('img[title="' + username + '"]').length > 0) {
    hide ? $node.hide() : $node.show();
    return;
  }

  // Whisper messages
  if ($node.hasClass('whisperli') && $node.find('span[title="whisper ' + username + '"]').length > 0) {
    hide ? $node.hide() : $node.show();
    return;
  }
}

var hideIgnoredMessage = function(node) {
  var $node = window.jQuery(node);

  blockedUsers.forEach(function(username) {
    checkMessage($node, username, true);
  });
}

var observer = new MutationObserver(function(mutations) {
  for (var i = 0; i < mutations.length; ++i) {
    for (var j = 0; j < mutations[i].addedNodes.length; ++j) {
      hideIgnoredMessage(mutations[i].addedNodes[j]);
    }
  }
});

var targetNode = document.getElementById('msgs');

if (targetNode) {
  observer.observe(targetNode, {
    childList: true
  });
  
  window.jQuery('#msgs > li').each(function() {
    hideIgnoredMessage(this);
  });
}

// Handle toolbox
var handleToolbox = function(node) {
  var $node = window.jQuery(node);
  
  if ($node.attr('id') !== 'toolsDiv') {
    return;
  }
  
  var username = $node.find('#toolsUsername').text();
  var blocked  = window.jQuery.inArray(username, blockedUsers) > -1;
  
  var button = window.jQuery('<button id="toolsIgnore" class="toolButtons"/>');
  button.text(blocked ? 'Unblock' : 'Block');
  $node.append(button);

  button.on('click', function() {
    if (blocked) {
      blockedUsers.splice(window.jQuery.inArray(username, blockedUsers), 1);
      button.text('Block');
    } else {
      blockedUsers.push(username);
      button.text('Unblock');
    }
    
    blocked = !blocked;
    
    window.jQuery('#msgs > li').each(function() {
      checkMessage($(this), username, blocked);
    });
    
    window.localStorage.setItem('blockedUsers', JSON.stringify(blockedUsers));
  });
}

var observer = new MutationObserver(function(mutations) {
  for (var i = 0; i < mutations.length; ++i) {
    for (var j = 0; j < mutations[i].addedNodes.length; ++j) {
      handleToolbox(mutations[i].addedNodes[j]);
    }
  }
});

var targetNode = document.getElementById('channel_chat');

if (targetNode) {
  observer.observe(targetNode, {
    childList: true
  });
}