我正试图让我的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);
答案 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,则不会尝试再次发送。