1 回答

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