让我的 discord.js 机器人从我的计算机中的一组图像中发送一张随机图片

Posted

技术标签:

【中文标题】让我的 discord.js 机器人从我的计算机中的一组图像中发送一张随机图片【英文标题】:Make my discord.js bot to send a random picture from an array of images from my computer 【发布时间】:2021-08-19 00:43:24 【问题描述】:

我正在尝试让我的机器人从我计算机上的图片数组(列表)中发送一张随机图片。但是,当我尝试创建一个嵌入来发送图像时,它会说:

C:\Users\47920\Desktop\Discord Bot\node_modules\discord.js\src\rest\RequestHandler.js:154
      throw new DiscordAPIError(request.path, data, request.method, res.status);
            ^

DiscordAPIError: Invalid Form Body
embed.image.url: Scheme "./something.jpg" is not supported. Scheme must be one of ('http', 'https').
    at RequestHandler.execute (C:\Users\47920\Desktop\Discord Bot\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:\Users\47920\Desktop\Discord Bot\node_modules\discord.js\src\rest\RequestHandler.js:39:14) 
  method: 'post',
  path: '/channels/821475002938294316/messages',
  code: 50035,
  httpStatus: 400

我的代码如下:

case "andreas":
  var imagges = ['./knife.jpg', './lestab.jpg', './sexy.jpg', './timeplann.jpg'];
  var imagge = Math.floor(Math.random() * imagges.length);
  let randomern = new Discord.MessageEmbed()
    .setTitle('sheesh')
    .setAuthor('joBas')
    .setImage(String([imagges[imagge]]));
  message.channel.send(randomern);
  break;

有谁知道我该如何解决这个问题?

【问题讨论】:

你也应该发布一些代码。 这里`case"andreas": var imagges = ["./knife.jpg", "./lestab.jpg", "./sexy.jpg", "./timeplann.jpg" ]; var imagge = Math.floor(Math.random() * imagges.length);让 randomern = new Discord.MessageEmbed() .setTitle('sheesh') .setAuthor('joBas') .setImage(String([imagges[image]])) message.channel.send(randomern);休息; ` 它告诉你 url 需要通过 http/https 访问网络 是的,我知道 charlietfl,但我不能在 http/s 上使用它们,所以有什么不同的方法 请edit您的问题并在那里发布代码,格式正确。 【参考方案1】:

setImage 仅允许您添加在线托管的图像(即您需要提供以httphttps 开头的URL)。幸运的是,您可以使用attachFiles() 方法而不是setImage 从您的计算机上传文件。

const random = (arr) => arr[Math.floor(Math.random() * arr.length)];
const images = [
  './images/avatar1.png',
  './images/avatar2.png',
  './images/avatar3.png',
  './images/avatar4.png',
];

const embed = new MessageEmbed()
  .setTitle('Attach file')
  .setAuthor('joBas')
  .attachFiles([random(images)]);

message.channel.send(embed);

这样做的问题是它与使用.setImage() 设置图像不同。图像不显示在嵌入中,而是显示在它之前:

要解决这个问题,您可以将图像设置为可以通过attachment://fileName.extension 访问的新上传的图像。由于您需要文件名和扩展名,因此您需要将不带路径的文件名存储在数组中,并将路径存储在不同的变量中。

查看以下代码:

const random = (arr) => arr[Math.floor(Math.random() * arr.length)];
const images = [
  'avatar1.png',
  'avatar2.png',
  'avatar3.png',
  'avatar4.png',
];
// path where the images are
const path = './images/';
const randomImage = random(images);

const embed = new MessageEmbed()
  .setTitle('Attach file')
  .setAuthor('joBas')
  .attachFiles([`$path$randomImage`])
  .setImage(`attachment://$randomImage`);

message.channel.send(embed);

正如您在下面的图片中看到的,附加的图片不再在嵌入之外:

【讨论】:

以上是关于让我的 discord.js 机器人从我的计算机中的一组图像中发送一张随机图片的主要内容,如果未能解决你的问题,请参考以下文章

我的 discord.js 机器人的 sql 没有/不能从我的 sqlite3 db 定义一个表

找不到让我的 discord.js 机器人检测消息的方法 [重复]

当有人对消息做出反应时,我如何让我的 discord.js 机器人添加角色?

如何让我的 Discord.JS 机器人对其自己的直接消息做出反应?

如何让我的 discord.py 机器人提及我的消息中提到的某人?

如何让我的 Discord 机器人每 10 秒更改一次状态?