我的 Discord Bot 在触发时不断发送相同的图像

Posted

技术标签:

【中文标题】我的 Discord Bot 在触发时不断发送相同的图像【英文标题】:My Discord Bot keeps sending the same image upon trigger 【发布时间】: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 中发布该图像。 在这种情况下,给定的答案似乎是正确的 【参考方案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);
    
  );
);

【讨论】:

它正在工作!非常感谢,我学到了一些新东西。

以上是关于我的 Discord Bot 在触发时不断发送相同的图像的主要内容,如果未能解决你的问题,请参考以下文章

Discord Bot 无需命令即可发送消息

Discord Bot 使用 python 向一个命令发送多个响应

Heroku discord bot 不断重启

Python Discord bot 在异常时发送文本

Discord bot 在特定频道中发送消息

Discord BOT python,如何在特定用户编写命令时发送消息