[Скрипты] Скрипт запускающий по экрану сосиски когда 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();
}
}
})();
Пост опубликован чисто в образовательных целях и не преследует целью кого-то оскорбить.
29 комментариев