#node.js #discord #discord.js
#node.js #Discord #discord.js
Вопрос:
Итак, у меня есть бот Discord, и мне пришла в голову идея добавить к нему команду weather. Я добился того, что часть, в которой сообщение отправляется во внедрении, заработала, но для запуска команды мне пришлось бы выполнить ее с указанием города и штата без пробелов ( /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 amp; 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);
Ответ №1:
Если вы хотите использовать кавычки, вы можете разделить строку следующим образом:
let foo = ""San Francisco" CA";
let args = foo.split(""");
console.log(args);
Это вернет:
[ '', 'San Francisco', ' CA' ]
Вы можете просто удалить первый индекс, выполнив:
args.splice(0, 1);
И это вернет:
[ 'San Francisco', ' CA' ]
Редактировать: Исправлена опечатка.
Комментарии:
1. Я понимаю, о чем вы говорите, но я хотел бы иметь возможность заменить
""San Francisco" CA"
аргументом, переданным из сообщения Discord.2. Вы можете легко сделать это, превратив значение foo variables в этот аргумент. Если вас смущает
"
это просто экранирование"
и является обычным"
.
Ответ №2:
Я не уверен, что это самый эффективный способ, но если вы разделите на пробел, вы сможете выполнить цикл for, чтобы определить аргументы и объединить их все в строку.
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 amp; 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);
Комментарии:
1. Спасибо за ответ. Однако, когда я попробовал этот код, он вылетает. (С ошибкой
city is not defined
)