亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于 Discord 機器人的 Base 64 url?? 轉換器

用于 Discord 機器人的 Base 64 url?? 轉換器

HUWWW 2023-12-14 14:26:28
我使用 api 來獲取 mincraft 服務器詳細信息,它為我提供了 ip、玩家數量和所有這些爵士樂,但對于服務器圖標,它為我提供了一個基本 64url,所以我需要先在我的不和諧機器人中對其進行解碼,但我不確定這是如何實現的可以完成 https://www.npmjs.com/package/minecraft-server-util這是我使用的 api,如果你想看一下,如果你需要看一下我的代碼,這樣你就可以向我展示如何整合它就是這樣const discord = require("discord.js");const util = require('minecraft-server-util');const {MessageEmbed} = require('discord.js');const bot = new discord.Client();const token = "my token but i removed it here for privecy reasons";const PREFIX = "-";var version = "1.0.1"util.status("hypixel.net")bot.on("ready", ()=>{  console.log("this bot is online!")})bot.on("message", message=>{  let args = message.content.slice(PREFIX.length).split(" ")  switch(args[0]){    case "ping":      message.reply ("pong");      break;    case "website":      message.channel.send("youtube.com/probler")      break;    case "info":      if(args[1] === "version"){        message.channel.send("We Are Curently In Version " + version)      }      else{        message.channel.send("Invalid Command")      }      break;    case "clear":      if(!args[1]) return message.reply("Error Please Define A Number")      message.channel.bulkDelete(args[1]);      break;    case "embed":      const embed = new MessageEmbed()      .setColor('RANDOM')      .setTitle("User Information")      .addField("Player Name", message.author.username, true)      .addField("Current Server", message.guild.name,)      .setThumbnail(message.author.displayAvatarURL())      .setFooter("Version " + version)      message.channel.send(embed);      break;        })       .catch((error, response) => {           throw error;       });       break;      }  })
查看完整描述

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 格式或文件類型與我的不同,您可能需要稍微調整代碼。

解釋

我將在下面解釋該解決方案的每個步驟:

  1. response.favicon.split(",").slice(1).join(",")

這從 base64 字符串獲取數據。Base64 的格式通常類似于:data:<media type>;[charset=<character set>];base64,<data>。正如您所看到的,base64 的實際數據僅在第一個逗號之后開始,因此我刪除了這行代碼中逗號之前的所有內容。

  1. Buffer.from(fav, "base64")

這會將 Base64 轉換為緩沖區。Discord 的消息附件不能使用 base64 URL,但它們可以使用任何可以解析為Buffer.?該行允許將我們的 base64 數據轉換為可以在 Discord 中作為附件發送的數據。

  1. new Discord.MessageAttachment(imageStream, "favicon.png")

請注意,base64 URL 和 Buffer 都不能直接設置為嵌入的縮略圖??s略圖僅支持常規 URL。因此,我們可以使用 Discord.js 提供的解決方法,它允許我們首先將緩沖區作為附件附加,然后將其移動到縮略圖中。此行創建我們的附件,并將其命名為“favicon.png”(這很重要,因為我們稍后需要訪問該名稱)。

  1. .attachFiles([attachment])

該行將我們新創建的內容附加MessageAttachment到嵌入中。它僅作為文件附加,尚未出現在我們嵌入的縮略圖中。

  1. .setThumbnail("attachment://favicon.png")

現在我們可以使用discord.js 的解決方法將圖像放入縮略圖中。我們可以用來attachment://fileName.extension訪問嵌入中的任何和所有附加文件。這將允許我們通過從附件中抓取文件來將嵌入的縮略圖、圖標或圖像設置到我的世界服務器的圖標上。最重要的是,當我們執行此操作時,文件會移動到縮略圖,并且不會另外作為附件發送。

查看完整回答
反對 回復 2023-12-14
  • 1 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號