Discord encryption

Encrypt and decrypt messages on Discord on the fly.

目前为 2019-02-21 提交的版本。查看 最新版本

// ==UserScript==
// @name         Discord encryption
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Encrypt and decrypt messages on Discord on the fly.
// @author       You
// @match        https://discordapp.com/channels/477776237964689432/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js
// @grant        none
// ==/UserScript==

var password = "adfaldskfjlkadsf";

// Replace any messages we manage to decrypt.
function decryptDiscordMessages(password) {
    var nodes = document.getElementsByClassName('markup-2BOw-j');
    for (var i = nodes.length; i--;) {
        var text = nodes[i].innerText;
        var decrypted = CryptoJS.AES.decrypt(text, password);
        try {
            var message = decrypted.toString(CryptoJS.enc.Utf8);
            if (message == "") continue;
            nodes[i].innerHTML = '<div style="color:red">' + message + '</div>';
        } catch (error) {}
    }
}
function registerObserver() {
    var targetNode = document.getElementsByClassName('messagesWrapper-3lZDfY')[0];
    if (targetNode == undefined) {
        setTimeout(registerObserver, 10);
        return;
    }

    var config = { childList: true, subtree: true };
    var callback = function(mutationsList, observer) {
        for(var mutation of mutationsList) {
            if (mutation.type != 'childList') return;
            decryptDiscordMessages(password);
        }
    };
    var observer = new MutationObserver(callback);
    observer.observe(targetNode, config);
}
registerObserver();

function registerMessageHook() {
    setTimeout(registerMessageHook, 10);
    var targetNode = document.getElementsByClassName('textArea-2Spzkt')[0];
    if (targetNode == undefined) return;

    targetNode.onkeydown = function(e){
        var message = targetNode.value;
        if (message.endsWith('/') && e.keyCode == 191) {
            message = message.slice(0, -1);
            console.log(message);
            var cypher = CryptoJS.AES.encrypt(message, password);
            targetNode.value = cypher;
        }
    };
}
registerMessageHook();