discord-js-pagination期望接收什么类型的对象?调用时报send属性未定义
问题原因
你遇到的报错是两个入参传递错误导致的:
- 你定义的
run函数要求接收DiscordMessage实例作为参数,但你调用run(data)时传入的是接口返回的业务数据数组,而非触发命令的msg对象。 discord-js-pagination的第一个入参要求是DiscordMessage实例,用于获取频道对象发送分页消息,你传入了字符串'some message',字符串不存在channel.send属性,因此触发报错。
修复方案
修改两处代码即可:
- 将调用
run(data)改为run(msg),传入触发命令的原始消息对象 - 将
pagination('some message', pages)改为pagination(message, pages),传入run函数接收到的消息实例
修改后的核心代码片段参考:
if (msg.content.toLowerCase().startsWith(prefix + 'romanreport')) { axios.get(`${host}/quote`) .then(({ data }) => { if (data.length > 0) { const run = async (message) => { console.log(data) const MAX_FIELDS = 25; const fields = data.map(i => ({ name: String(i.id), value: i.quote })) if (fields.length <= MAX_FIELDS) return message.reply( new Discord.MessageEmbed() .setTitle('Help') .setDescription(`Prefix: ${prefix}`) .addFields(fields), ); const chunks = chunkify(fields, MAX_FIELDS); const pages = []; chunks.forEach((chunk) => { pages.push( new Discord.MessageEmbed() .setTitle('Help') .setDescription(`Prefix: ${prefix}`) .addFields(chunk), ); }); console.log('pages', pages) // 第一个参数传入message实例 pagination(message, pages); } function chunkify(arr, len) { let chunks = []; let i = 0; let n = arr.length; while (i < n) { chunks.push(arr.slice(i, (i += len))); } return chunks; } // 调用run时传入触发命令的msg对象 run(msg);
额外提示:MessageEmbed要求字段name必须是字符串,你当前设置的name是数字类型i.id,建议用String(i.id)做类型转换避免后续潜在报错
内容的提问来源于stack exchange,提问作者Larry Schwall
相关产品推荐
相关产品推荐

