gpt4 book ai didi

javascript - 将 REST API 用于 Discord 机器人

转载 作者:行者123 更新时间:2023-12-05 05:38:23 25 4
gpt4 key购买 nike

我正在尝试制作自己的 discord 机器人(在 discord.js v13 中)。我找到了官方discord.js guide on this topictheir example code ,我正在尝试使用/重用那里的代码来构建我自己的机器人。

想法是在斜杠命令 "item"(所以 /item: firebrand)之后获取用户输入,将该用户输入传递到 URL(允许您可以从后端/API 获取有关该项目的信息)并使用收到的响应来填充嵌入的各个字段,这些字段将发送回用户。

我能够传递用户输入并将其添加到 URL,这将返回一个可用链接,但代码在创建嵌入之前中断。我在我的代码中输入了一些 console.log 命令来查看哪里出了问题。

查看下面代码中console.log的位置。

  • 控制台日志 1:{"items":[{"id":14,"name":"Frost Brand","type":"1-h wpn","conSTLevel":4,"mainlevel":1,"mpath":"W1","gemcost":"5W","screenshot":"/items/14/screenshot"}],"similarity":-0}
  • 控制台日志 2:https://dom5api.illwiki.com/items?match=fuzzy&name=frostbrand
  • 控制台日志 3:[object Object]
  • 控制台日志 4:[object Object]
  • 控制台日志 5:undefined - 类型错误:无法读取未定义的属性(读取“长度”)

我的猜测是我收到 TypeError 因为 { list }undefined。这可能是因为 itemSearchResult.body 正在返回 [object Object] 作为响应,但我不知道如何解决这个问题。

const { SlashCommandBuilder } = require('@discordjs/builders');
const { MessageEmbed } = require('discord.js');
const { request } = require('undici');
const { ITEM_URL, BASE_URL } = require('../utils/utils');

module.exports = {
data: new SlashCommandBuilder()
.setName('item')
.setDescription('Replies with information about an item')
.addStringOption(option => option.setName('item_name').setDescription('Enter the name of the item')),
async execute(interaction) {
async function getJSONResponse(body) {
let fullBody = '';
for await (const data of body) {
fullBody += data.toString();
console.log(`Console log 1: `+fullBody);
}
return JSON.parse(fullBody);
}
const itemName = interaction.options.getString('item_name');

const itemSearchResult = await request(ITEM_URL + encodeURIComponent(itemName));
console.log(`Console log 2: `+ITEM_URL + encodeURIComponent(itemName));
console.log(`Console log 3: `+itemSearchResult.body);
console.log(`Console log 4: `+itemSearchResult.body.toString())
const { list } = await getJSONResponse(itemSearchResult.body);
console.log(`Console log 5: `+list)

if (!list.length) {
await interaction.reply(`No results found for **${itemName}**.`);
}

const [answer] = list;

const itemEmbed = new MessageEmbed()
.setColor('#000000')
.setTitle(answer.name)
.setURL('X')
.setAuthor({ name: 'Author' })
.setDescription('Lot of hassle, but hey, it was working!')
.setImage(BASE_URL + answer.screenshot)
.setTimestamp()
.setFooter({ text: 'A small step for X, a giant leap for X' });
await interaction.reply({ embeds: [itemEmbed] });
},
};

我尝试在网上和 StackOverflow 上搜索错误消息/类似案例,但一无所获。非常感谢任何帮助!

最佳答案

正如您在回答中提到的,返回的对象中没有 list 项。它应该是 items。此外,您还收到了 [object Object],因为您隐式地将返回的对象强制转换为字符串(即 console.log(`Console log 3: `+itemSearchResult.body`) .

不过我要回答的原因是您可以摆脱那个丑陋的 getJSONResponse() 函数并使用内置的 body mixin简化您的代码:

async execute(interaction) {
const itemName = interaction.options.getString('item_name');
const { body } = await request(ITEM_URL + encodeURIComponent(itemName));
const { items } = await body.json();

if (!items.length)
await interaction.reply(`No results found for **${itemName}**.`);

const [answer] = items;
const itemEmbed = new MessageEmbed()
.setColor('#000000')
.setTitle(answer.name)
.setAuthor({ name: 'Author' })
.setDescription('Lot of hassle, but hey, it was working!')
.setImage(BASE_URL + answer.screenshot)
.setTimestamp()
.setFooter({ text: 'A small step for X, a giant leap for X' });
await interaction.reply({ embeds: [itemEmbed] });
},

enter image description here

关于javascript - 将 REST API 用于 Discord 机器人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72921103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com