问题描述
因此,我有一个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);