Использование node-fetch для встраивания заклинаний DnD из API - PullRequest
1 голос
/ 28 апреля 2020

Я хочу иметь возможность встраивать определенные c DnD заклинания, взятые из 5e Api , используя бот Discord. Я могу записать все заклинания на консоль, используя функцию извлечения узла, но совершенно не уверен в следующем шаге захвата ввода пользователя, сопоставления его с правильным заклинанием и последующего встраивания.

Как выглядит журнал консоли после запустив команду:

{
  count: 319,
  results: [
    {
      index: 'acid-arrow',
      name: 'Acid Arrow',
      url: '/api/spells/acid-arrow'
    },
(*Continuing on for all of the spells*)

Мне бы хотелось, чтобы команда была:

! s acid arrow (например)

Что тогда возвращает:

Discord embed image

Вот код из команды, которую я имею до сих пор:

const fetch = require('node-fetch');
const Discord = require('discord.js');

module.exports = {
    name: 'spells',
    aliases: ['s'],
    category: 'dnd',
    description: 'Returns spell info',
    usage: '!s <spell name>',
    run: async (client, message, args) => {

        fetch('https://www.dnd5eapi.co/api/spells/')
            .then(res => res.json())
            .then(json => console.log(json));

        **?????????????;**

        const embed = new Discord.MessageEmbed()
            .setTitle()
            .addField('Description:')
            .addField('At higher levels:')
            .addField('Range:')
            .addField('Components:')
            .addField('Materials needed:')
            .addField('Is it a ritual:')
            .addField('Needs concentration:')
            .addField('Level:')
            .addField('Casting time:');

        message.channel.send({ embed });
    },
};

1 Ответ

0 голосов
/ 28 апреля 2020

Чтобы начать, вам не нужно использовать .then() дважды после получения spells.

В зависимости от того, что я вижу при посещении https://www.dnd5eapi.co/api/spells/ каждый spell имеет index, который может использоваться для поиска spell и обычно является spell name объединением с использованием -, поэтому, если вы захватите ввод пользователя, скажем, !s acid arrow, вы можете do

fetch(`https://www.dnd5eapi.co/api/spells/${args.join('-')}`)

который будет вызывать https://www.dnd5eapi.co/api/spells/acid-arrow. Это поможет вам не искать spell.

. Затем вы можете использовать .then(), чтобы использовать spell информацию, и передать ее embed.

. решение будет:

fetch('https://www.dnd5eapi.co/api/spells/')
    .then(res => {
        const embed = new Discord.MessageEmbed()
            .setTitle(res.name)
            .addField('Description:', res.desc.join('\n'))
            .addField('At higher levels:', res.higher_level.join('\n'))
            .addField('Range:', res.range)
            .addField('Components:', res.components.join('\n'))
            .addField('Materials needed:', res.material)
            .addField('Is it a ritual:', res.ritual ? 'Yes' : 'No')
            .addField('Needs concentration:', res.concentration ? 'Yes' : 'No')
            .addField('Level:', res.level)
            .addField('Casting time:', res.casting_time);

        message.channel.send(embed);
    })
    .catch(err => message.reply('that spell does not exist!'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...