Hide blocked user in Youtube Live

Dynamically hiding blocked users' chats in Youtube live. Youtubeのライブでブロック済みのユーザのチャットを動的に非表示に変更

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
  1. // ==UserScript==
  2. // @name Hide blocked user in Youtube Live
  3. // @namespace https://twitter.com/rin_jugatla
  4. // @version 0.2.1
  5. // @description Dynamically hiding blocked users' chats in Youtube live. Youtubeのライブでブロック済みのユーザのチャットを動的に非表示に変更
  6. // @author rin_jugatla
  7. // @match https://www.youtube.com/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. // ブロックしたユーザの確認
  12. // https://myaccount.google.com/blocklist
  13.  
  14. // 【Javascript】XPathを使う(document.evaluate)
  15. // https://www.softel.co.jp/blogs/tech/archives/2067
  16. document.getElementsByXPath = function (expression, parentElement) {
  17. var r = []
  18. var x = document.evaluate(expression, parentElement || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
  19. for (var i = 0, l = x.snapshotLength; i < l; i++) {
  20. r.push(x.snapshotItem(i))
  21. }
  22. return r
  23. }
  24.  
  25. // ページの読み込み完了後処理
  26. window.addEventListener('load', function () {
  27.  
  28. function hideAny()
  29. {
  30. hideBlockedUser();
  31. hideCard();
  32. }
  33.  
  34. function hideBlockedUser() {
  35. // 非表示でないブロック済みのメッセージのみ取得するXPath
  36. var targetsXPath = '//yt-live-chat-text-message-renderer[@class="style-scope yt-live-chat-item-list-renderer" and not(@style="display: none;")]/div[@id="content"]/span[@id="deleted-state" and not(text() = "")]';
  37. var targets = document.getElementsByXPath(targetsXPath);
  38. for(var i = 0; i < targets.length; i++)
  39. {
  40. targets[i].parentElement.parentElement.style = "display: none;";
  41. }
  42. }
  43.  
  44. function hideCard(){
  45. // 非表示でないチャットガイドラインカードを取得するXPath
  46. // 「チャットへようこそ!ご自身のプライバシーを守るとともに、YouTube のコミュニティ ガイドラインを遵守することを忘れないでください。」
  47. var targetsXPath = '//yt-live-chat-viewer-engagement-message-renderer[@class="style-scope yt-live-chat-item-list-renderer" and not(@style="display: none;")]';
  48. var targets = document.getElementsByXPath(targetsXPath);
  49. for(var i = 0; i < targets.length; i++)
  50. {
  51. targets[i].style = "display: none;";
  52. }
  53. }
  54.  
  55. // フック
  56. var mo = new MutationObserver(hideAny);
  57. var watchTree = document.getElementsByXPath('//div[@id="items" and @class="style-scope yt-live-chat-item-list-renderer"]')[0]
  58. mo.observe(watchTree, { childList: true });
  59. }, false);