Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const blessed = require("blessed");
- const request = require("request");
- const WebSocket = require("ws");
- global.token = undefined;
- global.server = undefined;
- global.channel = undefined;
- global.servers = undefined;
- global.channels = undefined;
- //input handler
- const command=function(input){
- cmd = input.toLowerCase().trim().split(" ");
- if (global.channel!=undefined) {
- if (cmd[0]=="/q") {
- screen.title=global.server.name;
- websocket.send(JSON.stringify({
- cmd: "UNSUBSCRIBE",
- args: {
- channel_id: global.channel.id
- },
- evt: "MESSAGE_CREATE",
- nonce: nonce
- }));
- global.channel = undefined;
- } else {
- //send message here
- request({
- url:"http://127.0.0.1:6463/channels/"+global.channel.id+"/messages",
- headers: {
- Origin:"https://discordapp.com/",
- Authorization: "Bearer "+global.token,
- },
- method:"POST",
- json:true,
- body: {content: cmd[0]=="/shrug"?input.replace("/shrug","")+" ¯\\_(ツ)_/¯":input}
- });
- }
- } else if (global.server!=undefined) {
- //select channel here
- if (["/l","/ls"].indexOf(cmd[0])+1) {
- list_channels(display, screen, global.channels)
- } else if (["/jr", "/jc", "/j"].indexOf(cmd[0])+1){
- if (cmd.length==2 && parseInt(cmd[1])<global.channels.length){
- global.channel = global.channels[parseInt(cmd[1])];
- screen.title = global.server.name+" - "+global.channel.name;
- log(display, screen, "CONNECTED TO "+global.channel.name);
- websocket.send(JSON.stringify({
- cmd: "GET_CHANNEL",
- args: {
- channel_id: global.channel.id
- },
- nonce: nonce
- }));
- }
- } else if (cmd[0]=="/q") {
- global.server = undefined;
- global.channels = undefined;
- screen.title="Discord";
- }
- } else if (global.token!=undefined) {
- if (["/l","/ls"].indexOf(cmd[0])+1) {
- list_guilds(display, screen, global.servers);
- } else if (["/js", "/jg", "/j"].indexOf(cmd[0])+1){
- if (cmd.length==2 && parseInt(cmd[1])<global.servers.length){
- global.server = global.servers[parseInt(cmd[1])];
- screen.title = global.server.name;
- log(display, screen, "CONNECTED TO "+global.server.name);
- websocket.send(JSON.stringify({
- nonce:nonce,
- cmd:"GET_CHANNELS",
- args:{
- guild_id:global.server.id
- }
- }));
- }
- } else if (cmd[0]=="/q") {
- return process.exit(0);
- }
- } else {
- log(display, screen, "COMMAND REJECTED. STILL LOADING.");
- }
- }
- //display lists
- const tabulate = function(display, screen, list) {
- wid = 0
- for(i=0;i<list.length;i++) {
- wid = Math.max(display.strWidth(list[i]), wid);
- }
- wid++
- cols = Math.floor(display.width/wid);
- rows = Math.ceil(list.length/cols);
- for (y=0;y<rows;y++){
- string = ""
- for (x=0;x<cols;x++){
- if ((y*cols+x)<list.length){
- //diff = list[y*cols+x].length-[...list[y*cols+x]].length //fuck unicode
- //diff = (list[y*cols+x].match(nonspacing)||[]).length; //fuck unicode again
- pad = wid-display.strWidth(list[y*cols+x])
- string = string+list[y*cols+x]+(" ".repeat(pad));
- }
- }
- display.shiftLine(0);
- display.setLine(display.height-1, string);
- }
- screen.render();
- }
- //data handlers
- const recv_messages = function(display, screen, messages){
- messages.forEach(function(e){
- recv_message(display, screen, e);
- });
- }
- const recv_message = function(display, screen, message){
- log(display, screen, message.author.username+" - "+message.content);
- }
- const recv_guilds = function(guilds){
- global.servers = guilds;
- }
- const recv_channels = function(channels){
- global.channels = channels;
- }
- const list_guilds = function(display, screen, guilds){
- arr=[]
- for (i=0; i<guilds.length; i++){
- arr.push("["+i+"] "+guilds[i].name);
- }
- tabulate(display, screen, arr);
- }
- const list_channels = function(display, screen, channels){
- arr=[]
- for (i=0; i<channels.length; i++){
- if (channels[i].type==0){
- arr.push("["+i+"] "+channels[i].name);
- }
- }
- tabulate(display, screen, arr);
- }
- //set up screen
- var screen = blessed.screen ({smartCSR: true, fullUnicode: true});
- screen.title = "Discord";
- var display = blessed.box ({
- fg:"white",
- bg:"black",
- width:"100%",
- height:"100%-1",
- scrollable:true,
- top:0,
- left:0,
- });
- var input = blessed.textbox ({
- fg:"white",
- bg:"black",
- width:"100%",
- height:1,
- scrollable:false,
- bottom:0,
- left:0,
- inputOnFocus:true,
- })
- input.key(["C-c"], function (ch,key){
- return process.exit(0);
- });
- input.key(["escape"], function(ch,key){
- input.focus();
- });
- input.key(["enter"], function(ch,key){
- command(input.getValue());
- input.clearValue();
- input.focus();
- screen.render();
- });
- const log = function(display, screen, text) {
- lines = text.split(/\n/);
- for (i=0;i<lines.length;i++){
- while (!!lines[i]) {
- var j=lines[i].length;
- while (display.strWidth(lines[i].substring(0,j))>display.width) {j--}
- display.setLine(display.height-1, lines[i].substring(0,j));
- display.shiftLine(0);
- lines[i]=lines[i].substring(j);
- }
- }
- screen.render();
- }
- const clear = function (display, screen) {
- display.content="";
- screen.render();
- }
- screen.append(display);
- screen.append(input);
- input.focus();
- log(display, screen, "INIT RPC CONNECTION");
- //set up RPC connection
- websocket = new WebSocket ("ws://127.0.0.1:6463/?v=1&client_id=207646673902501888", {
- origin:"https://discordapp.com"
- });
- nonce=0;
- websocket.on("message", function (message) {
- data = JSON.parse(message);
- nonce+=1
- if (data.cmd=="DISPATCH" && data.evt=="READY") {
- request ({
- url:"https://streamkit.discordapp.com/overlay/token",
- json:true
- }, function(err,res,body){
- if (!err && res.statusCode==200) {
- log(display, screen, "RPC_TOKEN: "+body.rpc_token);
- websocket.send(JSON.stringify({
- cmd:"AUTHORIZE",
- args:{
- client_id:"207646673902501888",
- scopes: [
- "rpc",
- "rpc.api",
- "messages.read"
- ],
- rpc_token:body.rpc_token,
- },
- nonce:nonce
- }));
- }
- });
- } else if (data.cmd=="AUTHORIZE") {
- log(display, screen, "CODE: "+data.data.code);
- request ({
- url:"https://streamkit.discordapp.com/overlay/token",
- method:"POST",
- json:true,
- body: {
- code:data.data.code
- }
- }, function(err,res,body){
- if (!err && res.statusCode==200) {
- log(display, screen, "ACCESS_TOKEN: "+body.access_token);
- global.token = body.access_token;
- websocket.send (JSON.stringify({
- cmd:"AUTHENTICATE",
- args:{
- access_token:body.access_token
- },
- nonce:nonce
- }));
- }
- })
- } else if (data.cmd=="AUTHENTICATE") {
- log(display, screen, "CONNECTED");
- websocket.send(JSON.stringify({
- nonce:nonce,
- cmd:"GET_GUILDS",
- }));
- } else if (data.cmd=="GET_GUILDS") {
- recv_guilds(data.data.guilds);
- } else if (data.cmd=="GET_CHANNELS") {
- recv_channels(data.data.channels);
- } else if (data.cmd=="GET_CHANNEL") {
- recv_messages(display, screen, data.data.messages);
- websocket.send(JSON.stringify({
- cmd: "SUBSCRIBE",
- args: {
- channel_id: data.data.id
- },
- evt: "MESSAGE_CREATE",
- nonce: nonce
- }));
- } else if (data.cmd=="DISPATCH"&&data.evt=="MESSAGE_CREATE") {
- recv_message(display, screen, data.data.message);
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement