'use strict'; // Load up libraries const Discord = require("discord.js"); // Load config! let config = require('config'); config = config.get('bot'); var aliases; try { aliases = require("./alias.json"); } catch (e) { //No aliases defined aliases = { "test": { process: function(bot,msg){ msg.channel.send('test'); } } } } var commands = { }; var bot = new Discord.Client(); bot.on("ready", function() { console.log( "Logged in! Serving in " + bot.guilds.array().length + " servers" ); require("./plugins.js").init(); console.log("type " + config.prefix + "help in Discord for a commands list."); bot.user.setGame( config.prefix + "tip" ); }); bot.on("disconnected", function() { console.log("Disconnected!"); process.exit(1); //exit node.js with an error }); function checkMessageForCommand(msg, isEdit) { //check if message is a command if (msg.author.id != bot.user.id && msg.content.startsWith(config.prefix)) { console.log( "treating " + msg.content + " from " + msg.author + " as command" ); var cmdTxt = msg.content.split(" ")[0].substring(config.prefix.length); var suffix = msg.content.substring( cmdTxt.length + config.prefix.length + 1 ); //add one for the ! and one for the space if (msg.isMentioned(bot.user)) { try { cmdTxt = msg.content.split(" ")[1]; suffix = msg.content.substring( bot.user.mention().length + cmdTxt.length + config.prefix.length + 1 ); } catch (e) { //no command msg.channel.send("Yes?"); return; } } let alias = aliases[cmdTxt]; if (alias) { var cmd = alias; } else { var cmd = commands[cmdTxt]; } if (cmd) { // Add permission check here later on ;) try { cmd.process(bot, msg, suffix, isEdit); } catch (e) { var msgTxt = "command " + cmdTxt + " failed :("; if (config.debug) { msgTxt += "\n" + e.stack; } msg.channel.send(msgTxt); } } } else { //message isn't a command or is from us //drop our own messages to prevent feedback loops if (msg.author == bot.user) { return; } if (msg.author != bot.user && msg.isMentioned(bot.user)) { msg.channel.send("yes?"); //using a mention here can lead to looping } else { } } } bot.on("message", msg => checkMessageForCommand(msg, false)); bot.on("messageUpdate", (oldMessage, newMessage) => { checkMessageForCommand(newMessage, true); }); exports.addCommand = function(commandName, commandObject) { try { commands[commandName] = commandObject; } catch (err) { console.log(err); } }; exports.addCustomFunc = function(customFunc) { try { customFunc(bot); } catch (err) { console.log(err); } } exports.commandCount = function() { return Object.keys(commands).length; }; bot.login(config.token);