让我的 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
仅允许您添加在线托管的图像(即您需要提供以http
或https
开头的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 机器人对其自己的直接消息做出反应?