discord bot自定义命令JS

时间:2017-04-05 12:28:01

标签: javascript node.js discord

我正在尝试使用Discord编写一个简单的Discord机器人,js-commando库我到目前为止大部分时间工作但我现在遇到了问题所以我得到了这个命令你可以做到的!滚动,它会随机选择一个从1到6的数字,但我想让它更加自定义,所以这就是它的样子

!roll(从1到6卷)

!roll 25(Rolls from 1 to 25)

!roll 100 200(从100到200卷)

问题是,当我尝试做的时候!roll 25我的验证一直说这不是一个有效的数字,但所有其他命令都运行得很好它只发生在我做的时候!滚动然后一些数字我无法弄清楚为什么它不起作用它可能是一个容易修复提前感谢

const commando = require('discord.js-commando')
const _ = require('lodash')

 class DiceRollCommand extends commando.Command {

    constructor(bot) {
        super(bot, {
            name: 'roll',
            group: 'random',
            memberName: 'roll',
            description: 'Rolls a dice.'
        })
    }

    async run(message, args) {
        let roll = args.split(' ')
        let hasNumber = /^[0-9]$/

        if (roll[0] || roll[1]) {
            if (!hasNumber.test(roll[0]) || !hasNumber.test(roll[1])) {
                console.log('roll[1] -> '+ !hasNumber.test(roll[0])) // returns true
                console.log('roll[2] -> '+ !hasNumber.test(roll[1])) // returns true

                message.reply('[DEBUG] Syntax Error input must be a number')
                return
            }
        }
        if (roll.length >= 3) {
            message.reply('[DEBUG] Syntax Error cannot use more than 2 parameters')
            return
        }
        if (roll[0] > 1000000 || roll[1] > 1000000) {
            message.reply('Unfortunately for you, computers have a limited amount of memory, so unless you want me to run out, stop sending ludicrous numbers. Thanks.')
            return
        }
       if (message.content.match(/^!roll$/)) {
           message.reply('rolled ' + _.random(1, 6))
       }
       if (message.content.match(/^!roll [0-9]+\b/)) {
           message.reply('rolled ' + _.random(1, roll[0]))
       }
       if (message.content.match(/^!roll ([0-9]*) ([0-9]*)+\b/)) {
           message.reply('rolled ' + _.random(roll[0], roll[1]))
       }

    }

}

module.exports = DiceRollCommand

2 个答案:

答案 0 :(得分:0)

let hasNumber = /^[0-9]$/

您的正则表达式仅测试1位数。尝试:

let hasNumber = /^[0-9]+$/

答案 1 :(得分:0)

尝试更改

if (!hasNumber.test(roll[0]) || !hasNumber.test(roll[1])) {

if (!hasNumber.test(roll[0]) && !hasNumber.test(roll[1])) {

并尝试将您的hasNumber正则表达式更改为/^[0-9]+$/,否则它可能会因任何超过一位数的数字而失败。