1 回答
TA貢獻1946條經(jīng)驗 獲得超3個贊
解決方案
我花了一段時間,并進行了很多失敗的測試,才弄清楚這一點。但我終于讓它工作了,這是最終結(jié)果:
const Discord = require('discord.js');
const util = require('minecraft-server-util');
util.status("hypixel.net").then(response => {
? ? var fav = response.favicon.split(",").slice(1).join(",");
? ? var imageStream = Buffer.from(fav, "base64");
? ? var attachment = new Discord.MessageAttachment(imageStream, "favicon.png");
? ??
? ? const embed = new Discord.MessageEmbed()
? ? .attachFiles([attachment])
? ? .setThumbnail("attachment://favicon.png");
? ? message.channel.send(embed);
}).catch(console.error);
我使用我的機器人的 eval 命令對此進行了測試,它使用我自己的 Minecraft 服務(wù)器的 IP 運行起來就像一個魅力。如果您的 base64 URL 格式或文件類型與我的不同,您可能需要稍微調(diào)整代碼。
解釋
我將在下面解釋該解決方案的每個步驟:
response.favicon.split(",").slice(1).join(",")
這從 base64 字符串獲取數(shù)據(jù)。Base64 的格式通常類似于:data:<media type>;[charset=<character set>];base64,<data>。正如您所看到的,base64 的實際數(shù)據(jù)僅在第一個逗號之后開始,因此我刪除了這行代碼中逗號之前的所有內(nèi)容。
Buffer.from(fav, "base64")
這會將 Base64 轉(zhuǎn)換為緩沖區(qū)。Discord 的消息附件不能使用 base64 URL,但它們可以使用任何可以解析為Buffer.?該行允許將我們的 base64 數(shù)據(jù)轉(zhuǎn)換為可以在 Discord 中作為附件發(fā)送的數(shù)據(jù)。
new Discord.MessageAttachment(imageStream, "favicon.png")
請注意,base64 URL 和 Buffer 都不能直接設(shè)置為嵌入的縮略圖??s略圖僅支持常規(guī) URL。因此,我們可以使用 Discord.js 提供的解決方法,它允許我們首先將緩沖區(qū)作為附件附加,然后將其移動到縮略圖中。此行創(chuàng)建我們的附件,并將其命名為“favicon.png”(這很重要,因為我們稍后需要訪問該名稱)。
.attachFiles([attachment])
該行將我們新創(chuàng)建的內(nèi)容附加MessageAttachment到嵌入中。它僅作為文件附加,尚未出現(xiàn)在我們嵌入的縮略圖中。
.setThumbnail("attachment://favicon.png")
現(xiàn)在我們可以使用discord.js 的解決方法將圖像放入縮略圖中。我們可以用來attachment://fileName.extension訪問嵌入中的任何和所有附加文件。這將允許我們通過從附件中抓取文件來將嵌入的縮略圖、圖標(biāo)或圖像設(shè)置到我的世界服務(wù)器的圖標(biāo)上。最重要的是,當(dāng)我們執(zhí)行此操作時,文件會移動到縮略圖,并且不會另外作為附件發(fā)送。
添加回答
舉報
