【问题标题】:My Discord Bot keeps sending the same image upon trigger我的 Discord Bot 在触发时不断发送相同的图像
【发布时间】:2021-04-03 10:11:34
【问题描述】:

我正在使用 NodeJS 开发我的第一个 Discord 机器人,该机器人的目的是每当用户在 Discord 中使用触发词时,使用从 Imgur API 获取的随机图像来响应 Discord 中的消息。我有以下代码:

request(options, function (error, response) {
  if (error) throw new Error(error);
  
  const randomNumber = Math.floor(Math.random() * 73) + 1; 

  arr = JSON.parse(response.body);
  var randomImage = arr.data[randomNumber].link;
  console.log(randomImage)
  bot.on("message", (msg) => {  
    if (msg.content === trigger){
      msg.channel.startTyping();
      msg.channel.send(randomImage);
  
    } 
    
  });
});

bot.login(TOKEN);

bot.on("ready", () => {
  console.info(`Logged in as ${bot.user.tag}!`);
});

从Imgur 获取随机图像有效,并且在 Discord 中使用触发词来获取该图像也有效,但是问题是,例如,当我在 Discord 中向触发词发送垃圾邮件 3 次时,机器人将返回相同的图像 3 次。所需的功能是在每个触发词上发送不同的图像。每当我重新启动服务器时,都会从 Imgur API 获取新图像。

但是问题仍然存在,当我在 Discord 中使用触发词 x 次时,相同的图像将显示 x 次。希望有人可以让我找到正确的方向来解决这个问题。

【问题讨论】:

  • 您似乎只生成了这个随机图像一次。何时以及多久调用一次 request 函数?
  • @MatthewLin 我想每当我启动服务器时,这是唯一一次被调用。这将在控制台中输出一个随机图像,一旦在 Discord 中使用了触发词,就会在 Discord 中发布该图像。
  • 在这种情况下,给定的答案似乎是正确的

标签: javascript node.js json request discord.js


【解决方案1】:

我相信request 只被调用一次。因此,您只生成一次随机图像,并将其用于所有未来的消息。要在收到新消息时生成随机图像,请尝试将随机图像生成放入事件处理程序中,如下所示:

request(options, function (error, response) {
  if (error) throw new Error(error);
  
  arr = JSON.parse(response.body);
  bot.on("message", (msg) => {  
    if (msg.content === trigger){
      const randomNumber = Math.floor(Math.random() * 73) + 1; 
      var randomImage = arr.data[randomNumber].link;
      console.log(randomImage)
      msg.channel.startTyping();
      msg.channel.send(randomImage);
    }
  });
});

【讨论】:

  • 它正在工作!非常感谢,我学到了一些新东西。
猜你喜欢
  • 2019-02-13
  • 2020-05-13
  • 2019-06-07
  • 1970-01-01
  • 2019-01-06
  • 2021-09-10
  • 2020-08-18
  • 2022-07-08
  • 2021-04-05
相关资源
最近更新 更多