// ==UserScript== // @name Twitter Block With Love // @namespace https://www.eolstudy.com // @version 1.0 // @description Block all users who love a certain tweet // @author Eol // @run-at document-end // @match https://twitter.com/* // @require https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js // @require https://cdn.jsdelivr.net/npm/qs/dist/qs.min.js // @require https://code.jquery.com/jquery-3.4.1.min.js // @require https://greasyfork.org/scripts/2199-waitforkeyelements/code/waitForKeyElements.js?version=6349 // @downloadURL none // ==/UserScript== /* global axios $ Qs waitForKeyElements*/ (_ => { function get_cookie (cname) { var name = cname + "=" var ca = document.cookie.split(';') for(var i=0; i 1234567/anything => 1234567 return location.href.split('status/')[1].split('/')[0] } async function fetch_likers (tweetId) { const users = await ajax.get(`/2/timeline/liked_by.json?tweet_id=${tweetId}`).then( res => res.data.globalObjects.users ) let likers = [] for (let user in users) { likers.push(users[user].id_str) } return likers } function block_user (id) { ajax.post('/1.1/blocks/create.json', Qs.stringify({ user_id: id }), { headers: { "Content-Type":'application/x-www-form-urlencoded' } }) } async function block_all_likers () { const tweet_id = get_tweet_id() const likers = await fetch_likers(tweet_id) likers.forEach(id => block_user(id)) } function clear_view () { const container = $('div[aria-label="Timeline: Liked by"]') container.children().fadeOut(400, _ => { const notice = $(`
All Users Blocked!
`) container.append(notice) }) } function mount_block_button (dom) { const btn_mousedown = 'bwl-btn-mousedown' const btn_hover = 'bwl-btn-hover' $('head').append(` `) const button = $(`
Block All
`) .addClass(dom.prop('classList')[0]) .hover(function () { $(this).addClass(btn_hover) }, function () { $(this).removeClass(btn_hover) $(this).removeClass(btn_mousedown) }) .on('selectstart', function () { return false }) .mousedown(function () { $(this).removeClass(btn_hover) $(this).addClass(btn_mousedown) }) .mouseup(function () { $(this).removeClass(btn_mousedown) if ($(this).is(':hover')) { $(this).addClass(btn_hover) } }) .click(block_all_likers) .click(clear_view) dom.append(button) } function main () { waitForKeyElements('h2:has(> span:contains(Liked by))', dom => { mount_block_button(dom.parent().parent().parent()) }) } main() })()