diff --git a/LICENSE b/LICENSE index 46bd9cd..ebc0bca 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 plane000 +Copyright (c) 2018 Benjamin Kyd Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/commandmanager.js b/commandmanager.js new file mode 100644 index 0000000..509e0f4 --- /dev/null +++ b/commandmanager.js @@ -0,0 +1 @@ +// TODO: commandmanager diff --git a/commands/commands.js b/commands/commands.js new file mode 100644 index 0000000..3e0d36f --- /dev/null +++ b/commands/commands.js @@ -0,0 +1,27 @@ +const Discord = require('discord.js'); +const ping = require('ping'); +const fs = require('fs'); +const Config = require('../config'); + +/*message object, messaage full, message args, discord client*/ + +module.exports.say = function(message, msg, args, discordclient) { + +} + +module.exports.version = function(message, msg, args, discordclient) { + var em = new Discord.RichEmbed(); + em.setColor('BLUE'); + em.setTitle('Version:'); + em.setDescription(Config.getconfig().Version); + message.channel.send(em); + return; +} + +module.exports.ping = function(message, msg, args, discordclient) { + ping.promise.probe("discordapp.com", { + timeout: 10 + }).then((output) => { + message.channel.send(`:white_check_mark: \`${output.avg}ms\``); + }); +} diff --git a/config.js b/config.js new file mode 100644 index 0000000..0345bf5 --- /dev/null +++ b/config.js @@ -0,0 +1,31 @@ +const fs = require("fs"); + +var config = null; + + +module.exports.getconfig = function() { + return config; +}; + +module.exports.setconfig = function(con) { + config = con; +}; + +module.exports.loadDefaults = function() { + config = { + Token: "DISCORD_TOKEN", + NowPlaying: "RealLife.exe", + Prefix: "+", + Version: "2.0.1", + + Rules: ["Rule 0", "Rule 1"] + }; +}; + +module.exports.loadFromFile = function() { + config = JSON.parse(fs.readFileSync("resources/config.json")); +} + +module.exports.writeToFile = function() { + fs.writeFileSync("resources/config.json", JSON.stringify(config, null, 4)); +} diff --git a/logger.js b/logger.js index 3d2f49b..84a9bbe 100644 --- a/logger.js +++ b/logger.js @@ -1,23 +1,50 @@ -module.exports.logMSG = function (msg) { - var t = new Date(); - var time = (pad(t.getHours(), 2) + ":" + pad(t.getMinutes(), 2) + ":" + pad(t.getSeconds(), 2)) - - +module.exports.logMSG = function(msg) { + var time = getTime(); console.log( - time - + ' in ' + '[' + time + '] ' + + 'In ' + msg.guild.name + ', ' + msg.author.username + '#' + msg.author.discriminator + ' issued the command: ' - + msg.content); + + msg.content + ); } +module.exports.log = function(msg) { + var time = getTime(); + console.log( + '[' + time + '] ' + + msg + ); +} + +module.exports.success = function() { + var time = getTime(); + console.log( + '[' + time + '] ' + + msg + ); +} + +module.exports.failed = function(msg) { + var time = getTime(); + console.log( + '[' + time + '] ' + + msg + ); +} function pad(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } + +function getTime() { + var t = new Date(); + var time = (pad(t.getHours(), 2) + ":" + pad(t.getMinutes(), 2) + ":" + pad(t.getSeconds(), 2)) + return time; +} diff --git a/main.js b/main.js index 6f24c76..fbde9a3 100644 --- a/main.js +++ b/main.js @@ -1,19 +1,79 @@ -const logger = require('./logger'); +const Logger = require('./logger'); +const Config = require('./config'); +const CommandManager = require('./commandmanager'); +const http = require('http'); +const ping = require('ping'); +const fs = require('fs'); const Discord = require('discord.js'); + const client = new Discord.Client(); +/*checks if config exists*/ +if (!fs.existsSync('resources/config.json')) { + Logger.log('Creating the config...'); + try { + if (!fs.existsSync('resources/')) { + fs.mkdirSync('resources/'); + } + Config.loadDefaults(); + Config.writeToFile(); + } + catch (e) { + Logger.failed(`Could not create the config: ${e.message}`); + } +} +/*loads config*/ +Logger.log('Loading config...'); +try { + Config.loadFromFile(); -client.login(''); - - +} +catch (e) { + Logger.failed(`Could not load the config: ${e.message}`); +} +/*connects to discord*/ +try { + Logger.log("Starting discord client..."); + client.login(Config.getconfig().Token); +} catch (e) { + Logger.failed(`Could not connect to discord: ${e.message}`) +} +/*once connected*/ client.on('ready', () => { - console.log(`Logged in as ${client.user.tag}!`); + client.user.setPresence('online'); + client.user.setActivity(Config.getconfig().NowPlaying); + Logger.log(`Logged in as ${client.user.tag}`); + Logger.log('Ready!') + console.log(); }); -client.on('message', msg => { - if (msg.content === 'ping') { - logger.logMSG(msg); - msg.reply('pong'); +/*on message event*/ +client.on('message', async (message) => { + /*if it starts with prefix*/ + if (message.content.startsWith(Config.getconfig().Prefix)) { + Logger.logMSG(message); + var msg = message.content.substring(Config.getconfig().Prefix.length); + var args = msg.split(" "); + + /*temp switch statement to manage commands*/ + switch (args[0].toUpperCase()) { + case 'PING': + ping.promise.probe("discordapp.com", { + timeout: 10 + }).then((output) => { + message.channel.send(`:white_check_mark: \`${output.avg}ms\``); + }); + return; + case 'VERSION': + var em = new Discord.RichEmbed(); + em.setColor('BLUE'); + em.setTitle('Version:'); + em.setDescription(Config.getconfig().Version); + message.channel.send(em); + return; + default: + message.channel.send(`:no_entry: \`The command '${args[0]}' does not exist...\``); + break; + } } - }); diff --git a/package-lock.json b/package-lock.json index e903e8f..eb779fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,16 +26,35 @@ "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" }, + "http": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz", + "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I=" + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "ping": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ping/-/ping-0.2.2.tgz", + "integrity": "sha1-GA+3UIwdx0eThJvONcgHP5llvOI=", + "requires": { + "q": "1.5.1", + "underscore": "1.9.0" + } + }, "prism-media": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.2.tgz", "integrity": "sha512-L6yc8P5NVG35ivzvfI7bcTYzqFV+K8gTfX9YaJbmIFfMXTs71RMnAupvTQPTCteGsiOy9QcNLkQyWjAafY/hCQ==" }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -51,6 +70,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" }, + "underscore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", + "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" + }, "ws": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", diff --git a/package.json b/package.json index 4dda7bc..2e79f58 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,8 @@ "homepage": "https://github.com/plane000/JefferyBot#readme", "dependencies": { "discord.js": "^11.3.2", - "fs": "0.0.1-security" + "fs": "0.0.1-security", + "http": "0.0.0", + "ping": "^0.2.2" } }