首页 文章

discord bot自定义命令JS

提问于
浏览
2

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

!roll(从1到6卷)

!卷25(卷从1到25)

!卷100 200(卷从100到200)

问题是当我尝试做的时候!第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

    尝试改变

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

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

    并尝试将 hasNumber 正则表达式更改为 /^[0-9]+$/ ,否则它可能会失败任何具有多个数字的数字 .

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

    你的正则表达式只测试1位数 . 尝试:

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

相关问题