使用 node-fetch 嵌入来自 api 的 DnD 法术
Using node-fetch to embed DnD spells from api
我希望能够使用 Discord 机器人嵌入取自 5e Api 的特定 DnD 法术。我可以使用 node-fetch 将所有法术记录到控制台,但完全不确定下一步是获取用户输入,将其映射到正确的法术,然后将其嵌入。
运行 命令后控制台日志的样子:
{
count: 319,
results: [
{
index: 'acid-arrow',
name: 'Acid Arrow',
url: '/api/spells/acid-arrow'
},
(*Continuing on for all of the spells*)
我基本上希望命令是:
!s酸箭(例)
然后 returns:
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 });
},
};
首先,您不需要在获取 spells
后使用 .then()
两次。
根据我在访问 https://www.dnd5eapi.co/api/spells/ 时看到的内容,每个 spell
都有一个 index
可以用来查找 spell
并且通常是 spell
name
使用 -
加入,所以如果你获取用户的输入,假设 !s acid arrow
你可以
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!'));
我希望能够使用 Discord 机器人嵌入取自 5e Api 的特定 DnD 法术。我可以使用 node-fetch 将所有法术记录到控制台,但完全不确定下一步是获取用户输入,将其映射到正确的法术,然后将其嵌入。
运行 命令后控制台日志的样子:
{
count: 319,
results: [
{
index: 'acid-arrow',
name: 'Acid Arrow',
url: '/api/spells/acid-arrow'
},
(*Continuing on for all of the spells*)
我基本上希望命令是:
!s酸箭(例)
然后 returns:
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 });
},
};
首先,您不需要在获取 spells
后使用 .then()
两次。
根据我在访问 https://www.dnd5eapi.co/api/spells/ 时看到的内容,每个 spell
都有一个 index
可以用来查找 spell
并且通常是 spell
name
使用 -
加入,所以如果你获取用户的输入,假设 !s acid arrow
你可以
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!'));