I am making a Discord bot, and it has a method called addCmd, which allows me to make it modular. The problem lies where I attempt to detect the command, and see if it is valid. Currently, I am checking if the command is in the commands object. That works, but the problem lies when I'm getting arguments. The arguments list is empty. My format is !cmd arg1 arg2 arg3..., but it is currently seperated by underscores. I am passing these arguments to a function.
My code is listed here:
var Discord = require('discord.js')
var client = new Discord.Client()
var cmds = {}
var errorlvl
var prefix = '!'
function weAreReady() {
console.log('The bot has successfully logged in.')
}
function addCmd(name, argNumber, cmd, usage) {
cmds[name] = {name:name,func: cmd, usage: usage,argNum: argNumber}
}
client.on('ready', weAreReady)
client.on('message', function (message) {
if (message.content.startsWith(prefix)) {
cmd = message.content.split(prefix).pop()
actualcmd = cmd.split('_').pop()
var args
if (cmds[actualcmd] == undefined) {
//It is not a vailid command
console.log('invalid cmd')
console.log('cmd: ' + actualcmd)
} else {
//Get to actually parsing the command
args = cmd.split(cmd).pop().split('_')
console.log(args)
console.log(cmds[actualcmd].argNum)
if (args.length === cmds[actualcmd].argNum + 1) {
//Correct number of args
args.unshift(message);
cmds[actualcmd].func.apply(this, args)
} else {
cmds[actualcmd].usage(message)
}
}
}
})
addCmd('hello', 0, function (message) {
message.channel.send('Hello, ' + message.author.username)
errorlvl = 0
}, function (message) {
errorlvl = 1
message.channel.send(message.author.username + ', the arguments are not complete. The full usage of this command is: !hello')
})
client.login('MzE4ODk2MDM5NDM4NDUwNjk5.DA5Cuw.EyshBBnXnrETKf2KPU-MKclulpg')
The code I use for separating the args from the command is:
args = cmd.split(cmd).pop().split('_')
For splitting the cmd from the prefix and the args, I use:
cmd = message.content.split(prefix).pop()
actualcmd = cmd.split('_').pop()
via Michael
No comments:
Post a Comment