用于 Discord 机器人的 Base 64 url​​ 转换器

我使用 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;

      }

  }

)


HUWWW
浏览 93回答 1
1回答

智慧大石

解决方案我花了一段时间,并进行了很多失败的测试,才弄清楚这一点。但我终于让它工作了,这是最终结果: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 都不能直接设置为嵌入的缩略图。缩略图仅支持常规 URL。因此,我们可以使用 Discord.js 提供的解决方法,它允许我们首先将缓冲区作为附件附加,然后将其移动到缩略图中。此行创建我们的附件,并将其命名为“favicon.png”(这很重要,因为我们稍后需要访问该名称)。.attachFiles([attachment])该行将我们新创建的内容附加MessageAttachment到嵌入中。它仅作为文件附加,尚未出现在我们嵌入的缩略图中。.setThumbnail("attachment://favicon.png")现在我们可以使用discord.js 的解决方法将图像放入缩略图中。我们可以用来attachment://fileName.extension访问嵌入中的任何和所有附加文件。这将允许我们通过从附件中抓取文件来将嵌入的缩略图、图标或图像设置到我的世界服务器的图标上。最重要的是,当我们执行此操作时,文件会移动到缩略图,并且不会另外作为附件发送。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript