遇到weather-js和args的麻烦

时间:2019-04-22 20:49:21

标签: javascript bots discord discord.js

我的机器人中有一个名为weather的命令,它可以正常工作,但是如果用户编写时不带任何参数,我想发送一条错误消息。

如果参数不是一个地方,它会起作用,但是如果您在不带任何参数的情况下编写它,它将不会回复任何内容

这是代码(已更新为完整代码)

      const Discord = require('discord.js');
const weather = require('weather-js');

exports.run = async (client, message, args) => {

    weather.find({search: args[0], degreeType: "C"}, function(err, result){
        if (err) message.channel.send(err);

        const noargs = new Discord.RichEmbed()
        .setDescription(`Input a valid location, please`)
        .setColor(0xfd5454)

        if(!result.length) {
            message.channel.send(noargs);
            return;
        }

        var current = result[0].current;
        var location = result[0].location;

如果您输入“,weather不存在城市”,它会起作用,但是如果您写入“,weather”而没有任何参数,那么它将不起作用。 PD:noargs是不和谐的嵌入,已声明但不包含在本文中。

3 个答案:

答案 0 :(得分:1)

const weather = require('weather-js');

const Discord = require('discord.js');

module.exports = {
    name: "weather",
    description: "Checks a weather forecast",

    async execute(client, message, cmd, args, Discord){

    weather.find({search: args.join(" "), degreeType: 'F'}, function (error, result){
        // 'C' can be changed to 'F' for farneheit results
        if(error) return message.channel.send(error);
        if(!args[0]) return message.channel.send('Please specify a location')

        if(result === undefined || result.length === 0) return message.channel.send('**Invalid** location');

        var current = result[0].current;
        var location = result[0].location;

        const weatherinfo = new Discord.MessageEmbed()
        .setDescription(`**${current.skytext}**`)
        .setAuthor(`Weather forecast for ${current.observationpoint}`)
        .setThumbnail(current.imageUrl)
        .setColor(0x111111)
        .addField('Timezone', `UTC${location.timezone}`, true)
        .addField('Degree Type', 'Celsius', true)
        .addField('Temperature', `${current.temperature}°`, true)
        .addField('Wind', current.winddisplay, true)
        .addField('Feels like', `${current.feelslike}°`, true)
        .addField('Humidity', `${current.humidity}%`, true)


        message.channel.send(weatherinfo)
        })        
    }
}

答案 1 :(得分:0)

如果要检查是否在禁止使用的参数的情况下,可以执行以下操作:

if(args.length == 0) return message.channel.send('You need to provide a city');

答案 2 :(得分:0)

  

... weather-js被编程为如果用户未向args提供默认消息,则回答该用户。我想知道如何更改该消息。

如果您真的想要更改此消息,而不是像@PLASMA chicken所建议的那样自己检查您的论点,则该消息位于weather-js/index.js的第31行。