Add bot's squeleton
This commit is contained in:
parent
50b97c0430
commit
b80de72d0b
26
index.js
Normal file
26
index.js
Normal 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
23
package.json
Normal 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
28
src/module.js
Normal 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
58
src/module_manager.js
Normal 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;
|
Loading…
x
Reference in New Issue
Block a user