158 lines
4.1 KiB
JavaScript
158 lines
4.1 KiB
JavaScript
|
const { Client, Intents } = require('discord.js');
|
|||
|
const express = require("express");
|
|||
|
const crypto = require("crypto");
|
|||
|
const app = express();
|
|||
|
const parser = require("body-parser");
|
|||
|
app.use(parser.json());
|
|||
|
app.use(parser.urlencoded({extended: false}));
|
|||
|
app.use(parser.text());
|
|||
|
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
|
|||
|
const load = require("load-slash-commands");
|
|||
|
const fs = require("fs");
|
|||
|
var commands = [];
|
|||
|
const ws = require("ws");
|
|||
|
const server = new ws.Server({port: 443});
|
|||
|
var connections = [];
|
|||
|
|
|||
|
server.on("connection", (conn) => {
|
|||
|
console.log("Connection.");
|
|||
|
connections.push(conn);
|
|||
|
conn.on("close", () => {
|
|||
|
connections.splice(connections.indexOf(conn), 1);
|
|||
|
});
|
|||
|
conn.on("error", () => {});
|
|||
|
});
|
|||
|
|
|||
|
server.on("listening", () => {console.log("LIstening!!!")});
|
|||
|
|
|||
|
class Logger{
|
|||
|
log(msg){
|
|||
|
connections.forEach((conn) => {
|
|||
|
conn.send(JSON.stringify({op: "LOG", message: msg}));
|
|||
|
});
|
|||
|
console.log(msg);
|
|||
|
}
|
|||
|
warn(msg){
|
|||
|
connections.forEach((conn) => {
|
|||
|
conn.send(JSON.stringify({op: "WARN", message: msg}));
|
|||
|
});
|
|||
|
console.warn(msg);
|
|||
|
}
|
|||
|
error(msg){
|
|||
|
connections.forEach((conn) => {
|
|||
|
conn.send(JSON.stringify({op: "ERROR", message: msg}));
|
|||
|
});
|
|||
|
console.error(msg);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
async function loadCommands(guild){
|
|||
|
commands.forEach(cmd => {
|
|||
|
delete require.cache[require.resolve(cmd.path)];
|
|||
|
});
|
|||
|
commands = [];
|
|||
|
var api = [];
|
|||
|
var cmdDir = fs.readdirSync("commands");
|
|||
|
cmdDir.forEach(async (cmdPath) => {
|
|||
|
var path = "./commands/" + cmdPath;
|
|||
|
var cmdModule = require(path);
|
|||
|
if(process.options.get("disabledCommands").includes(cmdModule.name)) return;
|
|||
|
cmdModule.path = path;
|
|||
|
commands.push(cmdModule);
|
|||
|
api.push(cmdModule.api);
|
|||
|
});
|
|||
|
client.guilds.cache.get("733451782063390790").commands.set(api);
|
|||
|
console.log("Done loading all commands.");
|
|||
|
}
|
|||
|
process.loadCommands = loadCommands;
|
|||
|
|
|||
|
class ConfigApi{
|
|||
|
constructor(file){
|
|||
|
this.fileName = file;
|
|||
|
this.config = JSON.parse(fs.readFileSync(this.fileName).toString());
|
|||
|
}
|
|||
|
reload(){
|
|||
|
this.config = JSON.parse(fs.readFileSync(this.fileName).toString());
|
|||
|
}
|
|||
|
get(key){
|
|||
|
this.reload();
|
|||
|
return this.config[key];
|
|||
|
}
|
|||
|
set(key, value){
|
|||
|
this.reload();
|
|||
|
this.config[key] = value;
|
|||
|
fs.writeFileSync(file, JSON.stringify(this.config));
|
|||
|
this.reload();
|
|||
|
}
|
|||
|
}
|
|||
|
process.ConfigApi = ConfigApi;
|
|||
|
process.options = new ConfigApi("config.json");
|
|||
|
process.worthy = new ConfigApi("worthy.json");
|
|||
|
|
|||
|
client.on('ready', () => {
|
|||
|
console.log(`Logged in as ${client.user.tag}!`);
|
|||
|
loadCommands();
|
|||
|
/*
|
|||
|
client.guilds.fetch("733451782063390790").then(yes => {
|
|||
|
console.log(yes);
|
|||
|
loadCommands(yes);
|
|||
|
});
|
|||
|
*/
|
|||
|
app.get("/", (req, res) => {
|
|||
|
res.sendFile(__dirname + "/panel/index.html");
|
|||
|
});
|
|||
|
app.get("/index.js", (req, res) => {
|
|||
|
res.sendFile(__dirname + "/panel/index.js");
|
|||
|
});
|
|||
|
app.get("/login", (req, res) => {
|
|||
|
res.sendFile(__dirname + "/panel/login.html");
|
|||
|
});
|
|||
|
app.get("/login.js", (req, res) => {
|
|||
|
res.sendFile(__dirname + "/panel/login.js");
|
|||
|
});
|
|||
|
app.post("/api/login", (req, res) => {
|
|||
|
var pubHash = crypto.createHash("sha256");
|
|||
|
pubHash.update(req.body);
|
|||
|
var pub = pubHash.digest("hex");
|
|||
|
var auth = JSON.parse(fs.readFileSync("auth.json").toString());
|
|||
|
var userObj = null;
|
|||
|
Object.keys(auth.users).forEach(user => {
|
|||
|
if(auth.users[user] == pub) userObj = {user, token: auth.users[user]}
|
|||
|
});
|
|||
|
if(userObj === null){
|
|||
|
res.json({success: false});
|
|||
|
} else{
|
|||
|
res.json({success: true, user: userObj});
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
client.on('interactionCreate', async interaction => {
|
|||
|
if(interaction.isCommand()){
|
|||
|
commands.forEach(cmd => {
|
|||
|
if(interaction.commandName == cmd.api.name){
|
|||
|
try{
|
|||
|
cmd.run(interaction, client, this);
|
|||
|
} catch(e){
|
|||
|
console.log("An error occured whilst attempting to run a command:");
|
|||
|
console.log(e);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
client.on("messageCreate", (msg) => {
|
|||
|
if(msg.content.startsWith(">")){
|
|||
|
if(!process.worthy.get("codeExec").includes(msg.author.id)) return msg.channel.send("You shall not pass.");
|
|||
|
const args = msg.content.replace(">", "");
|
|||
|
try{
|
|||
|
msg.channel.send(new String(eval(args)).valueOf()).catch(e => {});
|
|||
|
} catch(e){
|
|||
|
msg.channel.send(e.stack).catch(e => {});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
client.login(process.env.TOKEN);
|
|||
|
app.listen(3000);
|