[Скрипты] Скрипт запускающий по экрану сосиски когда Granger постит новость

По многочисленным просьбам трудящихся

// ==UserScript== // @name DTF Granger Posts Notification // @namespace ¯\_(ツ)_/¯ // @match https://dtf.ru/* // @version 0.2.0 // @author ¯\_(ツ)_/¯ // @description ¯\_(ツ)_/¯ // @require https://cdn.socket.io/socket.io-2.3.1.js // ==/UserScript== (() => { const IMG_SRC = 'https://leonardo.osnova.io/301f1912-565d-5aeb-ac1e-838f9afe89b9'; const IMG_W = 259; const IMG_H = 76; const AUDIO_SRC = 'https://leonardo.osnova.io/audio/29a0a046-7d25-5b86-b54a-d8cc48caab63/stado-sviney-hryukaet-v-zagone-37004.mp3'; let AUDIO; let LAST_ENTRY_ID; let SOUSAGE; const DEBUG = false; const LOG_NAME = `DTF Granger News Notification`; const _log = DEBUG ? function(d) { console.log(`${LOG_NAME}:`); console.log(d); } : ()=>{}; window.addEventListener('load', async () => { AUDIO = document.createElement('audio'); AUDIO.src = AUDIO_SRC; document.body.append(AUDIO); SOUSAGE = document.createElement('a'); SOUSAGE.href = `javascript:void(0)`; SOUSAGE.style = `position: absolute; left: -9999px; top: -9999px; z-index:9999;`; let img_elem = document.createElement('img'); img_elem.src = IMG_SRC; img_elem.style = `width: ${IMG_W}px; height: ${IMG_H}px;`; SOUSAGE.append(img_elem); }) const socket = io('https://ws-sio.dtf.ru', { transports: ['websocket'] }); socket.emit('subscribe', {'channel': 'api'}); socket.on('connect', () => { _log('Connected to Socket'); }); socket.on('disconnect', (reason) => { _log("client disconnected"); if (reason === 'io server disconnect') { _log("server disconnected the client, trying to reconnect"); socket.connect(); } else { _log("trying to reconnect again with server"); } }); socket.on('connect_error', (err) => { _log(`connect_error due to ${err.message}`); }); socket.on('error', (error) => { _log(error); }); socket.on('event', (event) => { socket_event(event); }); function granger_post_notification() { AUDIO.play(); for(let i=0; i<100; i++) { create_falling_sousage(); } } function create_falling_sousage() { let a_elem = SOUSAGE.cloneNode(true); a_elem.href = `https://dtf.ru/${LAST_ENTRY_ID}`; document.body.append(a_elem); let start_x = random_in_range(0,1); let start_y = random_in_range(-0.6,0); let end_y = random_in_range(1,1.6); let speed = Math.random()*0.002 + 0.005; let pos = 0; a_elem.style.left = Math.floor(start_x * (document.documentElement.clientWidth-IMG_W)) + 'px'; let interval = setInterval(()=>{ a_elem.style.top = Math.floor((start_y+(end_y-start_y)*pos) * (document.documentElement.clientHeight) + document.documentElement.scrollTop) + 'px'; pos += speed; if (pos>1) { clearInterval(interval); a_elem.remove(); } },33); } function random_in_range(min, max) { return Math.random() * (max - min) + min; } function socket_event(event) { if (event.data.type === 'new_entry_published' && event.data.author_subsite_id === 227251) { LAST_ENTRY_ID = event.data.content_id; granger_post_notification(); } } })();

Пост опубликован чисто в образовательных целях и не преследует целью кого-то оскорбить.

58
11
8
4
1
1
1
29 комментариев