diff --git a/src/junk/awakensbridge.js b/src/junk/awakensbridge.js new file mode 100644 index 0000000..dc472b8 --- /dev/null +++ b/src/junk/awakensbridge.js @@ -0,0 +1,203 @@ +global.awakensBridge = {} +awakensBridge.connect = function (uri, options) { + var io = require('socket.io-client'); + var channel = new Discord.WebhookClient('342850770594562060', config.webhooks.awakens, {disableEveryone:true} ); + this.channel = channel; + //test//var channel = new Discord.WebhookClient('399378912020529153', 'wdVr8ZvssmX9IF4cqS9dq3pxTUX9a9dNGN6Pusu5AzX60DQqBsWe6qxLagrFPgxksJQI', {disableEveryone:true} ); + var socket = io(uri||`http://this.awakens.me`, options||{ + extraHeaders: { + 'cf-connecting-ip': randomIp() + } + }); + this.socket = socket; + + socket.on('connect', function() { + console.log('Connected to awakens.me'); + var ip = socket.io && socket.io.opts && socket.io.opts.extraHeaders && socket.io.opts.extraHeaders['cf-connecting-ip']; + channel.send(ip ? `**Connected with fake IP address \`${ip}\`**` : '**Connected**'); + socket.emit('requestJoin'); + }); + socket.on('disconnect', function() { + console.log('Disconnected from awakens.me'); + channel.send('**Disconnected**'); + }); + + var online = {}; + socket.on('channeldata', (channel) => { + if (channel.users) { + channel.users.forEach(user => { + online[user.id] = user.nick; + }); + } + }); + socket.on('nick', (id, newNick) => { + var str = `**\\*\\* ${online[id]} is now known as ${newNick} \\*\\***`; + //console.log(str); + channel.send(str); + online[id] = newNick; + }); + socket.on('joined', (id, nick) => { + var str = `**\\*\\* ${nick} has joined \\*\\***`; + //console.log(str); + channel.send(str); + online[id] = nick; + }); + socket.on('left', (id, part) => { + var str = `**\\*\\* ${online[id]} has left${part ? ": "+part : ""} \\*\\***`; + //console.log(str); + channel.send(str); + }); + + socket.on('message', function(messageData) { + switch (messageData.messageType) { + default: { + if (typeof messageData.message != 'string') return console.error(messageData); + let msg = messageData.nick ? `**${messageData.nick}:** ${filter(messageData.message)}` : `**\\*\\* ${messageData.message} \\*\\***`; + //console.log(msg); + channel.send(msg, {split:{char:''}}); + + /*if (messageData.message.startsWith("You've been kicked")) { + console.log('Kicked from ', socket.io.uri); + } + if (messageData.message.startsWith("You've been banned")) { + console.log('Banned from ', socket.io.uri); + }*/ + + if (messageData.message.startsWith("You've been kicked") || messageData.message.startsWith("You've been banned")) { + let ms = Math.random()*1000000; + setTimeout(function(){ + awakensBridge.connect(); // create new socket with different ip header + }, ms); + channel.send(`**Reconnecting in \`${ms/60000}\` minutes.**`); + } + + break; + } + case "chat-image": { + let msg = `**${messageData.nick}:**`; + let img = Buffer.from(messageData.message.img, 'binary'); + let attachment = new Discord.MessageAttachment(img, 'image.'+messageData.message.type.split('/')[1]); + channel.send(msg, attachment); + } + } + }); + + + /*client.on('message', message => { + if (message.author !== client.user && message.channel === channel) { + socket.emit('message', `/*${message.member.displayName}:| ${message.content}`); + } + });*/ + +} + + +awakensBridge.connect(); + + +///////////////////////////////////////////////////////////////////////// + +function filter(str) { + // escape + // Convert chars to html codes + //str = str.replace(/\n/g, '\\n'); + // str = str.replace(/&/gi, '&'); + // str = str.replace(/>/gi, '>'); + //str = str.replace(/'); + //str = str.replace(/\$/gi, '$'); + //str = str.replace(/'/gi, '''); + //str = str.replace(/~/gi, '~'); + + //convert spaces + //str = str.replace(/\s{2}/gi, '  '); + + //str = str.replace(/(
)(.+)/g, '
$2
'); + + var coloreg = 'yellowgreen|yellow|whitesmoke|white|wheat|violet|turquoise|tomato|thistle|teal|tan|steelblue|springgreen|snow|slategray|slateblue|skyblue|silver|sienna|seashell|seagreen|sandybrown|salmon|saddlebrown|royalblue|rosybrown|red|rebeccapurple|purple|powderblue|plum|pink|peru|peachpuff|papayawhip|palevioletred|paleturquoise|palegreen|palegoldenrod|orchid|orangered|orange|olivedrab|olive|oldlace|navy|navajowhite|moccasin|mistyrose|mintcream|midnightblue|mediumvioletred|mediumturquoise|mediumspringgreen|mediumslateblue|mediumseagreen|mediumpurple|mediumorchid|mediumblue|mediumaquamarine|maroon|magenta|linen|limegreen|lime|lightyellow|lightsteelblue|lightslategray|lightskyblue|lightseagreen|lightsalmon|lightpink|lightgreen|lightgray|lightgoldenrodyellow|lightcyan|lightcoral|lightblue|lemonchiffon|lawngreen|lavenderblush|lavender|khaki|ivory|indigo|indianred|hotpink|honeydew|greenyellow|green|gray|goldenrod|gold|ghostwhite|gainsboro|fuchsia|forestgreen|floralwhite|firebrick|dodgerblue|dimgray|deepskyblue|deeppink|darkviolet|darkturquoise|darkslategray|darkslateblue|darkseagreen|darksalmon|darkred|darkorchid|darkorange|darkolivegreen|darkmagenta|darkkhaki|darkgreen|darkgray|darkgoldenrod|darkcyan|darkblue|cyan|crimson|cornsilk|cornflowerblue|coral|chocolate|chartreuse|cadetblue|transparent|burlywood|brown|blueviolet|blue|blanchedalmond|black|bisque|beige|azure|aquamarine|aqua|antiquewhite|aliceblue'; + + // fonts + str = str.replace(/(\$|($))([\w \-\,®]*)\|(.*)$/g, "$4"); + str = str.replace(/(\£|(£))([\w \-\,®]*)\|(.*)$/g, "$4"); + + // colors + str = str.replace(/###([\da-f]{6}|[\da-f]{3})(.+)$/gi, '$2'); + str = str.replace(/##([\da-f]{6}|[\da-f]{3})(.+)$/gi, '$2'); + str = str.replace(/#([\da-f]{6}|[\da-f]{3})(.+)$/gi, '$2'); + str = str.replace(RegExp('###(' + coloreg + ')(.+)$', 'gi'), '$2'); + str = str.replace(RegExp('##(' + coloreg + ')(.+)$', 'gi'), '$2'); + str = str.replace(RegExp('#(' + coloreg + ')(.+)$', 'gi'), '$2'); + + // styles + str = str.replace(/\/\%%([^\%%]+)\%%/g, '$1'); + str = str.replace(/\/\^([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\*([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\%([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\_([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\-([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\~([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\#([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\+([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\!([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\$([^\|]+)\|?/g, '$1'); + str = str.replace(/\/\@([^\|]+)\|?/g, '$1'); + + return str; +} + +/* +function filter(str) { + var multiple = function (str, mtch, rep, limit) { + var ct = 0; + limit = limit || 3000; + while (str.match(mtch) !== null && ct++ < limit) { + str = str.replace(mtch, rep); + } + return str; + }; + var coloreg = 'yellowgreen|yellow|whitesmoke|white|wheat|violet|turquoise|tomato|thistle|teal|tan|steelblue|springgreen|snow|slategray|slateblue|skyblue|silver|sienna|seashell|seagreen|sandybrown|salmon|saddlebrown|royalblue|rosybrown|red|rebeccapurple|purple|powderblue|plum|pink|peru|peachpuff|papayawhip|palevioletred|paleturquoise|palegreen|palegoldenrod|orchid|orangered|orange|olivedrab|olive|oldlace|navy|navajowhite|moccasin|mistyrose|mintcream|midnightblue|mediumvioletred|mediumturquoise|mediumspringgreen|mediumslateblue|mediumseagreen|mediumpurple|mediumorchid|mediumblue|mediumaquamarine|maroon|magenta|linen|limegreen|lime|lightyellow|lightsteelblue|lightslategray|lightskyblue|lightseagreen|lightsalmon|lightpink|lightgreen|lightgray|lightgoldenrodyellow|lightcyan|lightcoral|lightblue|lemonchiffon|lawngreen|lavenderblush|lavender|khaki|ivory|indigo|indianred|hotpink|honeydew|greenyellow|green|gray|goldenrod|gold|ghostwhite|gainsboro|fuchsia|forestgreen|floralwhite|firebrick|dodgerblue|dimgray|deepskyblue|deeppink|darkviolet|darkturquoise|darkslategray|darkslateblue|darkseagreen|darksalmon|darkred|darkorchid|darkorange|darkolivegreen|darkmagenta|darkkhaki|darkgreen|darkgray|darkgoldenrod|darkcyan|darkblue|cyan|crimson|cornsilk|cornflowerblue|coral|chocolate|chartreuse|cadetblue|transparent|burlywood|brown|blueviolet|blue|blanchedalmond|black|bisque|beige|azure|aquamarine|aqua|antiquewhite|aliceblue'; + + // fonts + str = multiple(str, /(\$|($))([\w \-\,®]*)\|(.*)$/, '$4'); + str = multiple(str, /(\£|(£))([\w \-\,®]*)\|(.*)$/, '$4'); + + // colors + str = multiple(str, /###([\da-f]{6}|[\da-f]{3})(.+)$/i, '$2'); + str = multiple(str, /##([\da-f]{6}|[\da-f]{3})(.+)$/i, '$2'); + str = multiple(str, /#([\da-f]{6}|[\da-f]{3})(.+)$/i, '$2'); + str = multiple(str, RegExp('###(' + coloreg + ')(.+)$', 'i'), '$2'); + str = multiple(str, RegExp('##(' + coloreg + ')(.+)$', 'i'), '$2'); + str = multiple(str, RegExp('#(' + coloreg + ')(.+)$', 'i'), '$2'); + + // styles + str = multiple(str, /\/\%%([^\%%]+)\%%/g, '$1'); + str = multiple(str, /\/\^([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\*([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\%([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\_([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\-([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\~([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\#([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\+([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\!([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\$([^\|]+)\|?/g, '$1'); + str = multiple(str, /\/\@([^\|]+)\|?/g, '$1'); + + return str; +} +*/ + + +function randomByte() { + return Math.round(Math.random()*256); +} + +function randomIp() { + var ip = randomByte() +'.' + + randomByte() +'.' + + randomByte() +'.' + + randomByte(); + return ip; +} \ No newline at end of file diff --git a/src/junk/owopbridge.js b/src/junk/owopbridge.js new file mode 100644 index 0000000..ed5f6d6 --- /dev/null +++ b/src/junk/owopbridge.js @@ -0,0 +1,107 @@ +var striptags = require('striptags'); +function createOWOPbridge(dClient, channelID, webhookID, webhookToken, OWOPworld = 'main', OWOPnick = '[Discord]'){ + var webhook = new Discord.WebhookClient(webhookID, webhookToken, {disableEveryone:true}); + var WebSocket = require('ws'); + var socket; + var canConnect = true; + function connect() { + if (!canConnect) return; + var myId; + socket = new WebSocket("ws://ourworldofpixels.com:443/"); + socket.binaryType = "arraybuffer"; + + var pingInterval; + socket.addEventListener('open', () => { + console.log('[OWOP] ws open'); + joinWorld(OWOPworld); + sendMessage('/nick '+OWOPnick); + pingInterval = setInterval(sendCursorActivity, 1000*60*5); + webhook.send('**Connected**'); + }); + socket.addEventListener('close', () => { + console.log('[OWOP] ws close'); + clearInterval(pingInterval); + setTimeout(connect, 10000); + webhook.send('**Disconnected**'); + }); + socket.addEventListener('error', console.error); + socket.addEventListener('message', msg => { + if (!myId) myId = extractId(msg.data); + if (typeof msg.data != "string") return; + if (myId && (msg.data.startsWith(`[${myId}]`) || msg.data.startsWith(myId))) return; + webhook.send(striptags(msg.data)); + }); + } connect(); + + dClient.on('message', message => { + if (message.channel.id != channelID) return; + var str = `${message.member.displayName}: ${message.cleanContent}`; + if (message.attachments.first()) str += ' ' + message.attachments.first().url; + if (str.length > 128) str = str.substr(0,127) + '…'; + sendMessage(str); + }); + + + + function joinWorld(name) { + var nstr = stoi(name, 24); + var array = new ArrayBuffer(nstr[0].length + 2); + var dv = new DataView(array); + for (var i = nstr[0].length; i--;) { + dv.setUint8(i, nstr[0][i]); + } + dv.setUint16(nstr[0].length, 1337, true); + socket.send(array); + return nstr[1]; + } + function stoi(string, max) { + var ints = []; + var fstring = ""; + string = string.toLowerCase(); + for (var i = 0; i < string.length && i < max; i++) { + var charCode = string.charCodeAt(i); + if (charCode < 123 && charCode > 96 || charCode < 58 && charCode > 47 || charCode == 95 || charCode == 46) { + fstring += String.fromCharCode(charCode); + ints.push(charCode); + } + } + return [ints, fstring]; + } + + function sendMessage(str) { + if (socket && socket.readyState == WebSocket.OPEN) + socket.send(str + String.fromCharCode(10)); + } + + function sendCursorActivity() { // thx kit + var arb = new ArrayBuffer(12); + var dv = new DataView(arb); + dv.setInt32(0, 0, true); // x + dv.setInt32(4, 0, true); // y + dv.setUint8(8, 0); // r + dv.setUint8(9, 0); // g + dv.setUint8(10, 0); // b + dv.setUint8(11, "cursor"); // tool + socket.send(arb); + } + + function extractId(arb) { + var dv = new DataView(arb); + var type = dv.getUint8(0); + if (type != 0) return null; + var _id = dv.getUint32(1, true); + webhook.send(`**ID is \`${_id}\`**`); + return _id; + } + + return { + socket, + start: function(){canConnect = true; connect();}, + stop: function(){canConnect = false; socket.close();} + } +} +global.createOWOPbridge = createOWOPbridge; + +//global.OWOPbridge = createOWOPbridge(dClient, '398613291817238548', '398613329439883275', config.webhooks.owop); + +