首页 > 解决方案 > Discord.js 在嵌入链接中将 api 连接到不和谐机器人

问题描述

我一直在尝试编写一个机器人,该机器人将发布和嵌入链接,以根据用户输入的数字显示漫画、标签等的标题。我正在查看的 api 是This并且我想知道将它连接到我的不和谐机器人的最佳方式是什么?

client.on("message", (message) => {
    if (!message.content.startsWith(prefix)) return;
    if (message.content.startsWith(prefix)) {
        let chosenNum = message.content.match(/\d+/)?.[0].slice(0);
        if (chosenNum.length > 6) {
          message.channel.send("**1-6 digits only**")
        } else{
        message.channel.send(`${chosenNum}`)
      }
    }
});

标签: javascriptnode.jsnpmdiscorddiscord.js

解决方案


您选择的包有一个非常简单的 API。您只需要nhentai.exists()nhentai.getDoujin()方法。第一个您可以检查用户提交的 ID 是否存在,第二个您可以获取一个 JSON 对象,您可以使用它来填充您的嵌入。

看看下面的例子:

const { Client, MessageEmbed } = require('discord.js');
const nhentai = require('nhentai-js');

const client = new Client();
const prefix = '!';

client.on('message', async (message) => {
  if (!message.content.startsWith(prefix)) return;
  // create an args variable that slices off the prefix and splits it into an array
  const args = message.content.slice(prefix.length).split(/ +/);
  // create a command variable by taking the first element in the array
  // and removing it from args
  const command = args.shift().toLowerCase();

  if (command === 'hen') {
    const chosenNum = args[0]?.match(/\d+/)?.[0];

    if (!chosenNum)
      return message.channel.send('You need to provide a number');

    if (chosenNum.length > 6)
      return message.channel.send('**1-6 digits only**');

    try {
      if (!(await nhentai.exists(chosenNum)))
        return message.channel.send(`No results found for "${chosenNum}".`);

      // res is your JSON object, feel free to console.log its content
      const res = await nhentai.getDoujin(chosenNum);
      const embed = new MessageEmbed()
        .setColor('#ed2553')
        .setTitle(res.title)
        .setImage(res.pages[0])
        .setURL(res.link)
        .addField('Pages', res.details.pages[0], true)
        .addField('Uploaded', res.details.uploaded[0], true);

      if (res.details.languages)
        embed.addField('Languages', res.details.languages.join(', '), true);
      if (res.details.characters)
        embed.addField('Top characters', res.details.characters.slice(0, 3).join(', '), true);
      if (res.details.tags)
        embed.addField('Top tags', res.details.tags.slice(0, 3).join(', '), true);

      return message.channel.send(embed);
    } catch (err) {
      console.log(err);
      return message.channel.send('Oops, there was an error. Maybe try again?!');
    }
  }
});

在此处输入图像描述


推荐阅读