我重构了我的代码以消除一些冗余,其中的一部分是为生成我的机器人作为回复发送的嵌入而创建助手函数.对于其中一个斜杠命令,机器人应该发回多个嵌入.
mercHelper.js
(将辅助函数放置在utils
文件夹中)
const { MessageEmbed } = require('discord.js');
const { request } = require('undici');
const { MERC_URL, BASE_URL } = require('./utils');
const { mercAliases } =require('./mercAliases')
async function getMerc( mercName ){
if (mercName in mercAliases){ mercName = mercAliases[mercName] };
const { body } = await request(MERC_URL + encodeURIComponent(mercName));
const { mercs } = await body.json();
const [mercAnswer] = mercs;
const mercEmbed = new MessageEmbed()
.setTitle(mercAnswer.name)
.setDescription('Mentor notes will go here.')
.setImage(BASE_URL + mercAnswer.screenshot)
const mercLeaderEmbed = new MessageEmbed()
.setImage(BASE_URL+'/commanders/'+ mercAnswer.commander_id+'/screenshot')
.setDescription('Name of mercenary group leader: '+ mercAnswer.bossname)
const mercTroopEmbed = new MessageEmbed()
.setImage(BASE_URL+'/commanders/'+ mercAnswer.unit_id+'/screenshot')
.setDescription('Number of units: '+ mercAnswer.nrunits)
return [mercEmbed, mercLeaderEmbed, mercTroopEmbed];
}
module.exports = { getMerc }
merc.js
(斜杠命令文件)
const { SlashCommandBuilder } = require('@discordjs/builders');
const { getMerc } = require('../utils/mercHelper');
module.exports = {
data: new SlashCommandBuilder()
.setName('merc')
.setDescription('Replies with information about a merc')
.addStringOption(option => option.setName('merc_name').setDescription('Enter the name of the mercenary').setRequired(true)),
async execute(interaction) {
let mercName = interaction.options.getString('merc_name');
const mercEmbed = await getMerc( mercName );
const mercLeaderEmbed = await getMerc( mercName );
console.log('mercLeaderEmbed'+mercLeaderEmbed)
const mercTroopEmbed = await getMerc( mercName );
console.log('mercTroopEmbed'+mercTroopEmbed)
await interaction.reply({ embeds: [mercEmbed, mercLeaderEmbed, mercTroopEmbed] });
},
};
当我运行我当前拥有的代码时,我得到以下错误消息:DiscordAPIError: Invalid Form Body
,然后是空data.embeds
.
我认为这是因为当我从helper函数"返回"嵌入时,它正在以某种方式运行.我在助手文件中添加了console.log
个--所有信息都已存在.
当我try 在斜杠命令文件(merc.js
)中执行相同的操作时,我得到mercLeaderEmbed[object Object],[object Object],[object Object]
,第二个console.log
也是如此.
也许return
运行正常,但我没有正确调用信息,这导致[object Object]
返回,但我不确定如何解决该问题/如何重写代码以避免这种情况.