Add bot's squeleton

This commit is contained in:
Tanguy Herbron 2021-05-09 00:47:32 +02:00
parent 50b97c0430
commit b80de72d0b
4 changed files with 135 additions and 0 deletions

26
index.js Normal file
View File

@ -0,0 +1,26 @@
if(process.env.NODE_ENV !== "production") {
require("dotenv").config();
}
const Discord = require("discord.js");
const client = new Discord.Client();
const ModuleManager = require("./src/module_manager");
let moduleManager = new ModuleManager();
client.on("ready", () => {
console.log("Logged in as " + client.user.tag);
});
client.on("message", message => {
let content = message.toString();
if(content.substr(0,1) === "!") {
let boundary = content.indexOf(' ');
let prefix = content.substr(0, boundary);
moduleManager.execute(prefix, message);
}
});
client.login(process.env.DISCORD_TOKEN);

23
package.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "metrios",
"version": "0.0.1",
"description": "Modular discord bot mainly intended for moderation usage",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js"
},
"keywords": [
"discord",
"moderation",
"bot"
],
"author": "Tanguy Herbron",
"license": "MIT",
"devDependencies": {
"dotenv": "^8.2.0",
"nodemon": "^2.0.7"
},
"dependencies": {
"discord.js": "^12.5.3"
}
}

28
src/module.js Normal file
View File

@ -0,0 +1,28 @@
const execSync = require("child_process").execSync;
class Module {
constructor(name, description, prefix, flavor, entrypoint, version) {
this.name = name;
this.description = description;
this.prefix = prefix;
this.flavor = flavor;
this.entrypoint = entrypoint;
this.version = version;
}
run(message) {
console.log("Running module");
switch(this.flavor) {
case "node":
return execSync("node " + this.entrypoint);
break;
default:
return {"status": "error", "message": "Runtime not supported, check configuration"};
break;
}
}
}
module.exports = Module;

58
src/module_manager.js Normal file
View File

@ -0,0 +1,58 @@
const fs = require("fs");
const Module = require("./module");
class ModuleManager {
constructor() {
console.log("Creating module manager");
this.moduleList = {};
this.scanModules();
}
scanModules() {
console.log("Scanning for modules");
fs.readdirSync(process.env.MODULES_DIR).forEach(file => {
let rawData = fs.readFileSync(process.env.MODULES_DIR + "/" + file + "/header.json");
let header = JSON.parse(rawData);
this.moduleList[header.prefix] = new Module(header.name,
header.description,
header.prefix,
header.flavor,
process.env.MODULES_DIR + "/" + file + "/" + header.entrypoint,
header.version);
});
}
execute(prefix, message) {
let rawResult = this.moduleList[prefix].run(message);
let result = JSON.parse(rawResult.toString());
if(result.status === "success") {
switch(result.action) {
case "reply":
this.reply(message, result);
break;
case "send":
this.send(message, result);
default:
break;
}
}
}
reply(origin, result) {
let message = undefined;
if(result.format === "standard") {
message = result.message;
}
if(result.format === "embed") {
message = {embed: result.profile}
}
origin.reply(message);
}
}
module.exports = ModuleManager;