使一组args成为Node.js中的变量?

问题描述

因此,我有一个discord机器人,想到了向其添加天气命令的想法。我收到的消息是通过嵌入工作方式发送的,但是要运行命令,我必须在城市和州没有空格的情况下运行它(/weather SanFrancisco CA看起来像)。我要做的是使它至少包含以下空格:/weather San Fransisco CA/weather 'San Fransisco' CA。这是我的代码(我删除了不需要的部分)。

const discord = require('discord.js')
const bot = new discord.Client()
const PREFIX = '/';
const embed = new discord.MessageEmbed()
const ping = require('minecraft-server-util')
const weather = require('weather-js')
bot.on('message',message => {
  if (message.channel.type === 'dm') {return}
  let args = message.content.substring(PREFIX.length).split(' ')
  if(message.content.startsWith(PREFIX))
  switch (args[0]) {
    case 'weather':
      weather.find({search: `${args[1]},${args[2]}`,degreeType: 'F'},function(err,result) {
        if(err) console.log(err);
        var currentw = new discord.MessageEmbed()
          .setTitle(`Current Weather in ${args[1]} in state ${args[2]}`)
          .addField('Temperature',result[0].current.temperature)
          .addField('Sky Text',result[0].current.skytext)
          .addField('Humidity',result[0].current.humidity)
          .addField('Wind Speed & Direction',result[0].current.winddisplay)
          .addField('Feels Like',result[0].current.feelslike)
          .addField('Location',result[0].current.observationpoint)
          .addField('Time',result[0].current.observationtime)
          .addField('Date',result[0].current.date)
        message.channel.send(currentw)
      });
}})
  bot.login(TOKEN);

解决方法

如果要使用引号,可以按如下所示拆分字符串:

let foo = "\"San Francisco\" CA";
let args = foo.split("\"");

console.log(args);

这将返回: [ '','San Francisco',' CA' ]

您只需执行以下操作即可删除第一个索引:

args.splice(0,1);

这将返回: [ 'San Francisco',' CA' ]

编辑:固定错字。

,

我不确定这是最有效的方法,但是如果您按空格分开,则应该可以执行for循环以确定arg并将它们全部放入一个字符串中。

const Discord = require('discord.js')
const bot = new Discord.Client()
const PREFIX = '/';
const embed = new Discord.MessageEmbed()
const ping = require('minecraft-server-util')
const weather = require('weather-js')
bot.on('message',message => {
  if (message.channel.type === 'dm') {return}
  let args = message.content.substring(PREFIX.length).split(' ')
  if(message.content.startsWith(PREFIX))
  switch (args[0]) {
    case 'weather':
    let city;
    for (let i = 1; i < args.length - 1; i+= 1) {
      city += args[i];
    }
    weather.find({search: `city,${args[args.length - 1]}`,degreeType: 'F'},function(err,result) {
            if(err) console.log(err);
            var currentw = new Discord.MessageEmbed()
              .setTitle(`Current Weather in ${args[1]} in state ${args[2]}`)
              .addField('Temperature',result[0].current.temperature)
              .addField('Sky Text',result[0].current.skytext)
              .addField('Humidity',result[0].current.humidity)
              .addField('Wind Speed & Direction',result[0].current.winddisplay)
              .addField('Feels Like',result[0].current.feelslike)
              .addField('Location',result[0].current.observationpoint)
              .addField('Time',result[0].current.observationtime)
              .addField('Date',result[0].current.date)
            message.channel.send(currentw)
          });
    }})
      bot.login(TOKEN);