Нежелательный цикл в коде при печати биржевой диаграммы - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь заставить моего бота разногласия отображать графики из finviz, основанные на таймфрейме, но по некоторым причинам, разногласия продолжают печатать один и тот же график снова и снова. Есть идеи?

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 Ответ

1 голос
/ 05 июля 2019

Ваш бот прослушивает все сообщения, включая его собственные. Попробуйте обернуть функцию отправки сообщения внутри оператора 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...