1 回答

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