scripts n shit

This commit is contained in:
Madeline 2023-04-05 21:18:31 +10:00
parent df696d362a
commit c3f5047e0c
No known key found for this signature in database
GPG Key ID: 1958E017C36F2E47
13 changed files with 53 additions and 328 deletions

View File

@ -1,82 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
require("dotenv").config();
const cluster = require("cluster");
const WebSocket = require("ws");
const endpoint = process.env.GATEWAY || "ws://localhost:3001";
const connections = Number(process.env.CONNECTIONS) || 50;
const token = process.env.TOKEN;
var cores = 1;
try {
cores = Number(process.env.THREADS) || os.cpus().length;
} catch {
console.log("[Bundle] Failed to get thread count! Using 1...");
}
if (!token) {
console.error("TOKEN env var missing");
process.exit();
}
if (cluster.isMaster) {
for (let i = 0; i < cores; i++) {
cluster.fork();
}
cluster.on("exit", (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
for (let i = 0; i < connections; i++) {
connect();
}
}
function connect() {
const client = new WebSocket(endpoint);
client.on("message", (data) => {
data = JSON.parse(data);
switch (data.op) {
case 10:
client.interval = setInterval(() => {
client.send(JSON.stringify({ op: 1 }));
}, data.d.heartbeat_interval);
client.send(
JSON.stringify({
op: 2,
d: {
token,
properties: {},
},
}),
);
break;
}
});
client.once("close", (code, reason) => {
clearInterval(client.interval);
connect();
});
client.on("error", (err) => {
// console.log(err);
});
}

View File

@ -1,22 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
require("dotenv").config();
require("./connections");
require("./messages");

View File

@ -0,0 +1,53 @@
/* eslint-env node */
require("dotenv").config();
const { OPCODES } = require("../../dist/gateway/util/Constants.js");
const WebSocket = require("ws");
const ENDPOINT = `ws://localhost:3002?v=9&encoding=json`;
const TOKEN =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOTMxMTgwMjgzNjA1MzYxMDYiLCJpYXQiOjE2ODA2OTE5MDB9.9ByCqDvC4mIutW8nM7WhVCtGuKW08UimPnmBeNw-K0E";
const TOTAL_ITERATIONS = 500;
const doTimedIdentify = () =>
new Promise((resolve) => {
let start;
const ws = new WebSocket(ENDPOINT);
ws.on("message", (data) => {
const parsed = JSON.parse(data);
switch (parsed.op) {
case OPCODES.Hello:
// send identify
start = performance.now();
ws.send(
JSON.stringify({
op: OPCODES.Identify,
d: {
token: TOKEN,
properties: {},
},
}),
);
break;
case OPCODES.Dispatch:
if (parsed.t == "READY") {
ws.close();
return resolve(performance.now() - start);
}
break;
}
});
});
(async () => {
const perfs = [];
while (perfs.length < TOTAL_ITERATIONS) {
const ret = await doTimedIdentify();
perfs.push(ret);
// console.log(`${perfs.length}/${TOTAL_ITERATIONS} - this: ${Math.floor(ret)}ms`)
}
const avg = perfs.reduce((prev, curr) => prev + curr) / (perfs.length - 1);
console.log(`Average identify time: ${Math.floor(avg * 100) / 100}ms`);
})();

View File

@ -1,3 +0,0 @@
/node_modules
config.json
accounts.json

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
{
"url": "",
"text-channel": "",
"invite": ""
}

View File

@ -1,58 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* eslint-env node */
const register = require("./src/register");
const login = require("./src/login/index");
const config = require("./config.json");
const figlet = require("figlet");
const sendMessage = require("./src/message/send");
const fs = require("fs");
figlet("Spacebar Stress Test :)", function (err, data) {
if (err) {
console.log("Something went wrong...");
console.dir(err);
return;
}
console.log("\x1b[32m", data);
});
setInterval(() => {
generate();
}, 1000 * 5);
setInterval(() => {
getUsers();
}, 60 * 1000);
async function generate() {
var accounts = await JSON.parse(fs.readFileSync("accounts.json"));
console.log(accounts);
var account = await register();
accounts.push(account);
fs.writeFileSync("accounts.json", JSON.stringify(accounts));
console.log(accounts.length);
var y = await login(account);
sendMessage(y);
}
async function getUsers() {
var accounts = await JSON.parse(fs.readFileSync("accounts.json"));
accounts.forEach(async (x) => {
var y = await login(x);
console.log(y);
sendMessage(y);
});
}

Binary file not shown.

View File

@ -1,17 +0,0 @@
{
"name": "stresstest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ."
},
"author": "",
"license": "ISC",
"dependencies": {
"figlet": "^1.5.2",
"node-fetch": "^2.6.6",
"request": "^2.88.2"
}
}

View File

@ -1,38 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const fetch = require("node-fetch");
const fs = require("fs");
var config = require("../../config.json");
module.exports = login;
async function login(account) {
var body = {
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
login: account.email,
password: account.password,
};
var x = await fetch(config.url + "/auth/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
console.log(x);
x = await x.json();
console.log(x);
return x;
}

View File

@ -1,44 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const fetch = require("node-fetch");
const fs = require("fs");
var config = require("../../config.json");
module.exports = sendMessage;
async function sendMessage(account) {
var body = {
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
content: "Test",
tts: false,
};
var x = await fetch(
config.url + "/channels/" + config["text-channel"] + "/messages",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: account.token,
},
body: JSON.stringify(body),
},
);
console.log(x);
x = await x.json();
console.log(x);
return x;
}

View File

@ -1,58 +0,0 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* eslint-env node */
const fetch = require("node-fetch");
const fs = require("fs");
var config = require("../../config.json");
module.exports = generate;
async function generate() {
var mail = (Math.random() + 10).toString(36).substring(2);
mail =
mail +
"." +
(Math.random() + 10).toString(36).substring(2) +
"@stresstest.com";
var password =
(Math.random() * 69).toString(36).substring(-7) +
(Math.random() * 69).toString(36).substring(-7) +
(Math.random() * 69).toString(36).substring(-8);
console.log(mail);
console.log(password);
var body = {
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
email: mail,
username: "Spacebar Stress Test",
password: password,
invite: config.invite,
consent: true,
date_of_birth: "2000-04-04",
gift_code_sku_id: null,
captcha_key: null,
};
var x = await fetch(config.url + "/auth/register", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
console.log(x);
x = await x.json();
console.log(x);
return { email: mail, password: password };
}