Module system, initial creation of Janet
This commit is contained in:
parent
aedcdfff7c
commit
4c55837193
10
config.json
Normal file
10
config.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"irc": {
|
||||
"server": "jfc.im",
|
||||
"port": 6697,
|
||||
"user": "Janet",
|
||||
"channels": [
|
||||
"#team2"
|
||||
]
|
||||
}
|
||||
}
|
56
janet.js
Normal file
56
janet.js
Normal file
@ -0,0 +1,56 @@
|
||||
const fs = require('fs')
|
||||
|
||||
const irc = require('irc')
|
||||
|
||||
class Janet {
|
||||
|
||||
constructor() {
|
||||
this.config = this.loadConfig()
|
||||
this.modules = {
|
||||
'pm': [],
|
||||
'join': [],
|
||||
'message': []
|
||||
}
|
||||
|
||||
this.loadModules()
|
||||
this.client = new irc.Client(
|
||||
this.config.irc.server,
|
||||
this.config.irc.user,
|
||||
{
|
||||
channels: this.config.irc.channels
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the config file config.json
|
||||
* @return An object containing the bot configuration
|
||||
**/
|
||||
loadConfig() {
|
||||
return JSON.parse(fs.readFileSync('./config.json', 'utf-8'))
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the modules from the modules directory
|
||||
*/
|
||||
loadModules() {
|
||||
let files = fs.readdirSync('modules')
|
||||
for (let file of files) {
|
||||
if (file.substr(-3) === '.js') {
|
||||
let title = file.substr(0, file.length - 3)
|
||||
|
||||
if (title !== 'module') {
|
||||
let module = require('./modules/' + title)
|
||||
for(let method of module.methods) {
|
||||
if (method in this.modules) {
|
||||
this.modules[method].push(module)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const janet = new Janet();
|
21
modules/greet.js
Normal file
21
modules/greet.js
Normal file
@ -0,0 +1,21 @@
|
||||
const Module = require('./module')
|
||||
|
||||
class Greet extends Module {
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
name: 'Greet',
|
||||
showInHelp: false,
|
||||
command: 'Hello',
|
||||
methods: ['join']
|
||||
})
|
||||
|
||||
this.test = {}
|
||||
}
|
||||
|
||||
respond(input) {
|
||||
return "Hello, " + input
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Greet()
|
38
modules/module.js
Normal file
38
modules/module.js
Normal file
@ -0,0 +1,38 @@
|
||||
class Module {
|
||||
|
||||
/**
|
||||
* Construct a new Modules instance
|
||||
* @param opts: An object containing module information
|
||||
* @param opts.name: The name of the module
|
||||
* @param opts.showInHelp: Boolean to determine if a module should be a listed command
|
||||
* @param opts.command: The command that triggers the action
|
||||
* @param opts.methods: A list of contact methods where the command is available
|
||||
*/
|
||||
constructor(opts = {}) {
|
||||
let keys = [
|
||||
'name',
|
||||
'showInHelp',
|
||||
'command',
|
||||
'methods'
|
||||
]
|
||||
|
||||
for(let key of keys) {
|
||||
if(!(key in opts)) {
|
||||
throw new TypeError("Key " + key + " is missing from Module options")
|
||||
}
|
||||
|
||||
this[key] = opts[key]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Response to the input, triggered by the command
|
||||
* @return A string response
|
||||
*/
|
||||
respond(input) {
|
||||
throw new TypeError("Function respond has not been implemented. Please override Module.respond()")
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Module
|
22
package.json
Normal file
22
package.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "janet",
|
||||
"version": "0.0.1",
|
||||
"description": "A NodeJS-based IRC bot",
|
||||
"main": "janet.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@lewisdale.me:lewis/Janet.git"
|
||||
},
|
||||
"keywords": [
|
||||
"irc",
|
||||
"bot"
|
||||
],
|
||||
"author": "Lewis Dale <lewis@lewisdale.co.uk>",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"irc": "^0.5.2"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user