打印股票图表时代码中不必要的循环

时间:2019-07-05 02:25:02

标签: node.js image discord.js

我正试图让我的discord机器人根据时间范围显示finviz的图表,但是由于某种原因,discord不断重复打印相同的图表。有什么想法吗?

const Discord = require('discord.js');
const token = '...';
const client = new Discord.Client();
const prefix = "!";
var timeVal;

client.on('message',msg=>{
    if (msg.content.startsWith(prefix+"d"))
        timeVal = "d";
    else if(msg.content.startsWith(prefix+"w"))
        timeVal = "w";
    else if(msg.content.startsWith(prefix+"m"))
        timeVal = "m";

    msg.channel.send("test",{
        files :
        [`https://finviz.com/chart.ashx?t=OMN&ty=c&ta=0&p=${timeVal}&s=l.png`]

    });

});





client.on('ready', ()=>{
    console.log("Bot is connected");
});

client.login(token);

1 个答案:

答案 0 :(得分:1)

您的漫游器正在监听所有消息,包括它自己的消息。尝试将发送消息功能包装在if语句中,例如

client.on('message', msg => {
    if (msg.author.bot) return; // Ignores anything sent by a bot account
    if (msg.content.startsWith(prefix)) {
        let replaced = msg.content.replace(prefix, ''); // This only occurs once.
        if (replaced.toLowerCase().startsWith('d'))
            timeVal = "d";
        else if (replaced.toLowerCase().startsWith('w'))
            timeVal = "w";
        else if (replaced.toLowerCase().startsWith('m'))
            timeVal = "m";

        if (timeVal) {
            msg.channel.send("test", {
                files: [`https://finviz.com/chart.ashx?t=OMN&ty=c&ta=0&p=${timeVal}&s=l.png`]

            });
            timeVal = '';
        }
    }
});

这是首先检查机器人是否正在发送它,如果是,则将其忽略。然后,检查是否已设置timeVal,然后尝试发送消息。发送消息后,请重置timeVal,以使它不会在消息以前缀开头时执行。这是为了确保如果邮件中!之后的内容不是d,w或m,则不会尝试再次发送。