Gamdom Notify

Rain Notifications

目前為 2018-02-16 提交的版本,檢視 最新版本

作者
Pytness
評價
0 0 0
版本
2.3.0.1
建立日期
2017-11-26
更新日期
2018-02-16
尺寸
3.1 KB
授權條款
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
腳本執行於

// ==UserScript==
// @name Gamdom Notify
// @description Rain Notifications
// @version 2.3.0.1
// @author Pytness
// @match *://gamdom.com/*
// @namespace https://greasyfork.org/scripts/35717-gamdom-notify/
// @update https://greasyfork.org/scripts/35717-gamdom-notify/code/Gamdom%20Notify.user.js
// @resource CoinAudioData https://raw.githubusercontent.com/Pytness/Gamdom-Notify/master/CoinSound.mp3
// @run-at document-start
// @grant GM_info
// @grant GM_notification
// @grant GM_getResourceURL
// @grant unsafeWindow
// @license Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
// ==/UserScript==

(function (w) {

'use strict';

const log = w.console.log.bind();

// NOTE: Creates a ascii box
const box = (a, b = 0) => {
let d, c = '';
a.forEach(e => b = e.length > b ? e.length : b);
d = '+'.padEnd(b, '=') + '+';
a.forEach(e => c += '|' + e.padEnd(b - 1, ' ') + '|\n');
return d + '\n' + c + d;
};

///////////////////////////////////////////////////////////////////////////

const initMessage = box([
' Gamdom Rain Notify:', '',
' Ver: ' + GM_info.script.version,
' By ' + GM_info.script.author, '',
], 40);

const NData = { // Notification data
title: "Gamdom Rain Notify:",
text: "its raining :D",
highlight: true,
timeout: 5000
};

///////////////////////////////////////////////////////////////////////////

const CoinAudioData = GM_getResourceURL('CoinAudioData')
.replace('application', 'audio/mp3');

const CoinSound = new Audio(CoinAudioData); // Load Audio

const notificate = () => {
CoinSound.play();
GM_notification(NData);
};

///////////////////////////////////////////////////////////////////////////

const extractData = (a, b = false) => {
try {
b = JSON.parse(a.split(',').slice(1).join());
} finally {
return b;
}
};

const manageMessages = (a) => {
var b = extractData(a.data);
if(b[0] == 'activateRain') notificate();
};

///////////////////////////////////////////////////////////////////////////

/* NOTE: HijackWebsocket is imported (and modified)
* from https://github.com/Pytness/Hijack-Websocket
*/

const HijackWebsocket = () => {

const WS = w.WebSocket;
w.WebSocket = function (...argv) {
let hws = new WS(...argv);
hws.addEventListener('message', manageMessages);
log('Intercepted new WebSocket conection', 'info');
return hws;
};

log('WebSocket constructor hijacked', 'ok');

w.WebSocket.prototype = WS.prototype;
w.WebSocket.__proto__ = WS.__proto__;

const METHODS = ['toString', 'toSource', 'valueOf'];

METHODS.forEach(value => {
w.WebSocket.__defineGetter__(value, () => function () {
return WS[value]();
});
});

log('Hijacked WebSocket secured', 'ok');
log('Waiting for WebSocket creation...', 'info');
};


///////////////////////////////////////////////////////////////////////////

const init = () => {
// NOTE: Log on console Script info
log(initMessage);

// NOTE: Hijack the WebSocket constructor
HijackWebsocket();
};

init();

}(unsafeWindow));