Twitter hide content warning crap

Hide that annoying box. Also get rid of that blur filter.

当前为 2022-04-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Twitter hide content warning crap
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.7
  5. // @description Hide that annoying box. Also get rid of that blur filter.
  6. // @author You
  7. // @match https://*.twitter.com/*
  8. // @icon https://www.google.com/s2/favicons?domain=twitter.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12. /* jshint esversion: 6 */
  13.  
  14. (function() {
  15. 'use strict';
  16. setInterval(function ()
  17. {
  18. document.querySelectorAll('a[href*="appeal_tweet_warning"]').forEach(node => node.closest('div.r-14gqq1x').remove());
  19. document.querySelectorAll('div[role="button"].r-173mn98').forEach(node => node.click());
  20. document.querySelectorAll('div[role="button"].r-e1k2in').forEach(node => node.remove());
  21. }, 250);
  22.  
  23. // Wrap this entire call so that we do not disrupt the website with errors.
  24. let safe_call = function(fn, arg)
  25. {
  26. try
  27. {
  28. fn(arg);
  29. }
  30. catch
  31. {
  32. }
  33. };
  34.  
  35. let legacy_data_mod = function(legacy)
  36. {
  37. legacy.possibly_sensitive = false;
  38. let media_data = legacy.extended_entities.media;
  39. for (let media of media_data)
  40. {
  41. delete media.sensitive_media_warning;
  42. }
  43. };
  44.  
  45. let timeline_entries_mod = function(entries)
  46. {
  47. for (let entry of entries)
  48. {
  49. let legacy = entry?.content?.itemContent?.tweet_results?.result?.legacy;
  50. safe_call(legacy_data_mod, legacy);
  51. safe_call(legacy_data_mod, legacy?.retweeted_status_result?.result?.legacy);
  52. }
  53. }
  54.  
  55. let media_mod = function(tw_response)
  56. {
  57. let entries = tw_response.data.user.result.timeline_v2.timeline.instructions[0].entries;
  58. timeline_entries_mod(entries);
  59. };
  60.  
  61. let tweets_mod = function(tw_response)
  62. {
  63. let entries = tw_response.data.user.result.timeline.timeline.instructions[0].entries;
  64. timeline_entries_mod(entries);
  65. };
  66.  
  67. let tweet_detail_mod = function(tw_response)
  68. {
  69. let entries = tw_response.data.threaded_conversation_with_injections.instructions[0].entries;
  70. timeline_entries_mod(entries);
  71. };
  72.  
  73. // Modifying data on the home page is not working. I'm not sure what field twitter is looking at,
  74. // but these are the only reasonable ones that I could find. The above "click" will hand any leftovers.
  75. let tweet_data_mod = function(tweet)
  76. {
  77. tweet.possibly_sensitive = false;
  78. let media_data = tweet.extended_entities.media;
  79. for (let media of media_data)
  80. {
  81. media.ext_sensitive_media_warning = null;
  82. }
  83. };
  84.  
  85. let global_mod = function(tw_response)
  86. {
  87. for (let tweet in tw_response.globalObjects.tweets)
  88. {
  89. safe_call(tweet_data_mod, tweet);
  90. }
  91. };
  92.  
  93. // Intercept JSON parses to alter the sensitive media data.
  94. let old_parse = JSON.parse;
  95. JSON.parse = function(string)
  96. {
  97. let data = old_parse(string);
  98. safe_call(media_mod, data);
  99. safe_call(tweets_mod, data);
  100. safe_call(tweet_detail_mod, data);
  101. safe_call(global_mod, data);
  102. return data;
  103. };
  104. })();