使用 node-fetch 从 api 嵌入 DnD 咒语
Posted
技术标签:
【中文标题】使用 node-fetch 从 api 嵌入 DnD 咒语【英文标题】:Using node-fetch to embed DnD spells from api 【发布时间】:2020-08-12 14:22:36 【问题描述】:我希望能够使用 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 酸性箭头(例如)
然后返回:
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】:首先,您无需在获取spells
后使用两次.then()
。
根据我在访问https://www.dnd5eapi.co/api/spells/ 时看到的情况,每个spell
都有一个index
,可用于查找spell
,通常是spell
name
使用@987654330 加入@所以如果你抓住用户的输入,比如说!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!'));
【讨论】:
我无法立即尝试,但我只想对您如此彻底和快速的回复表示感谢!以上是关于使用 node-fetch 从 api 嵌入 DnD 咒语的主要内容,如果未能解决你的问题,请参考以下文章
从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题
node-fetch "api key is not a legal HTTP header" 错误