Javascript 我如何在disordjs中下载并重新加载图像?
我试图从另一个bot的消息中重新发布内容,同时以相同的方式重新发布,除了用缩略图替换图像,但是当我删除原始消息时,bot没有时间获取图像并发布它自己。现在添加延迟是一个不错的替代,但我不希望原始消息停留。我听说Jimp被用来编辑图像,那么我应该如何以及在哪里将其应用到这段代码中呢?我可以简单地编辑图片mildy的对比度来重新发布它。这是密码Javascript 我如何在disordjs中下载并重新加载图像?,javascript,node.js,bots,discord,discord.js,Javascript,Node.js,Bots,Discord,Discord.js,我试图从另一个bot的消息中重新发布内容,同时以相同的方式重新发布,除了用缩略图替换图像,但是当我删除原始消息时,bot没有时间获取图像并发布它自己。现在添加延迟是一个不错的替代,但我不希望原始消息停留。我听说Jimp被用来编辑图像,那么我应该如何以及在哪里将其应用到这段代码中呢?我可以简单地编辑图片mildy的对比度来重新发布它。这是密码 if (message.author.id == botid && message.guild.id == guild4) {
if (message.author.id == botid && message.guild.id == guild4) {
message.embeds.forEach((e) => {
if (e.title !== undefined && e.title.startsWith("The Dungeon ")) {
if (e.image) {
let url = e.image.url;
let desc = e.description;
request(url, async function(err, res, body) {
if (err !== null) return;
imghash
.hash(body)
.then(async (hash) => {
let rareresult = raresdb[hash];
//message.delete(e)
if (rareresult === undefined) {
let result = db[hash];
if (result === undefined) {
embed
.setThumbnail(url)
.setDescription(desc)
await delay(666);
message.delete(e)
return message.channel.send(embed)
}
我目前正在使用等待延迟(666)
试图缓解这个问题,但我希望url
是自定义的,我的bot可以自己发布,而不必担心前一条消息会保留多长时间。我希望我的问题很清楚
我的问题是我定义的
e.image.url
或url
。如果我删除原始邮件,只需重新发布url
,因为缩略图不够好,因为没有足够的时间加载它,所以我希望上传我自己版本的图像,并将其用于.set缩略图(url)。如何在此代码上下文中上载和重新发布discord.s中的图像?根据您的操作方式,您有一些选择。你可以下载并重新上传图片。或者您只需保存URL并使用该URL重新上传。()
因此,要发送图像,您需要运行
message.channel.send({
档案:[{
附件:“”
}]
});
例如,以下代码允许我使用这两种方法发送2张图像:
const Discord=require(“Discord.js”);
const client=new Discord.client();
常数fs=要求(“fs”);
client.on(“ready”),()=>console.log(“ready”);
client.on(“message”,函数(msg){
如果(msg.content==“发送照片”){
msg.channel.send({
档案:[{
附件:fs.readFileSync(“./DownVote.png”),
名称:“DownVote.png”
},{
附件:“https://cdn.discordapp.com/attachments/679433940615823385/708433102900559933/brave_YnGjgGYqTr.png",
名称:“screenie.png”
}]
});
}
});
client.login(“令牌”);
选择哪种方法取决于您。不过,我建议您使用URL,因为这意味着您不会因为下载图像而占用空间和安全问题
不要使用delay(666)
Discord.js在消息上返回一个承诺。发送只需发送消息,然后删除原始消息
message.send({embed}).then(function(){originalMessage.delete()});
您缺少很多作用域,因此很难判断哪个作用域何时结束,因此请在我添加的编辑中添加结束括号。我不知道你是不是这个意思。代码的其余部分基本上是在不同的条件下做相同的事情。比如,如果rarresult=以这种方式发布它。但我的问题与我定义的e.image.url
或url
差不多。简单地重新发布该url是不够好的,因为如果我删除原始消息,没有足够的时间加载它,所以我希望上传我自己版本的该图像并将其用于。set缩略图(url)
您只添加了一个结束括号,如果我复制代码锁并将其输入IDE,它将给出许多错误(不包括变量名错误,这很好)。在message.author.id==botid&&message.guild.id==guild4)
或e.title!==未定义&e.title.startsWith(“地下城”)
但这对我的问题是必要的吗?我的问题是使用e.image.url
这是嵌入的图像,并将其作为缩略图发布到我自己的消息中,这是.set缩略图(url)
。但问题是,如果我不添加延迟,那么图像根本不会加载,或者它会无限加载。所以我想看看我是否能以某种方式重新上传这张图片,并重新发布我自己的版本。我听说Jimp被用来编辑图像,我也看到了一些代码,但我不知道如何将其应用于此谢谢你的帮助,但我还是很困惑。e.image.url
是每次有东西“生成”时都会发生变化的东西,所以我不知道如何在上面写附件。你能给我一个关于如何做的例子吗?e.image.url
只是图像的url,所以你可以:message.channel.send({files:[{附件:e.image.url}])代码>,它会将图像重新发送到频道。它说rm Body embed.缩略图.url:无法解释“{'files':[{'attachment':”https://cdn.discordapp.com/attachments/720151626588881007/724842359044571186/Spawn.png%27%7D]%7D“作为字符串。
当我尝试执行.set缩略图([{附件:e.image.url}]})时
啊,这是因为如果你检查文档,你使用的是.set缩略图
它接受的是字符串,而不是对象。所以对于.set缩略图
你只需要做:.set缩略图(e.image.url);
当你通过message.channel.send发送嵌入的消息时,你只需要[{附件:e.image.url}]
({embeddes:[]});
再次感谢您的帮助,但我的问题是,我不能简单地重用现有的e.image.url,因为当我删除原始邮件时,我自己的bot中的图像将不再加载。因此我需要一种方法,以某种方式下载或编辑原始url,并使用完全相同的图片上载一个全新的url。